--- old/src/hotspot/share/gc/g1/g1RemSet.cpp 2018-10-24 21:35:06.464406575 +0200 +++ new/src/hotspot/share/gc/g1/g1RemSet.cpp 2018-10-24 21:35:06.264405447 +0200 @@ -334,7 +334,8 @@ void G1ScanRSForRegionClosure::scan_card(MemRegion mr, uint region_idx_for_card) { HeapRegion* const card_region = _g1h->region_at(region_idx_for_card); - _scan_objs_on_card_cl->set_region(card_region); + assert(!card_region->is_young(), "Should not scan card in young region %u", region_idx_for_card); + _scan_objs_on_card_cl->set_from_is_young(false); card_region->oops_on_card_seq_iterate_careful(mr, _scan_objs_on_card_cl); _scan_objs_on_card_cl->trim_queue_partially(); _cards_scanned++; @@ -494,7 +495,7 @@ if (G1HotCardCache::default_use_cache()) { G1EvacPhaseTimesTracker x(p, pss, G1GCPhaseTimes::ScanHCC, worker_i); - G1ScanObjsDuringUpdateRSClosure scan_hcc_cl(_g1h, pss, worker_i); + G1ScanObjsDuringUpdateRSClosure scan_hcc_cl(_g1h, pss); G1RefineCardClosure refine_card_cl(_g1h, &scan_hcc_cl); _g1h->iterate_hcc_closure(&refine_card_cl, worker_i); } @@ -503,7 +504,7 @@ { G1EvacPhaseTimesTracker x(p, pss, G1GCPhaseTimes::UpdateRS, worker_i); - G1ScanObjsDuringUpdateRSClosure update_rs_cl(_g1h, pss, worker_i); + G1ScanObjsDuringUpdateRSClosure update_rs_cl(_g1h, pss); G1RefineCardClosure refine_card_cl(_g1h, &update_rs_cl); _g1h->iterate_dirty_card_closure(&refine_card_cl, worker_i); @@ -729,7 +730,8 @@ assert(!dirty_region.is_empty(), "sanity"); HeapRegion* const card_region = _g1h->region_at(card_region_idx); - update_rs_cl->set_region(card_region); + assert(!card_region->is_young(), "Should not scan card in young region %u", card_region_idx); + update_rs_cl->set_from_is_young(false); bool card_processed = card_region->oops_on_card_seq_iterate_careful(dirty_region, update_rs_cl); assert(card_processed, "must be"); return true;