13

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

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

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

4

2 回答 2

14

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

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

增量模式也已弃用,因此只需通过启用 CMS-XX:+UseConcMarkSweepGC并查看它是否适合您。更新:CMS 也已被弃用,然后在以后的 OpenJDK 版本中被删除

当然你也可以试试 G1GC,它也是为达到低暂停时间目标而设计的,它的优点是它不会像 CMS 那样受到碎片的影响,因此不太可能遇到导致单线程停止的并发模式故障世界收藏。更新:较新的 OpenJDK 版本提供了除 G1GC 之外的其他低暂停时间收集器)因此,尝试两者并测量。

另请参阅:Oracle 的 Java 8 GC 调优指南

于 2015-11-25T14:44:42.430 回答
3

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

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

后面的 2 个参数用于记录 GC 活动。

于 2016-11-22T17:57:41.823 回答