java - 是-XX :+UseG1GC the correct replacement for -Xincgc?

标签 java java-8 garbage-collection g1gc

目前,我们通过在 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 之外的额外的低暂停时间收集器) 因此,尝试两者并进行测量。

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

关于java - 是-XX :+UseG1GC the correct replacement for -Xincgc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33919213/

相关文章:

java - Java 堆中空间/世代之间的比率是否恒定?

java - 服务的任何公共(public)方法的 AOP 切入点表达式

java - 在格式化 JAXB 输出方面需要帮助

java - 如何使用前面没有字符的分隔符拆分字符串?

linq - 我应该相信 LinqDataSource 能够正确清理吗?

Java匿名对象和垃圾收集第-1部分

java - JAXB java.util.Map 绑定(bind)

java - IntStream 逐步迭代

java - NetBeans Web 应用程序

java - 如何在java 8中创建嵌套对象列表?