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

Kha*_*ain 3 java

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

它给出了一个错误:

"Exception in thread main java.lang.OutOfMemoryError: Java heap space".
Run Code Online (Sandbox Code Playgroud)

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

Sot*_*lis 6

您可以通过使用整数文字访问数组来获得提示.由于整数文字只能达到Integer.MAX_VALUE,所以你的数组可以有多少个索引(和元素).arshajii提出了另一个暗示.

你的问题只是因为你的应用程序没有足够的内存来创建那么多longs但足以创建那么多shorts.请记住,初始化数组时,其元素也会初始化为默认值.对于原始类型,该值为00.0.要考虑的事情(取决于您的环境)

Long[] array = new Long[33554432]; // allocation would work
long[] array = new long[33554432]; // allocation would fail
Run Code Online (Sandbox Code Playgroud)

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

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


kof*_*ann 5

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