-
Type:
Enhancement
-
Resolution: Unresolved
-
Priority:
P4
-
None
-
Affects Version/s: None
-
Component/s: hotspot
We have observed through study of many GC logs that the best mitigation for lack of progress during degen GC is often to start another concurrent GC (which may degenerate) rather than escalating to Full GC. This is because the most common reason for lack of progress by Degen is that a large fraction of available garbage is floating. This floating garbage was allocated during the concurrent GC cycle that upgraded to Degen.
It is not necessary to perform a Full GC to reclaim this floating garbage. Simply restarting concurrent GC (and initializing TAMS for all regions) allows this garbage which had been floating to be reclaimed.
A fix for this situation in Generational mode was recently integrated. See:
commit f36c33c86df0400d2155bfadd9a6b5ea56743133
Author: William Kemper <wkemper@openjdk.org>
Date: Wed Sep 24 00:46:45 2025 +0000
8368152: Shenandoah: Incorrect behavior at end of degenerated cycle
Reviewed-by: kdnilsen, ysr
At the time, we were reluctant to change behavior of traditional Shenandoah. That solution has proved reliable and effective. Thus, we propose applying it also to traditional Shenandoah.
It is not necessary to perform a Full GC to reclaim this floating garbage. Simply restarting concurrent GC (and initializing TAMS for all regions) allows this garbage which had been floating to be reclaimed.
A fix for this situation in Generational mode was recently integrated. See:
commit f36c33c86df0400d2155bfadd9a6b5ea56743133
Author: William Kemper <wkemper@openjdk.org>
Date: Wed Sep 24 00:46:45 2025 +0000
8368152: Shenandoah: Incorrect behavior at end of degenerated cycle
Reviewed-by: kdnilsen, ysr
At the time, we were reluctant to change behavior of traditional Shenandoah. That solution has proved reliable and effective. Thus, we propose applying it also to traditional Shenandoah.
- links to
-
Review(master)
openjdk/jdk/29574