如何在不耗尽内存的情况下制作大型3D阵列?

时间:2015-03-24 17:16:35

标签: java arrays multidimensional-array out-of-memory bigdata

我有以下方法:

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的数组?

(我知道我当前的方法毫无意义并且失去了范围。我没有发布与之相关的额外代码。)

3 个答案:

答案 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)

如果数据相对稀疏,那么您可以使用不同的数据结构,如herehere所述。