gpt4 book ai didi

多处理器机器上的 Java 堆和 GC?

转载 作者:行者123 更新时间:2023-12-01 14:34:54 25 4
gpt4 key购买 nike

Java 如何处理多处理器机器上的 GC 和堆分配?

根据我的阅读,单处理器系统和多处理器系统之间使用的算法似乎没有任何区别。 Java GC 调优的艺术和科学似乎相当成熟,但我在任何常见的 JVM 实现中找不到与此相关的任何内容。

作为一个数据点,在 .Net 中,算法发生了显着变化:每个处理器都有一个关联的堆,每个处理器都负责该堆。这在许多地方都有记录,例如 MSDN :

Scalable Collections On a multiprocessor system running the server version of the execution engine (MSCorSvr.dll), the managed heap is split into several sections, one per CPU. When a collection is initiated, the collector has one thread per CPU; all threads collect their own sections simultaneously. The workstation version of the execution engine (MSCorWks.dll) doesn't support this feature.

我也对专门针对多处理器系统的 Java GC 调优提供任何见解。

最佳答案

事实上,在 Hotspot JVM 中,堆的使用方式并不取决于堆大小或核心数量。

每个线程(不是处理器)都有一个线程本地分配缓冲区(TLAB),因此对象分配既便宜又线程安全。此内存空间与您提到的堆处理器亲和性有点相同。

您还可以激活非统一内存访问 (NUMA)。 NUMA 背后的想法是更喜欢靠近 CPU 芯片的 RAM 来存储对象,而不是将整个堆视为统一的空间。

最后,GC 是多线程的,并且可以根据您的内核数量进行扩展,因此它们可以充分利用您的硬件。

关于多处理器机器上的 Java 堆和 GC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16570788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com