RFR (M) 8150393: Maintain the set of survivor regions in an array between GCs
mikael.gerdin at oracle.com
Thu Apr 28 10:59:15 UTC 2016
Please review this refactoring of the G1 YoungList class to simplify the
management of young regions.
Survivor regions are tracked in a sublist of the YoungList linked list
(using HeapRegion::_next_young_region) with explicit tracking of the
head and tail of the survivor regions.
The number of survivors is tracked in a special counter in YoungList and
at the end of a GC the amazingly named YoungList::reset_auxillary_lists
makes the survivor regions proper members of the YoungList.
My suggested fix is to explicitly track survivors in a GrowableArray
instead to make way for the complete removal of
HeapRegion::_next_young_region. There is a lot of overlap between the
incremental collection set and the young list and the only case where
they are not representing the exact same set of regions is during a GC,
where the "to-space" survivor regions need explicit tracking.
By tracking the survivor regions in an array instead of a linked list we
can also speed up concurrent root region scanning by getting rid of
mutex synchronization when iterating over the survivor regions to scan.
In order to maintain the integrity of the YoungList linked list I've
modified the code to append the survivors to that list in
reset_auxillary_lists for now, but I plan to change that in an upcoming
Webrev of complete change:
Webrev of survivor array creation:
Webrev of cleanup of survivor linked list uses
Testing: GC RBT Testing, Performance testing shows no significant
More information about the hotspot-gc-dev