G1的ParallelGCThreads

4

最近,我在调整JVM选项以提高性能。但是当我了解到GC选项ParallelGCThreads时,遇到了问题。

我认为ParallelGCThreads的最佳值应该是逻辑处理器的数量。但在我的32核机器上,默认值是23。根据Oracle的文章Garbage First Garbage Collector Tuning,它指出当处理器数量超过8个时,ParallelGCThreads的默认值为处理器的5/8。

那么,为什么不是8/8呢?


你想让所有的逻辑核心都运行GC吗?你为什么要这样做呢?你是想让你的CPU在工作还是收集垃圾? - Kayaman
1
是的,更多的 CPU 执行垃圾回收会导致停顿时间更短。 - Expressway Retrograding
CPU 有更少的时间来执行实际工作。将所有核心用于垃圾回收是一个愚蠢的默认设置。 - Kayaman
但是如果核心数量小于或等于8,则gc线程的默认计数为核心数量。 - Expressway Retrograding
1
@Kayaman他在谈论的是ParallelGCThreads,而不是ConcGCThreads - the8472
1个回答

8
hotspot-gc-dev 线程 暗示在非常大的 CPU 或多 CPU 系统上,您会因为添加额外的线程而获得递减的收益,因此线性扩展因子超过 8 个核心后会降低。这很可能是因为垃圾回收本质上是内存受限的,足够的线程最终将饱和内存总线并无法为其他核心提供数据。此外,GC 线程之间的协调(工作分配)可能会变得更加低效,因为每个线程只能处理堆的一小部分。总之,这不是一个适用于所有情况的规则,因此您可以更改设置,进行测量,并在确认有所改善时保留更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接