Java 如何处理多处理器机器上的 GC 和堆分配?
在我所做的阅读中,单处理器系统和多处理器系统之间使用的算法似乎没有任何区别。GC 调优的艺术和科学是 Java 似乎相当成熟,但我在任何常见的 JVM 实现中都找不到与此相关的任何内容。
作为一个数据点,在 .Net 中,算法发生了显着变化:每个处理器都有一个关联的堆,每个处理器负责该堆。这在许多地方都有记录,例如MSDN:
可扩展集合 在运行服务器版本的执行引擎 (MSCorSvr.dll) 的多处理器系统上,托管堆被分成几个部分,每个 CPU 一个部分。发起收集时,收集器每个 CPU 有一个线程;所有线程同时收集自己的部分。执行引擎 (MSCorWks.dll) 的工作站版本不支持此功能。
我对专门针对多处理器系统的 Java GC 调优提供的任何见解也很感兴趣。