< prev index next >
src/hotspot/share/gc/serial/serialHeap.cpp
Print this page
@@ -25,10 +25,11 @@
#include "precompiled.hpp"
#include "gc/serial/defNewGeneration.inline.hpp"
#include "gc/serial/serialHeap.hpp"
#include "gc/serial/tenuredGeneration.inline.hpp"
#include "gc/shared/genMemoryPools.hpp"
+#include "gc/shared/strongRootsScope.hpp"
#include "memory/universe.hpp"
#include "services/memoryManager.hpp"
SerialHeap* SerialHeap::heap() {
return named_heap<SerialHeap>(CollectedHeap::Serial);
@@ -85,5 +86,28 @@
memory_pools.append(_eden_pool);
memory_pools.append(_survivor_pool);
memory_pools.append(_old_pool);
return memory_pools;
}
+
+void SerialHeap::young_process_roots(StrongRootsScope* scope,
+ OopsInGenClosure* root_closure,
+ OopsInGenClosure* old_gen_closure,
+ CLDClosure* cld_closure) {
+ MarkingCodeBlobClosure mark_code_closure(root_closure, CodeBlobToOopClosure::FixRelocations);
+
+ process_roots(scope, SO_ScavengeCodeCache, root_closure,
+ cld_closure, cld_closure, &mark_code_closure);
+
+ if (_process_strong_tasks->try_claim_task(GCH_PS_younger_gens)) {
+ root_closure->reset_generation();
+ }
+
+ // When collection is parallel, all threads get to cooperate to do
+ // old generation scanning.
+ old_gen_closure->set_generation(_old_gen);
+ rem_set()->at_younger_refs_iterate();
+ old_gen()->younger_refs_iterate(old_gen_closure, scope->n_threads());
+ old_gen_closure->reset_generation();
+
+ _process_strong_tasks->all_tasks_completed(scope->n_threads());
+}
< prev index next >