Skip to content

JEP 379: Shenandoah: A Low-Pause-Time Garbage Collector (Production) | Shenandoah:低暂停时间的垃圾收集器

摘要

将 Shenandoah 垃圾收集器从实验性功能更改为产品功能。

非目标

  • 本 JEP 不提议更改默认的 GC,它仍然是 G1。

  • 本 JEP 不提议更改 Shenandoah 的开发流程,该流程将继续支持最新的 JDK 和流行的 LTS/STS JDKs。

动机

通过 JEP 189,Shenandoah 被集成到 JDK 12 中。它被标记为实验性,以匹配其他新 GC(特别是 Epsilon GC 和 ZGC)的状态。现在,Shenandoah 已经准备好在主线 JDK 中放弃其实验性状态,正如最近在 JEP 377 中为 ZGC 所建议的那样。

描述

在 JDK 12 及更高版本中,Shenandoah 是通过 -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC 选项启用的。将 Shenandoah 变为产品功能意味着不再需要 -XX:+UnlockExperimentalVMOptions。一批相关的 Shenandoah 选项将从“实验性”变为“产品”,但须经过审核。这些选项的默认值不会更改。这使得此更改在标志类中成为一种相当表面化的更改。

在集成到 JDK 12 时,Shenandoah 已经在 Red Hat 8u 和 11u 下游版本中作为受支持的垃圾收集器发布,并被 RHEL 和 RHEL 下游用户使用。因此,Shenandoah 8uShenandoah 11u 已经不再是实验性的,因此不受此更改的影响。由于只有少数用户使用除 8u 和 11u 之外的其他版本,我们预计此更改的实际影响将微乎其微。

测试

预计测试变更将很少或没有。这主要是因为 Shenandoah 代码在 8u、11u、14u 和开发版之间进行了同步,并且测试已经接受 Shenandoah 可以是“实验性”或“产品”的事实。