RFR: 8310062: [Shenandoah] Incomplete SATB buffers may not be processed during degenerated young collection

Kelvin Nilsen kdnilsen at openjdk.org
Thu Jun 15 15:38:56 UTC 2023


On Wed, 14 Jun 2023 20:51:04 GMT, William Kemper <wkemper at openjdk.org> wrote:

> When Shenandoah's young generation exhausts available memory, it transitions to a "degenerated" cycle. If old marking is in progress, SATB queues need to be drained before evacuation to avoid invalidating any pointers in the queues. In the case when old marking is active and the concurrent collection failed during root scan, the SATB queues might not be drained - this is an error.
> 
> The change here moves handling of the old pointers in the SATB queues to the case when degeneration occurs during the root scan. We _could_ rely on SATB processing in the degenerated mark case, but we would still need the explicit methods for handling old pointers during the concurrent cycles.
> 
> The verifier has also been modified to check that all SATB buffers are empty after marking is complete. This is _only_ valid after marking is completed on the safepoint. If concurrent marking for old is in progress, the SATB queues are not expected to be empty during other phases of a concurrent young collection.

Marked as reviewed by kdnilsen (no project role).

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

PR Review: https://git.openjdk.org/shenandoah/pull/287#pullrequestreview-1481882260


More information about the shenandoah-dev mailing list