是-XX:+ UseG1GC正确替换-Xincgc?

时间:2015-11-25 14:34:54

标签: java java-8 garbage-collection g1gc

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

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

不幸的是,我没有找到有关-Xincgc触发器的垃圾收集器类型的任何信息。有 CMS (并发标记和扫描)和新的 G1 (垃圾优先)。但是我对-Xincgc有什么看法?

2 个答案:

答案 0 :(得分:9)

对于Oracle / OpenJDK 8,大多数机器上的默认收集器是并行吞吐量收集器, 除了一些32位的Windows机器,它可以是串行GC。

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

Incremental Mode is also deprecated,只需通过-XX:+UseConcMarkSweepGC启用CMS,看看是否适合您。

当然你也可以尝试G1GC,它也可以达到低暂停时间目标,并且具有不像CMS那样受到碎片影响的优点,因此不太可能遇到导致单个模式失败的并发模式故障 - 螺纹停止世界收藏。

所以,试试两个并测量。

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

答案 1 :(得分:2)

直到此选项在较新版本中被Oracle完全弃用。我们仍然可以通过应用以下jvm参数来使用它:

-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

后两个参数用于登录GC活动。