当前,我们通过向Java命令中添加-Xincgc来使用增量垃圾收集器。在 JDK 8 中,不赞成使用此开关。那么,它的等效替代品是什么? -XX:+UseG1GC

背景:该应用程序具有 8GB 堆,并创建了许多短期对象。我注意到它经常暂停几秒钟来进行垃圾收集。出于好奇,我添加了-Xincgc,发现停顿消失了,整体性能提高了约4倍。

不幸的是,我没有找到有关-Xincgc触发哪种类型的垃圾收集器的任何信息。有 CMS (并发标记和清除)和新的 G1 (垃圾优先)。但是-Xincgc我能得到什么呢?

最佳答案

对于Oracle/OpenJDK 8,大多数计算机上的默认收集器是并行吞吐量收集器,
除了某些32位Windows计算机(可以将其作为串行GC)外。

Xincgc是增量模式下的CMS。您看到的主要好处可能是由于从吞吐量收集器切换到CMS,而不是从增量模式切换而来的,增量模式是为单核CPU设计的。

Incremental Mode is also deprecated,因此只需通过-XX:+UseConcMarkSweepGC启用CMS并查看它是否对您有效。

当然,您也可以尝试G1GC,它也旨在达到较低的暂停时间目标,并且具有不会像CMS那样遭受碎片化的优点,因此不太可能出现并发模式故障,从而导致单线程停止世界 Collection 。

因此,请同时尝试并进行测量。

另请参阅:Oracle's Java 8 GC Tuning Guides

09-26 17:53