Java 21 预计于 2023 年 9 月 19 日正式发布,这是继 Java 17 之后的下一个 LTS 版本。截至 6 月 8 日,JDK 21 已进入 Rampdown 第一阶段;随着整个功能集被冻结,分代式 Shenandoah (Generational Shenandoah) 功能将被删除(从 16 个功能削减到 15 个),这是一种增强 Shenandoah 垃圾收集器 (GC) 的实验性功能。
根据介绍,分代式 Shenandoah 功能被移除的核心原因是缺乏准备。分代式 Shenandoah 的 JEP 作者 Roman Kennke 提议将其从 Java 21 中删除,以更好的评估准备情况。“Shenandoah 团队决定跳过 JDK 21 并花时间尽我们所能提供最好的 Generational Shenandoah。”
“我们要感谢所有花时间审查我们的拉取请求并提供反馈的人。鉴于在审查过程中发现的风险,以及没有足够的时间来执行如此大量的代码贡献所需的彻底审查,我们决定目前关闭此 PR。我们将寻求以 JDK 22 为目标。”
分代式 Shenandoah 将通过实验性的分代收集功能来增强 Shenandoah,以提高可持续吞吐量、负载峰值弹性和内存利用率。该计划旨在不会破坏 non-generational Shenandoah 的情况下,提供实验性的分代模式,以在未来版本中使其成为默认模式。其他目标包括在不牺牲低 GC pauses 的情况下减少持续内存占用、减少 CPU 和功耗、保持高吞吐量,以及降低在分配峰值期间导致退化和完整集合的风险。而 Non-generational Shenandoah 不会被取代。
移除建议的审查期截至 6 月 14 日,如果没有太大异议的话,该 JEP 将正式从 JDK 21 中删除。此决策只与支持 Shenandoah GC 的 OpenJDK 版本用户有关;不会影响 G1 GC、Z Garbage Collector(ZGC)或其他现代垃圾收集器。也不影响使用 G1 GC 和 ZGC 的 Java 发行版,如 Oracle OpenJDK 和 Oracle JDK。
JDK 21 的初始候选版本将于 8 月发布,第二个候选版本将于 8 月下旬发布。