如何在 运行 内存不足的情况下制作大型 3D 阵列?

How do I make a large 3D array without running out of memory?

我有以下方法:

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

(我知道我当前的方法毫无意义并且失去了范围。我没有 post 附带的额外代码。)

不确定您是否意识到 10,000 x 10,000 x 10,000 整数(每个 4 字节)的 3 维数组总计 3725Gb!您可以使用 -Xmx 标志增加堆大小,但该数量仍然很大。

您需要更改程序的设计。

基本上你不能在内存中维护那个维度的结构。 每个int占用4个字节。 所以你有 10.000 x 10.000 x 10.000 x 4 字节 = 4.000.000.000.000 字节,大约是 4 TB。 您需要将数据保存在数据库(相当大的数据库)上并根据需要访问它们。 第二种可能性是将数据保存在分布式内存系统中,例如许多服务器上的分布式哈希表。例如 4000 台服务器,内存为 1 GB。

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