gpt4 book ai didi

java - 我需要一个比最大堆空间更大的数组

转载 作者:行者123 更新时间:2023-12-02 04:23:47 25 4
gpt4 key购买 nike

我正在编写一个程序,需要一个包含 5 亿个元素的整数数组。但是,我的最大堆空间太小了。我无法将其拆分为许多较小的数组并一次使用一个数组或增加堆大小。我能做什么?

最佳答案

我刚刚使用以下测试程序在 1.7.0_79 64 位 Linux 上测试了类似的内容:

class T {
public static void main(String args[]) {
int array[] = new int[Integer.parseInt(args[0])];
for (int i=1; i<array.length; i++) {
array[i] = array[i-1] + 1;
}
System.err.println("last value: " + array[array.length-1]);
}
}

它将要保留的 int 数组的大小作为参数。根据我的粗略计算,500M 整数大约为 1.86GB(使用 4 字节整数),这还不考虑 VM 开销。所以要测试这个:

javac T.java && java -Xmx2G T 500000000

-> Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at T.main(T.java:3)

太小了;进一步增加堆大小:

javac T.java && java -Xmx3G T 500000000

-> last value: 499999999

因此,要么您没有使用 64 位虚拟机,要么您没有请求保留足够的空间。

编辑:无论如何,在我的机器上,我需要设置 -Xmx2870M 或更多以避免 OOME。使用-Xmx2860M它仍然失败。

关于java - 我需要一个比最大堆空间更大的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32447007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com