目前,我们通过向java命令添加-Xincgc
来使用增量垃圾收集器。在 JDK 8 中,不推荐使用此开关。那么什么是它的等效替代品呢? -XX:+UseG1GC
?
背景:应用程序有一堆 8GB ,并创建了许多短生命对象。我注意到它经常暂停几秒钟来进行垃圾收集。出于好奇,我添加了-Xincgc
并发现暂停已经消失,整体性能提高了~4倍。
不幸的是,我没有找到有关-Xincgc
触发器的垃圾收集器类型的任何信息。有 CMS (并发标记和扫描)和新的 G1 (垃圾优先)。但是我对-Xincgc
有什么看法?
答案 0 :(得分:9)
对于Oracle / OpenJDK 8,大多数机器上的默认收集器是并行吞吐量收集器, 除了一些32位的Windows机器,它可以是串行GC。
Xincgc是增量模式下的CMS。您可能看到的主要好处可能是从吞吐量收集器切换到CMS,而不是从专用于单核CPU的增量模式。
Incremental Mode is also deprecated,只需通过-XX:+UseConcMarkSweepGC
启用CMS,看看是否适合您。
当然你也可以尝试G1GC,它也可以达到低暂停时间目标,并且具有不像CMS那样受到碎片影响的优点,因此不太可能遇到导致单个模式失败的并发模式故障 - 螺纹停止世界收藏。
所以,试试两个并测量。
答案 1 :(得分:2)
直到此选项在较新版本中被Oracle完全弃用。我们仍然可以通过应用以下jvm参数来使用它:
-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
后两个参数用于登录GC活动。