Integrated: 8344049: Shenandoah: Eliminate init-update-refs safepoint

William Kemper wkemper at openjdk.org
Wed Jan 15 17:52:47 UTC 2025


On Wed, 11 Dec 2024 19:08:08 GMT, William Kemper <wkemper at openjdk.org> wrote:

> Shenandoah typically takes 4 safepoints per GC cycle. Although Shenandoah itself does not spend much time on these safepoints, it may still take quite some time for all of the mutator threads to reach the safepoint. The occasionally long time-to-safepoint increases latency in the higher percentiles.
> 
> The `init-update-refs` safepoint is responsible for retiring GCLABs (and PLABs) used during evacuation. Once evacuation is complete, no threads will access these LABs. This need not be done on a safepoint. `init-update-refs` is also where the global and thread local copies of the `gc_state` are updated. However, here we are turning off the `WEAK_ROOTS` flag _after_ all of the unmarked weak referents have been `nulled` out, so this does not need to happen atomically with respect to the mutators. Neither is it necessary to change the other state flags (EVACUATION, UPDATE_REFS) atomically across all mutators.
> 
> Note that the `init-update-refs` safepoint is still taken if either verification or `ShenandoahPacing` are enabled.

This pull request has now been integrated.

Changeset: 764d70b7
Author:    William Kemper <wkemper at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/764d70b7df18e288582e616c62b0d7078f1ff3aa
Stats:     263 lines in 11 files changed: 147 ins; 70 del; 46 mod

8344049: Shenandoah: Eliminate init-update-refs safepoint
8344050: Shenandoah: Retire GC LABs concurrently
8344055: Shenandoah: Make all threads use local gc state

Reviewed-by: ysr, kdnilsen

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

PR: https://git.openjdk.org/jdk/pull/22688


More information about the hotspot-gc-dev mailing list