gpt4 book ai didi

java - 对于大量数据,是否有替代 AtomicReferenceArray 的方法?

转载 作者:行者123 更新时间:2023-11-30 08:16:28 26 4
gpt4 key购买 nike

我目前有大量数据存储在 AtomicReferenceArray<X> 中,并同时处理大量线程。

每个元素都非常小,我已经到了要拥有超过 Integer.MAX_VALUE 的地步条目。遗憾List和 java 中的数组限于 Integer.MAX_VALUE (或更少)值(value)。现在我有足够的内存来在内存中保留更大的结构——机器在 64b VM 中有大约 250GB 的内存。

AtomicReferenceArray<X> 有替代品吗?那是由多头索引的? (否则我将不得不创建自己的包装器来存储几个较小的 AtomicReferenceArray 并将长访问映射到较小的 int 访问。)

最佳答案

听起来是时候使用 native 内存了。拥有超过 40 亿个对象将导致一些戏剧性的 GC 暂停时间。但是,如果您使用 native 内存,您可以在几乎不影响堆的情况下执行此操作。您还可以使用内存映射文件来支持更快的重启和在 JVM 之间共享数据。

不确定您的具体需求是什么,但有许多开源数据结构可以做到这一点; HugeArray , Chronicle QueueChronicle Map您可以创建一个 1 TB 的数组,但几乎不使用堆并且没有 GC 影响。

顺便说一句,对于您创建的每个对象,都有一个 8 字节的引用和一个 16 字节的 header 。通过使用 native 内存,您可以为每个对象节省 24 个字节,例如40 亿 * 24 是 96 GB 的内存。

关于java - 对于大量数据,是否有替代 AtomicReferenceArray 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28315630/

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