java - G1 的 ParallelGCThreads

标签 java garbage-collection g1gc

最近,我正在使用 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 个内核。

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

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

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

相关文章:

java - 为什么 G1 是 Java 9 的默认垃圾收集器?

java - 如果我们在年轻代上标记了所有死亡对象后就知道了它们,为什么我们需要在老一代中专门搜索无法访问的对象呢?

java - 使用没有迭代器的 Java 复制集合 Mongodb 以进行数据库管理员登录

c# - 垃圾收集 - 一个有效但另一个无效,怎么会这样?

java - 是否可以使用 Java 8 进行 Android 开发?

java终结器和gc

java - 元空间和垃圾收集

Java - CMS 与 G1 垃圾收集器

java - 用于忽略 JUnit 测试的 FindBugs 过滤器文件

java - JVM/Java 强制应用程序在首次启动时运行速度变慢,Windows 8?