gpt4 book ai didi

java - JVM内存分配器的多线程性能

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:43 24 4
gpt4 key购买 nike

我有一个执行大量内存分配的多线程程序。在四核 i7 CPU 上的性能很好,加速约为 3.9 倍。但是,当程序在 12 核 Xeon CPU 上执行时,加速值不会超过 5.5X。

我应该提一下,GC 似乎不是问题,因为 VisualGC 在执行超过 100 秒后报告 GC 低于 1 秒。主要内存使用属于堆的 Eden 部分,其他部分几乎不会被使用。该代码执行大量 int 数组分配并对它们执行一些算术运算。这有点像无法避免新实例的状态空间探索和分配。

如您所知,Windows 和 Linux 的标准内存分配器对多线程程序的性能都不能令人满意,而 tcmalloc 和 Hoard 等不错的替代方案可用于 C/C++。由于并行部分由完全独立的任务组成,GC时间很低,我怀疑主要原因应该是JVM的内存分配器在太多线程竞争分配时性能不佳。

有没有人有在大型多线程程序中使用 JVM 分配器的经验,并且可以就如何克服这个问题提供建议?

附言我已经使用 JVM 6、7 和 8 测试了代码。分配率也非常高(每秒约 1000 万次),但正如我提到的,伊甸园部分被大量使用,工作集小于 1 GB。

最佳答案

Eden 空间是否小于您的情况?如果是这样,请考虑使用-XX:NewRatio=1 或其他合适的值。

要确定这一点,请使用-XX:+PrintTenuringDistribution查看分布..

关于java - JVM内存分配器的多线程性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22584669/

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