是否有替代AtomicReferenceArray的大量数据?

时间:2015-02-04 07:19:22

标签: java

我当前存储了大量数据AtomicReferenceArray<X>,并且同时从大量线程进行处理。

每个元素都很小,而且我刚刚达到了Integer.MAX_VALUE个以上的条目。遗憾的是,List和java中的数组仅限于Integer.MAX_VALUE(或更少)值。现在我有足够的内存来保留更大的内存结构 - 机器在64b VM中拥有大约250GB的内存。

是否有被长号索引的AtomicReferenceArray<X>的替换? (否则我将不得不创建自己的包装器来存储几个较小的AtomicReferenceArray,并将较长的访问映射到较小的访问中。)

1 个答案:

答案 0 :(得分:3)

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

不确定您的具体需求是什么,但有许多开源数据结构可以做到这一点; HugeArrayChronicle QueueChronicle Map您可以创建一个1 TB的阵列,但几乎不使用堆,也不会产生GC影响。

BTW对于您创建的每个对象,都有一个8字节的引用和一个16字节的头。通过使用本机内存,每个对象可以节省24个字节,例如4 bn * 24是96 GB的内存。