Java中的长数组支持多少个索引?

时间:2013-10-04 19:54:40

标签: java

我必须使用索引范围为0到33554432的long数组。

它给出了错误:

"Exception in thread main java.lang.OutOfMemoryError: Java heap space".

short数组不会出现此错误。我必须使用long数组和相同的索引,我该怎么办?

3 个答案:

答案 0 :(得分:6)

您可以通过使用整数文字访问数组来获得提示。由于整数文字只能达到Integer.MAX_VALUE,这就是你的数组可以拥有多少个索引(和元素)。 arshajii brings up another hint

您的问题只与您的应用程序没有足够的内存来创建那么多long但足以创建那么多short的事实有关。请记住,初始化数组时,其元素也会初始化为默认值。对于原始类型,该值为00.0。需要考虑的事项(取决于您的环境)

Long[] array = new Long[33554432]; // allocation would work
long[] array = new long[33554432]; // allocation would fail

这是因为引用类型被初始化为null引用,因此只有引用占用空间。所以你可以开始添加元素,但最终也会失败。

使用更多内存启动应用程序。

答案 1 :(得分:5)

数组索引是int。你得到OOM,因为你的默认堆大小太小了。尝试使用-Xmx512m命令行选项运行java(因为您的数组已经需要8 * 33554432 = 268435456,268 MB)

答案 2 :(得分:2)

数组范围应在int的最大值范围内。

根据JLS

  

数组必须用int值索引。   尝试访问具有长索引值的数组组件   导致编译时错误。