G1 的 ParallelGCThreads

G1's ParallelGCThreads

最近,我正在打开 jvm 选项来提高性能。 当我了解到GC选项ParallelGCThreads时,我遇到了一个问题。

我认为 ParallelGCThreads 的最佳值是我的 32 核机器上逻辑 processors.But 的数量,默认值为 23。从 oracle 的文章 Garbage First Garbage Collector Tuning 中可以看出,处理器数量更多比 8,ParallelGCThreads 的默认值是处理器的 5/8。
那么,为什么是 5/8 而不是 8/8?

This hotspot-gc-dev thread 暗示在非常大的 CPU 或多 CPU 系统上,您会从额外的线程中减少 returns,因此线性比例因子减少到超过8 核。

这可能是因为 GCing 本质上是内存限制的,足够的线程最终会使内存总线饱和,无法为额外的内核提供数据。此外,GC 线程之间的协调(工作分区)可能会变得更加低效,因为每个线程只能在堆的一小部分上工作。

无论如何,这不是一个放之四海而皆准的规则,因此您可以更改设置、测量它并在确认改进后保留更改。