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

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

*** 232,241 **** --- 232,242 ---- void G1RemSet::scanRS(OopsInHeapRegionClosure* oc, int worker_i) { double rs_time_start = os::elapsedTime(); HeapRegion *startRegion = calculateStartRegion(worker_i); ScanRSClosure scanRScl(oc, worker_i); + _g1->collection_set_iterate_from(startRegion, &scanRScl); scanRScl.set_try_claimed(); _g1->collection_set_iterate_from(startRegion, &scanRScl); double scan_rs_time_sec = os::elapsedTime() - rs_time_start;
*** 281,290 **** --- 282,292 ---- void G1RemSet::updateRS(DirtyCardQueue* into_cset_dcq, int worker_i) { double start = os::elapsedTime(); // Apply the given closure to all remaining log entries. RefineRecordRefsIntoCSCardTableEntryClosure into_cset_update_rs_cl(_g1, into_cset_dcq); + _g1->iterate_dirty_card_closure(&into_cset_update_rs_cl, into_cset_dcq, false, worker_i); // Now there should be no dirty cards. if (G1RSLogCheckCardTable) { CountNonCleanMemRegionClosure cl(_g1);
*** 464,474 **** // Scan oops in the card looking for references into the collection set HeapWord* end = _ct_bs->addr_for(card_ptr + 1); MemRegion scanRegion(start, end); UpdateRSetImmediate update_rs_cl(_g1->g1_rem_set()); ! FilterIntoCSClosure update_rs_cset_oop_cl(NULL, _g1, &update_rs_cl); FilterOutOfRegionClosure filter_then_update_rs_cset_oop_cl(r, &update_rs_cset_oop_cl); // We can pass false as the "filter_young" parameter here as: // * we should be in a STW pause, // * the DCQS to which this closure is applied is used to hold --- 466,476 ---- // Scan oops in the card looking for references into the collection set HeapWord* end = _ct_bs->addr_for(card_ptr + 1); MemRegion scanRegion(start, end); UpdateRSetImmediate update_rs_cl(_g1->g1_rem_set()); ! FilterIntoCSClosure update_rs_cset_oop_cl(NULL, _g1, &update_rs_cl, NULL /* rp */); FilterOutOfRegionClosure filter_then_update_rs_cset_oop_cl(r, &update_rs_cset_oop_cl); // We can pass false as the "filter_young" parameter here as: // * we should be in a STW pause, // * the DCQS to which this closure is applied is used to hold
*** 640,650 **** check_for_refs_into_cset, worker_i); update_rs_oop_cl.set_from(r); TriggerClosure trigger_cl; ! FilterIntoCSClosure into_cs_cl(NULL, _g1, &trigger_cl); InvokeIfNotTriggeredClosure invoke_cl(&trigger_cl, &into_cs_cl); Mux2Closure mux(&invoke_cl, &update_rs_oop_cl); FilterOutOfRegionClosure filter_then_update_rs_oop_cl(r, (check_for_refs_into_cset ? --- 642,652 ---- check_for_refs_into_cset, worker_i); update_rs_oop_cl.set_from(r); TriggerClosure trigger_cl; ! FilterIntoCSClosure into_cs_cl(NULL, _g1, &trigger_cl, NULL /* rp */); InvokeIfNotTriggeredClosure invoke_cl(&trigger_cl, &into_cs_cl); Mux2Closure mux(&invoke_cl, &update_rs_oop_cl); FilterOutOfRegionClosure filter_then_update_rs_oop_cl(r, (check_for_refs_into_cset ?