【问题标题】:How to create a very large 2D Matrix in Java?如何在 Java 中创建一个非常大的二维矩阵?
【发布时间】:2014-11-06 08:19:29
【问题描述】:

我尝试了以下方法:

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

但我得到了这个异常:线程“main”中的异常 java.lang.OutOfMemoryError: Java heap space。

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

【问题讨论】:

  • 你没有足够的内存来存储该数组...
  • 你有使用Java处理这么大的数据块的需求吗?还是必须是“A” HL 语言?
  • 是有问题要解决还是只是在摆弄java?
  • 这将需要大约 16 PB = 大约 16,400 艾字节 = 16,700,000 太字节 = 17,200,000,000 千兆字节。这个数字甚至不能以(有符号的)64 位整数显示!
  • 更不用说填充该数组需要多长时间...

标签: java


【解决方案1】:

数组无法放入内存。

Integer.MAX_VALUE 是 2^31。

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

【讨论】:

    【解决方案2】:

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

    稀疏矩阵格式示例:

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

    【讨论】:

    • 这就是我要找的。太感谢了。 Erbureth 万岁:)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多