src/share/vm/gc_implementation/g1/g1MarkSweep.cpp

Print this page
rev 2518 : [mq]: g1-reference-processing

*** 60,69 **** --- 60,71 ---- } #endif // hook up weak ref data so it can be used during Mark-Sweep assert(GenMarkSweep::ref_processor() == NULL, "no stomping"); assert(rp != NULL, "should be non-NULL"); + assert(rp == G1CollectedHeap::heap()->ref_processor_stw(), "Precondition"); + GenMarkSweep::_ref_processor = rp; rp->setup_policy(clear_all_softrefs); // When collecting the permanent generation methodOops may be moving, // so we either have to flush all bcp data or convert it into bci.
*** 137,146 **** --- 139,150 ---- &GenMarkSweep::follow_code_root_closure, &GenMarkSweep::follow_root_closure); // Process reference objects found during marking ReferenceProcessor* rp = GenMarkSweep::ref_processor(); + assert(rp == G1CollectedHeap::heap()->ref_processor_stw(), "Sanity"); + rp->setup_policy(clear_all_softrefs); rp->process_discovered_references(&GenMarkSweep::is_alive, &GenMarkSweep::keep_alive, &GenMarkSweep::follow_stack_closure, NULL);
*** 164,174 **** // Visit memoized MDO's and clear any unmarked weak refs GenMarkSweep::follow_mdo_weak_refs(); assert(GenMarkSweep::_marking_stack.is_empty(), "just drained"); - // Visit interned string tables and delete unmarked oops StringTable::unlink(&GenMarkSweep::is_alive); // Clean up unreferenced symbols in symbol table. SymbolTable::unlink(); --- 168,177 ----
*** 344,354 **** SharedHeap::SO_AllClasses, &GenMarkSweep::adjust_root_pointer_closure, NULL, // do not touch code cache here &GenMarkSweep::adjust_pointer_closure); ! g1h->ref_processor()->weak_oops_do(&GenMarkSweep::adjust_root_pointer_closure); // Now adjust pointers in remaining weak roots. (All of which should // have been cleared if they pointed to non-surviving objects.) g1h->g1_process_weak_roots(&GenMarkSweep::adjust_root_pointer_closure, &GenMarkSweep::adjust_pointer_closure); --- 347,364 ---- SharedHeap::SO_AllClasses, &GenMarkSweep::adjust_root_pointer_closure, NULL, // do not touch code cache here &GenMarkSweep::adjust_pointer_closure); ! assert(GenMarkSweep::ref_processor() == g1h->ref_processor_stw(), "Sanity"); ! g1h->ref_processor_stw()->weak_oops_do(&GenMarkSweep::adjust_root_pointer_closure); ! ! // The discovered lists of the CM reference processor were emptied ! // at the start of the Full GC but if the sentinel ref was moved ! // as part of this Full GC then they need to be adjusted to point ! // to the sentinel ref's new location. ! g1h->ref_processor_cm()->weak_oops_do(&GenMarkSweep::adjust_root_pointer_closure); // Now adjust pointers in remaining weak roots. (All of which should // have been cleared if they pointed to non-surviving objects.) g1h->g1_process_weak_roots(&GenMarkSweep::adjust_root_pointer_closure, &GenMarkSweep::adjust_pointer_closure);