src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
Print this page
@@ -127,17 +127,19 @@
GCTraceTime tm("phase 1", G1Log::fine() && Verbose, true, gc_timer(), gc_tracer()->gc_id());
GenMarkSweep::trace(" 1");
SharedHeap* sh = SharedHeap::heap();
- // Need cleared claim bits for the strong roots processing
+ // Need cleared claim bits for the roots processing
ClassLoaderDataGraph::clear_claimed_marks();
+ MarkingCodeBlobClosure follow_code_closure(&GenMarkSweep::follow_root_closure, !CodeBlobToOopClosure::FixRelocations);
sh->process_strong_roots(true, // activate StrongRootsScope
- SharedHeap::SO_SystemClasses,
+ SharedHeap::SO_None,
&GenMarkSweep::follow_root_closure,
- &GenMarkSweep::follow_klass_closure);
+ &GenMarkSweep::follow_cld_closure,
+ &follow_code_closure);
// Process reference objects found during marking
ReferenceProcessor* rp = GenMarkSweep::ref_processor();
assert(rp == G1CollectedHeap::heap()->ref_processor_stw(), "Sanity");
@@ -302,17 +304,19 @@
GCTraceTime tm("phase 3", G1Log::fine() && Verbose, true, gc_timer(), gc_tracer()->gc_id());
GenMarkSweep::trace("3");
SharedHeap* sh = SharedHeap::heap();
- // Need cleared claim bits for the strong roots processing
+ // Need cleared claim bits for the roots processing
ClassLoaderDataGraph::clear_claimed_marks();
- sh->process_strong_roots(true, // activate StrongRootsScope
- SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_AllCodeCache,
+ CodeBlobToOopClosure adjust_code_closure(&GenMarkSweep::adjust_pointer_closure, CodeBlobToOopClosure::FixRelocations);
+ sh->process_all_roots(true, // activate StrongRootsScope
+ SharedHeap::SO_AllCodeCache,
&GenMarkSweep::adjust_pointer_closure,
- &GenMarkSweep::adjust_klass_closure);
+ &GenMarkSweep::adjust_cld_closure,
+ &adjust_code_closure);
assert(GenMarkSweep::ref_processor() == g1h->ref_processor_stw(), "Sanity");
g1h->ref_processor_stw()->weak_oops_do(&GenMarkSweep::adjust_pointer_closure);
// Now adjust pointers in remaining weak roots. (All of which should