代码之家  ›  专栏  ›  技术社区  ›  Michael Anderson

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

  •  2
  • Michael Anderson  · 技术社区  · 10 年前

    我有大量数据存储在 AtomicReferenceArray<X> ,并同时从大量线程进行处理。

    每个元素都很小,我已经到了一个地步,我将拥有更多 Integer.MAX_VALUE 条目。不幸地 List java中的数组限于 整数.MAX_VALUE (或更少)值。现在,我有足够的内存来在内存中保持更大的结构——在64b虚拟机中,机器有大约250GB的内存。

    有替代品吗 原子参考数组<X> 用longs索引的?(否则,我将不得不创建自己的包装,以存储几个较小的 AtomicReferenceArray 并将长访问映射到较小的int访问。)

    1 回复  |  直到 10 年前
        1
  •  3
  •   Peter Lawrey    10 年前

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

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

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