--- old/src/hotspot/share/gc/g1/g1CollectionSet.cpp 2018-11-27 18:26:12.512012368 +0100 +++ new/src/hotspot/share/gc/g1/g1CollectionSet.cpp 2018-11-27 18:26:12.088010266 +0100 @@ -26,6 +26,7 @@ #include "gc/g1/g1CollectedHeap.inline.hpp" #include "gc/g1/g1CollectionSet.hpp" #include "gc/g1/g1CollectorState.hpp" +#include "gc/g1/g1ParScanThreadState.hpp" #include "gc/g1/g1Policy.hpp" #include "gc/g1/heapRegion.inline.hpp" #include "gc/g1/heapRegionRemSet.hpp" @@ -104,6 +105,8 @@ void G1CollectionSet::initialize_optional(uint max_length) { assert(_optional_regions == NULL, "Already initialized"); + assert(_optional_region_length == 0, "Already initialized"); + assert(_optional_region_max_length == 0, "Already initialized"); _optional_region_max_length = max_length; _optional_regions = NEW_C_HEAP_ARRAY(HeapRegion*, _optional_region_max_length, mtGC); } @@ -449,6 +452,7 @@ } bool G1CollectionSet::optional_is_full() { + assert(_optional_region_length <= _optional_region_max_length, "Invariant"); return _optional_region_length == _optional_region_max_length; } @@ -630,6 +634,7 @@ // chooser in reverse order to maintain the old order. HeapRegion* hr = _cset->remove_last_optional_region(); assert(hr != NULL, "Should be valid region left"); + _pset->free_unused_optional_region(hr); g1h->old_set_add(hr); g1h->clear_in_cset(hr); hr->set_index_in_opt_cset(InvalidCSetIndex);