第 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