IBM JVM WebSphere Application Server -XX:+UseG1GC 有什么作用? -Xgcpolicy:gencon 是否取代?

IBM JVM WebSphere Application Server what is the effect of -XX:+UseG1GC? Does -Xgcpolicy:gencon supersede?

根据 IBM link (https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/openj9/xgcpolicy/index.html),可以通过 -Xgcpolicy 设置指定 gc 策略。默认 gcpolicy 是 gencon (-Xgcpolicy:gencon)。 WAS 是 9.0,JVM 是 IBM J9(Java 1.8 版)。 接下来,从下面的 IBM link 看来,gc 算法的设置也可以使用标志 -XX,就像在其他 JVM 中一样。例如:-XX:+UseG1GC 可以工作。 https://www.ibm.com/support/knowledgecenter/en/SS3KLZ/com.ibm.java.diagnostics.visualizer.doc/verbosegc.html

我的意图是像 UseG1GC 一样应用 gc 行为。堆大小为 -Xms16G 到 -Xmx20G。所以,我希望优先使用 Garbase 和 UseG1GC 并发。 -Xgcpolicy:gencon 也有点类似,但它会导致“停止世界”。当 gc 为 运行 时,应用程序将被暂停。 有点困惑,即使我设置了 -XX:+UseG1GC,它会遵循 UseG1GC 行为并对其有效,还是会遵循 -Xgcpolicy:gencon 的机制?或者gcpolicy和gc算法是两个不同的东西?

在 IBM JVM 上使用 -XX:+UseG1GC 没有任何效果。它只会被默默地吞噬。 JVM 将默认使用 Gencon GC 策略。

您可以通过 运行ning -verbose:gc 验证,将报告正在使用的 GC 策略。

最接近 Hotspot 的 G1GC 的 IBM GC 策略是平衡的,主要区别特征是它们是基于区域的(与 Gencon 不同,Gencon 有两个不同的堆区域用于新旧对象)。

就并发性而言,所有 3 个(G1GC、Balanced、Gencon)都很相似:全局 GC 大部分是并发的,partial/local GC 是 STW(Stop-The-World)。

使用基于区域的 GC 策略的原因是为了减少最坏情况下的暂停时间。它们能够在部分 GC 中增量地执行一些全局类型操作。最值得注意的是,与 Gencon 不同,它们可以通过可选的 STW 紧凑操作在全局 GC 中对堆进行增量碎片整理。大多数应用程序不需要这样的全局紧凑,因此 Gencon 是默认的。但是,如果在 Gencon 运行 中观察到由于全局压缩导致的长时间停顿,则应尝试平衡。然而,平衡 GC 会稍微影响应用程序吞吐量。