跳到主要内容

JEP 214:移除在 JDK 8 中已弃用的 GC 组合

QWen Max 中英对照

概述

移除之前在 JDK 8 中通过 JEP 173 弃用的 GC 组合。

非目标

此项工作并不旨在实现对已移除垃圾回收(GC)组合的替换。大多数情况下,剩下的回收器应该表现得与被移除的 GC 组合一样好或者更好。此项工作并不旨在增强任何一个垃圾回收器以使其表现得像被移除的垃圾回收器一样好。作为满足性能目标的一部分,只会考虑对垃圾回收器进行调优。

成功指标

  • 对于相关的 JVM 选项,不会打印弃用消息。相反,JVM 会将它们视为未知标志。

  • 对于一组合理的基准测试,从 ParNew + SerialOld 切换到 ParallelScavenge + SerialOld 的性能影响已得到充分理解。

动机

正如JEP 173 中所描述的,保留所有现有的垃圾收集器(GC)组合会带来很大的维护成本。移除已弃用的 GC 组合将允许在 HotSpot GC 代码中进行许多简化操作,这反过来会减少 bug 的数量,并允许对剩余的 GC 组合进行更快速的开发。

描述

用于控制 JEP 173 中列为已弃用的 GC 组合的标志,以及用于启用 CMS 前台收集器的标志(作为 JDK-8027876 的一部分被弃用)将从代码库中移除。这意味着将不再为这些标志打印警告消息;如果使用这些标志,JVM 将无法启动。

一旦这些标志被移除,那么现在任何已经无用的代码将会从 GC 代码库中被删除。由于这项工作,代码库中可能会出现一些简化操作,但改动范围较大。这样的简化操作可能会被划分为单独的更改。

以下是将停止工作的标志及标志组合的详细摘要:

DefNew + CMS       : -XX:-UseParNewGC -XX:+UseConcMarkSweepGC
ParNew + SerialOld : -XX:+UseParNewGC
ParNew + iCMS : -Xincgc
ParNew + iCMS : -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC
DefNew + iCMS : -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC
CMS foreground : -XX:+UseCMSCompactAtFullCollection
CMS foreground : -XX:+CMSFullGCsBeforeCompaction
CMS foreground : -XX:+UseCMSCollectionPassing

对于 ParNew + SerialOld 组合,此项 JEP 的工作还将包括性能测试,比较 ParNew + SerialOld 与 ParallelScavenge + SerialOld。这应该会为从 ParNew + SerialOld 迁移到 ParallelScavenge + SerialOld 提供调优建议。

替代方案

保留代码中全部或部分已弃用的选项。这样做可以避免在 GC 代码中进行大量的清理工作,并减缓代码库中新开发的进度。

测试

当前有一些测试用于验证所列出的选项是否会打印警告消息。这些测试需要更新为预期的消息,即这些选项是未知的。

风险与假设

正在使用将被移除的任何标志的用户,必须更新他们的 JVM 启动命令行。如果他们是从 JDK 8 升级到 JDK 9,那么他们应该已经看到了警告消息,因此不会感到意外。假设是大多数用户将会从更改这些将被移除的标志为更现代的 GC 调优中受益。

依赖

这项工作依赖于 JEP 173: 弃用一些很少使用的 GC 组合。该 JEP 已在 JDK 8 中实现,因此目前没有未解决的依赖项。