最近,我正在使用 jvm 选项来提高性能。
当我学习 GC 选项 ParallelGCThreads 时,我遇到了问题。

我认为 ParallelGCThreads 的最佳值是逻辑处理器的数量。但在我的 32 核机器上,默认值是 23。从 oracle 的文章 Garbage First Garbage Collector Tuning ,它告诉我们处理器数量大于 8,ParallelGCThreads 的默认值是 5/8 个处理器。

那么,为什么是 5/8 而不是 8/8?

最佳答案

This hotspot-gc-dev thread 暗示在非常大的 CPU 或多 CPU 系统上,您从附加线程中获得的 yield 递减,因此线性缩放因子减少到超过 8 个内核。

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

无论如何,这不是一刀切的规则,因此您可以更改设置、测量它并在您确认改进后保持更改。

关于java - G1 的 ParallelGCThreads,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51966319/

10-13 02:51