目前,我们通过将 -Xincgc
添加到 java 命令来使用增量垃圾收集器。在 JDK 8 中,此开关已弃用。那么它的等效替代品是什么? -XX:+UseG1GC
?
背景:该应用程序有一个 8GB 的堆,并创建了很多短暂的生命对象。我注意到它经常暂停几秒钟来进行垃圾收集。出于好奇,我添加了 -Xincgc
,发现停顿消失了,整体性能提高了约 4 倍。
不幸的是,我没有找到任何关于 -Xincgc
触发的垃圾收集器类型的信息。有 CMS (并发标记和清除)和新的 G1 (垃圾优先)。但是我得到了什么 -Xincgc
?
原文由 BetaRide 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于 Oracle/OpenJDK 8,大多数机器上的默认收集器是并行吞吐量收集器,除了一些 32 位 Windows 机器,它可以是串行 GC。
Xincgc是增量模式的CMS。您看到的主要好处可能是从吞吐量收集器切换到 CMS,而不是从专为单核 CPU 设计的增量模式。
增量模式也已弃用,因此只需通过
-XX:+UseConcMarkSweepGC
启用 CMS,看看它是否适合你。 更新:CMS 也已弃用,然后在以后的 OpenJDK 版本中删除当然你也可以试试 G1GC,它也是为了达到低暂停时间目标而设计的,它的优点是它不会像 CMS 那样遭受碎片,因此不太可能遇到导致单线程停止的并发模式故障世界收藏。 更新:除了 G1GC 之外,较新的 OpenJDK 版本还提供额外的低暂停时间收集器)因此,请同时尝试并进行测量。
另请参阅: Oracle 的 Java 8 GC 调优指南