--- old/src/hotspot/share/gc/g1/g1OopClosures.cpp 2018-10-25 11:37:25.814447149 +0200 +++ new/src/hotspot/share/gc/g1/g1OopClosures.cpp 2018-10-25 11:37:25.392434147 +0200 @@ -38,7 +38,7 @@ { } G1ScanClosureBase::G1ScanClosureBase(G1CollectedHeap* g1h, G1ParScanThreadState* par_scan_state) : - _g1h(g1h), _par_scan_state(par_scan_state), _from_is_young(true) + _g1h(g1h), _par_scan_state(par_scan_state) { } void G1CLDScanClosure::do_cld(ClassLoaderData* cld) { --- old/src/hotspot/share/gc/g1/g1OopClosures.hpp 2018-10-25 11:37:27.033484705 +0200 +++ new/src/hotspot/share/gc/g1/g1OopClosures.hpp 2018-10-25 11:37:26.614471796 +0200 @@ -43,7 +43,6 @@ protected: G1CollectedHeap* _g1h; G1ParScanThreadState* _par_scan_state; - bool _from_is_young; G1ScanClosureBase(G1CollectedHeap* g1h, G1ParScanThreadState* par_scan_state); ~G1ScanClosureBase() { } @@ -56,8 +55,6 @@ public: virtual ReferenceIterationMode reference_iteration_mode() { return DO_FIELDS; } - void set_from_is_young(bool from_is_young) { _from_is_young = from_is_young; } - inline void trim_queue_partially(); }; @@ -87,9 +84,13 @@ // This closure is applied to the fields of the objects that have just been copied during evacuation. class G1ScanEvacuatedObjClosure : public G1ScanClosureBase { + bool _scanning_in_young; + public: G1ScanEvacuatedObjClosure(G1CollectedHeap* g1h, G1ParScanThreadState* par_scan_state) : - G1ScanClosureBase(g1h, par_scan_state) { } + G1ScanClosureBase(g1h, par_scan_state), _scanning_in_young(false) { } + + void set_scanning_in_young(bool scanning_in_young) { _scanning_in_young = scanning_in_young; } template void do_oop_work(T* p); virtual void do_oop(oop* p) { do_oop_work(p); } --- old/src/hotspot/share/gc/g1/g1OopClosures.inline.hpp 2018-10-25 11:37:27.874510615 +0200 +++ new/src/hotspot/share/gc/g1/g1OopClosures.inline.hpp 2018-10-25 11:37:27.449497522 +0200 @@ -87,7 +87,7 @@ return; } handle_non_cset_obj_common(state, p, obj); - if (_from_is_young) { + if (_scanning_in_young) { return; } _par_scan_state->enqueue_card_if_tracked(p, obj); @@ -180,7 +180,6 @@ return; } handle_non_cset_obj_common(state, p, obj); - assert(!_from_is_young, "Should not be the case."); _par_scan_state->enqueue_card_if_tracked(p, obj); } } --- old/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp 2018-10-25 11:37:28.711536403 +0200 +++ new/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp 2018-10-25 11:37:28.292523494 +0200 @@ -311,7 +311,7 @@ oop* old_p = set_partial_array_mask(old); do_oop_partial_array(old_p); } else { - _scanner.set_from_is_young(dest_state.is_young()); + _scanner.set_scanning_in_young(dest_state.is_young()); obj->oop_iterate_backwards(&_scanner); } return obj; @@ -366,7 +366,7 @@ _g1h->preserve_mark_during_evac_failure(_worker_id, old, m); - _scanner.set_from_is_young(r->is_young()); + _scanner.set_scanning_in_young(r->is_young()); old->oop_iterate_backwards(&_scanner); return old; --- old/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp 2018-10-25 11:37:29.558562498 +0200 +++ new/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp 2018-10-25 11:37:29.134549435 +0200 @@ -114,7 +114,7 @@ } HeapRegion* hr = _g1h->heap_region_containing(to_obj); - _scanner.set_from_is_young(hr->is_young()); + _scanner.set_scanning_in_young(hr->is_young()); // Process indexes [start,end). It will also process the header // along with the first chunk (i.e., the chunk with start == 0). // Note that at this point the length field of to_obj_array is not --- old/src/hotspot/share/gc/g1/g1RemSet.cpp 2018-10-25 11:37:30.783600239 +0200 +++ new/src/hotspot/share/gc/g1/g1RemSet.cpp 2018-10-25 11:37:30.355587053 +0200 @@ -335,7 +335,6 @@ void G1ScanRSForRegionClosure::scan_card(MemRegion mr, uint region_idx_for_card) { HeapRegion* const card_region = _g1h->region_at(region_idx_for_card); 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++; @@ -731,7 +730,6 @@ HeapRegion* const card_region = _g1h->region_at(card_region_idx); 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;