我目前存储在中的大量数据AtomicReferenceArray<X>
,并同时从大量线程进行处理。
每个元素都很小,所以我将要拥有更多的Integer.MAX_VALUE
条目。不幸的是List
,java中的数组仅限于Integer.MAX_VALUE
(或更少)值。现在,我有足够的内存来在内存中保留更大的结构-该计算机在64b VM中具有约250GB的内存。
是否AtomicReferenceArray<X>
有用longs索引的替代项?(否则,我将不得不创建自己的包装器,该包装器存储几个较小的包装AtomicReferenceArray
并将长访问映射为较小的int访问。)
听起来是时候使用本机内存了。拥有4+十亿个对象将导致一些戏剧性的GC暂停时间。但是,如果使用本机内存,则几乎不会对堆产生任何影响。您还可以使用内存映射文件来支持更快的重新启动并在JVM之间共享数据。
不确定您的特定需求是什么,但是有很多类似的开源数据结构;HugeArray,Chronicle Queue和Chronicle Map您可以创建一个1 TB但几乎不使用堆且不影响GC的阵列。
顺便说一句,对于您创建的每个对象,都有一个8字节的引用和一个16字节的标头。通过使用本机内存,您可以为每个对象节省24个字节,例如4 bn * 24是96 GB的内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句