第 4 章 Shenandoah 垃圾收集器的基本配置选项

Shenandoah 垃圾收集器(GC)具有以下基本配置选项:

-Xlog:gc
打印单个 GC 时间。
-Xlog:gc+ergo
打印 Heuristics 决策,如果出现任何情况,则可能会发现问题。
-Xlog:gc+stats

在运行结束时打印 Shenandoah 内部计时的摘要表。

最好在启用了日志记录后运行此操作。此概述表传达有关 GC 性能的重要信息。Heuristics 日志对找出 GC outliers 非常有用。

-XX:+AlwaysPreTouch
将堆页面提交成内存,并有助于降低延迟 hiccups。
-Xms-Xmx
使用 -Xms = -Xmx 使堆不可调整大小,从而减少了堆管理困难。与 AlwaysPreTouch 一起,-Xms = -Xmx 会在启动时提交所有内存,这样可避免最终使用内存时比较困难。-Xms 还定义了内存 uncommit 的低边界,因此 -Xms = -Xmx 所有内存都保持提交。如果要为较小的空间配置 Shenandoah,则建议设置 lower -Xms。您需要决定设置它以平衡提交/未提交开销与内存占用量的低程度。在很多情况下,您可以设置 -Xms 任意低。
-XX:+UseLargePages
启用 hugetlbfs Linux 支持。
-XX:+UseTransparentHugePages
透明地启用巨页。使用透明大内存页时,建议将 /sys/kernel/mm/transparent_hugepage/enabled/sys/kernel/mm/transparent_hugepage/defrag 设置为 madvise。使用 AlwaysPreTouch 运行时,它还将在启动时支付有问题的工具成本。
-XX:+UseNUMA
虽然 Shenandoah 尚不明确支持 NUMA,但最好启用对多套接字主机的 NUMA 交集。与 AlwaysPreTouch 相结合,它提供了优于默认的开箱即用配置的性能。
-XX:-UseBiasedLocking
非连续(双插槽)锁定吞吐量之间有一个利弊,而安全点 JVM 则用于启用和禁用它们。对于面向延迟的工作负载,请关闭计费锁定。
-XX:+DisableExplicitGC
从用户代码调用 system.gc ()会强制 Shenandoah 执行额外的 GC 周期。它通常不会损害,因为 -XX:+ExplicitGCInvokesConcurrent 会被默认启用,这意味着会调用并发 GC 周期,而不是 STW Full GC。

更新于 2024-05-10