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

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

Summary

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

Non-Goals

Motivation

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.

Description

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

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".