如何在Java中创建一个非常大的2D矩阵?

时间:2014-11-06 08:19:30

标签: java

我尝试过以下方式:

int [] [] Matrix = new int [Integer.MAX_VALUE-5] [Integer.MAX_VALUE-5];

但是我得到了这个例外:线程" main" java.lang.OutOfMemoryError:Java堆空间。

我的意思是我想存储一个nxn大小的矩阵,其中n大约为500000,但我的Netbeans只显示10000个内存异常,我将如何增加内存

3 个答案:

答案 0 :(得分:4)

阵列无法适应内存。

Integer.MAX_VALUE是2 ^ 31。

两个维度意味着以4个字节存储2 ^ 62个整数。

答案 1 :(得分:2)

你应该看一下sparse matrix,它允许你处理只包含相对较少值的巨大矩阵。

稀疏矩阵格式的示例:

  • CSR(压缩稀疏行) - 将非零元素存储在连续数组中,另外两个数组包含列索引和指向行开头的指针
  • COO(坐标列表) - 存储元组数组(行,列,值)

答案 2 :(得分:1)

对于10000 x 10000,将堆大小设置为512MB:java -Xmx512m。 对于500000 x 500000,将堆大小设置为大约1TB:java -Xmx1000000m。您可能需要等待几年才能让具有该内存量的计算机可供公众使用...