当前,我们通过向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