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 线程之间的协调(工作分区)可能会变得更加低效,因为每个线程只能在堆的一小部分上工作。
无论如何,这不是一个放之四海而皆准的规则,因此您可以更改设置、测量它并在确认改进后保留更改。
最近,我正在打开 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 线程之间的协调(工作分区)可能会变得更加低效,因为每个线程只能在堆的一小部分上工作。
无论如何,这不是一个放之四海而皆准的规则,因此您可以更改设置、测量它并在确认改进后保留更改。