我有以下方法:
public static void createGiantArray(int size) {
int[][][] giantArray = new int[size][size][size];
}
当我打电话给它的大小为10,000时,如此:
createGiantArray(10000);
我收到以下错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
如何在绕过内存异常时创建10,000 x 10,000 x 10,000的数组?
(我知道我当前的方法毫无意义并且失去了范围。我没有发布与之相关的额外代码。)
答案 0 :(得分:0)
不确定您是否意识到10,000×10,000×10,000整数(每个4字节)的3维数组总计为3725Gb!您可以使用-Xmx
标记来增加堆大小,但这个数量仍然很大。
您需要更改程序的设计。
答案 1 :(得分:0)
基本上你不能在记忆中保留那个维度的结构。 每个int占用4个字节。 所以你有10.000 x 10.000 x 10.000 x 4字节= 4.000.000.000.000字节,大约是 4 TB 。 您需要在数据库(相当大的数据库)上保存数据并根据需要访问它们。 次要的可能性是在分布式存储器系统中保存数据,例如在许多服务器上的分布式哈希表。例如4000台服务器,内存为1千兆字节。
答案 2 :(得分:0)