目前,我们通过在 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,看看它是否适合你。 更新:CMS 也已被弃用,然后在以后的 OpenJDK 版本中被删除
当然你也可以试试 G1GC,它也是为了达到低暂停时间目标而设计的,它的优点是它不会像 CMS 那样受到碎片的影响,因此不太可能遇到并发模式故障而导致单个-线程停止世界收集。 更新:较新的 OpenJDK 版本提供了除 G1GC 之外的额外的低暂停时间收集器) 因此,尝试两者并进行测量。
关于java - 是-XX :+UseG1GC the correct replacement for -Xincgc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33919213/