2017-07-15 22 views
-1

我想知道如何在Java中以最大可能的长度实例化一个long []数组。如果它太大,我得到一个内存错误。我需要这个数组尽可能大,而不会超出平台相关的限制。如何才能做到这一点?我的电脑上的限制似乎大约为8500万个索引,但在其他计算机上可能更少或更多。实例化最大大小的java数组

+0

long has:class java.lang.Long:min = -9,223,372,036,854,775,808,max = 9,223,372,036,854,775,807 –

+2

这怎么可能有用? –

+0

你需要这个...吗? –

回答

1

在Java中,垃圾收集将以不可预知的间隔运行。因此,根据运行时间,自由堆内存大小将会增加或减少。因此,它极不可能的,你可以得到的内存,您可以使用用于制造多头排列的确切字节,但是你可以用Runtime类试图获得用于JVM内存的详细信息:
Runtime.getRuntime().totalMemory()
Runtime.getRuntime().freeMemory()
Runtime.getRuntime().maxMemory()

+0

我正确的说,Runtime.getRuntime()。freeMemory()/ 8;应该给我数组的近似最大长度?如果是这样,它似乎给我一个约3000万的长度,远远低于我预期的8500万。 –

+0

是的,但它不是最大值,因为堆以-Xms开关指定的大小开始,并且可以增大到-Xmx指定的大小。 freeMemory()仅为当前堆大小提供可用内存。 – beannayak

0

Indepent的问题,如何搞清楚,什么最大可用空间可能是: 如果你真的需要一个数组,你也可以考虑使用java.nio.LongBuffer中的只有多头。既然你在机器上工作的很近,使用这个和使用C数组在C中工作非常相似,但是使用安全的语言。