Shenandoah: make escalation from degen to full more conservative

XMLWordPrintable

    • Type: Enhancement
    • Resolution: Unresolved
    • Priority: P4
    • None
    • Affects Version/s: None
    • Component/s: hotspot
    • gc

      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.

            Assignee:
            Kelvin Nilsen
            Reporter:
            Kelvin Nilsen
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: