JEP 173: Retire Some Rarely-Used GC Combinations | 废弃一些很少使用的 GC 组合
摘要
移除三种很少使用的垃圾收集器组合,以减少持续的开发、维护和测试成本。
目标
目前有三种垃圾收集器组合的使用频率不足以支持未来的支持:
- DefNew + CMS
- ParNew + SerialOld
- Incremental CMS
这些组合增加了垃圾收集器代码库的复杂性,并消耗了宝贵的测试资源,而为用户带来的价值却很少。为了简化垃圾收集器代码库并改进测试和可持续性,我们提议移除这些组合。
动机
保留所有现有的垃圾收集器组合需要付出很大的成本。没有足够的资源来测试它们。由于垃圾收集器代码库的复杂性,新功能的实现和测试需要更长的时间。作为迈向更简单、更稳定、更快的代码库的第一步,我们需要移除一些很少使用的组合。
描述
DefNew + CMS 和 ParNew + SerialOld 组合以及 CMS 的增量模式将被弃用(记录警告消息)。这意味着这些垃圾收集器组合将在未来的某个主要版本中被移除。
以下命令行标志组合将受到影响:
标志 | GC 配置 |
---|---|
-XX:-UseParNewGC -XX:+UseConcMarkSweepGC | DefNew + CMS |
-XX:+UseParNewGC | ParNew + SerialOld |
-Xincgc | ParNew + iCMS |
-XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC | ParNew + iCMS |
-XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC | DefNew + iCMS |
备选方案
继续支持未经测试的垃圾收集器组合。
测试
- 测试以验证相应的命令行标志是否产生适当的警告和错误消息。
- 确保所有剩余的垃圾收集器组合都经过持续测试。
风险和假设
关于所涉及的垃圾收集器组合,主要有三个假设:
- 目前使用 Incremental CMS 的大多数用户将从切换到“正常”CMS 中受益。
- 使用 DefNew + CMS 的用户将从使用 ParNew + CMS 中受益。
- 使用 ParNew + SerialOld 的用户将从使用 ParallelScavenge + SerialOld 中受益。
存在一个或多个这些假设不成立的风险。就我们目前所知,这种风险很小。
影响
- 兼容性:我们将弃用命令行选项。
- 用户体验:一些用户可能需要更改他们当前选择的垃圾收集器。希望这将是一个积极的改变。
- 文档:由于命令行选项的更改,需要更新相应的文档。我们还需要添加发布说明。