我必须使用long
索引范围从 0 到 33554432 的数组。
它给出了一个错误:
"Exception in thread main java.lang.OutOfMemoryError: Java heap space".
而short
数组没有给出这个错误。我必须使用long
数组和相同的索引,我该怎么办?
我必须使用long
索引范围从 0 到 33554432 的数组。
它给出了一个错误:
"Exception in thread main java.lang.OutOfMemoryError: Java heap space".
而short
数组没有给出这个错误。我必须使用long
数组和相同的索引,我该怎么办?
您可以通过使用整数文字访问数组这一事实获得提示。由于整数文字只能达到Integer.MAX_VALUE
,这就是你的数组可以有多少索引(和元素)。arshajii 提出了另一个提示。
您的问题只是与您的应用程序没有足够的内存来创建那么多long
s 但有足够的内存来创建那么多 s 的事实有关short
。请记住,当一个数组被初始化时,它的元素也被初始化为一个默认值。对于原始类型,该值为0
or 0.0
。需要考虑的事项(取决于您的环境)
Long[] array = new Long[33554432]; // allocation would work
long[] array = new long[33554432]; // allocation would fail
这是因为引用类型被初始化为null
引用,因此只有引用占用空间。所以你可以开始添加元素,但它最终也会失败。
使用更多内存启动您的应用程序。
数组索引是 int。您得到 OOM,因为您的默认堆大小太小。尝试使用 -Xmx512m 命令行选项运行 java(因为您的阵列已经需要 8*33554432 = 268435456, 268 MB)
数组范围应在 的最大值范围内int
。
根据 JLS
数组必须由 int 值索引。尝试访问具有长索引值的数组组件会导致编译时错误。