JEP 379: Shenandoah: A Low-Pause-Time Garbage Collector (Production)

OwnerAleksey Shipilev
StatusClosed / Delivered
Componenthotspot / gc
Discussionhotspot dash gc dash dev at openjdk dot java dot net
Reviewed byAndrew Hughes, Roman Kennke
Endorsed byMark Reinhold
Created2020/03/23 16:53
Updated2021/11/10 08:51


Change the Shenandoah garbage collector from an experimental feature into a product feature.



Shenandoah was integrated into JDK 12 by JEP 189. It was marked as experimental in order to match the status of other new GCs, notably Epsilon GC and ZGC. Now Shenandoah is ready to drop its experimental status in mainline JDKs, as was recently suggested for ZGC in JEP 377.


In JDK 12 and later, Shenandoah is enabled via the -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC options. Making Shenandoah a product feature means that -XX:+UnlockExperimentalVMOptions would no longer be needed. A bunch of related Shenandoah options would turn from "experimental" to "product", subject to review. The default values for the options would not change. It makes this change a rather cosmetic change in flag classes.

At the time of its integration into JDK 12, Shenandoah had been already shipping in Red Hat 8u and 11u downstream releases as a supported garbage collector, and used by RHEL and RHEL downstream users. Because of this, Shenandoah 8u and Shenandoah 11u are already non-experimental and thus not affected by this change. Since there are only a few users that run something other than 8u and 11u, we expect the actual impact of this change to be minuscule.


Testing changes are expected to be little to none. This is largely because the Shenandoah code is synced across 8u, 11u, 14u, and dev, and tests already accept that Shenandoah can be either "experimental" or "product".