RFR: 8319867: GenShen: Make old regions parseable at end of concurrent cycles [v2]

William Kemper wkemper at openjdk.org
Sat Nov 11 00:56:02 UTC 2023


> ### Background
> When Shenandoah is performing a concurrent mark of the old generation, it is not safe for the young generation's remembered set scan to use the old mark bitmap. For this reason, any old regions that were not included in a collection set (either mixed or a global collection) must be made _parseable_ for the remembered set scan (we call this "coalescing and filling" in the code).
> 
> ### Description
> Before this change, Shenandoah has deferred making these regions parseable until it begins the young generation bootstrap cycle. This is fine, except that we have also recently made old generation collections subordinate to young collections. In other words, an old collection cannot start unless Shenandoah wants to first start a young collection.
> 
> Unfortunately, the additional time to concurrently coalesce and fill old regions before resetting the old mark bitmaps is not accounted for in the heuristics and this increases the likelihood that the heuristic has started the cycles too late and that the cycle will degenerate into a stop the world pause.
> 
> After this change, Shenandoah will make old regions parseable immediately following the last mixed collection (or following a global collection). At this point, Shenandoah has just finished reclaiming memory and we expect less urgency to coalesce and fill old regions. It also means that young bootstrap cycles will not take (much) longer than conventional young generation collections.

William Kemper has updated the pull request incrementally with one additional commit since the last revision:

  Update ascii diagram, fix spelling errors

-------------

Changes:
  - all: https://git.openjdk.org/shenandoah/pull/355/files
  - new: https://git.openjdk.org/shenandoah/pull/355/files/012068ac..65bec3b2

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=shenandoah&pr=355&range=01
 - incr: https://webrevs.openjdk.org/?repo=shenandoah&pr=355&range=00-01

  Stats: 38 lines in 1 file changed: 1 ins; 0 del; 37 mod
  Patch: https://git.openjdk.org/shenandoah/pull/355.diff
  Fetch: git fetch https://git.openjdk.org/shenandoah.git pull/355/head:pull/355

PR: https://git.openjdk.org/shenandoah/pull/355


More information about the shenandoah-dev mailing list