--- old/src/hotspot/share/gc/g1/g1CollectedHeap.cpp 2019-06-07 11:25:09.273470938 +0200 +++ new/src/hotspot/share/gc/g1/g1CollectedHeap.cpp 2019-06-07 11:25:08.870458172 +0200 @@ -2780,6 +2780,23 @@ cl.flush_rem_set_entries(); } +#ifndef PRODUCT +void G1CollectedHeap::verify_region_attr_remset_update() { + class VerifyRegionAttrRemSet : public HeapRegionClosure { + public: + virtual bool do_heap_region(HeapRegion* r) { + G1CollectedHeap* g1h = G1CollectedHeap::heap(); + bool const needs_remset_update = g1h->region_attr(r->bottom()).needs_remset_update(); + assert(r->rem_set()->is_tracked() == needs_remset_update, + "Region %u remset tracking status (%s) different to region attribute (%s)", + r->hrm_index(), BOOL_TO_STR(r->rem_set()->is_tracked()), BOOL_TO_STR(needs_remset_update)); + return false; + } + } cl; + heap_region_iterate(&cl); +} +#endif + class VerifyRegionRemSetClosure : public HeapRegionClosure { public: bool do_heap_region(HeapRegion* hr) { @@ -3059,6 +3076,7 @@ // Actually do the work... evacuate_initial_collection_set(&per_thread_states); + if (_collection_set.optional_region_length() != 0) { evacuate_optional_collection_set(&per_thread_states); }