带有大型Matrix的java.lang.OutOfMemoryError

时间:2014-01-02 12:24:42

标签: java heap out-of-memory space

我有 int K 作为输入(K将介于0到1000000(百万)之间),我希望创建一个高度和宽度为2倍的整数矩阵比K数,加上1个元素。

例如,如果K = 3,我的矩阵将是矩阵[3 * 2 + 1] [3 * 2 + 1] =矩阵[7] [7]         如果K = 178754,我的矩阵将是矩阵[357503] [357503]

我在线程“main”中遇到了 java.lang.OutOfMemoryError:Java堆空间异常

int height;
int width;
int [][] matrix;

    public int getKthNumber(int N, int K, String direction) {

    this.height = (K * 2) + 1;
    this.width = (K * 2) + 1;

    ****matrix = new int[this.width][this.height];****   // error here

有谁知道如何解决这个小问题,因为我相信其他整个代码都可以吗?

2 个答案:

答案 0 :(得分:4)

  

我的矩阵将是矩阵[357503] [357503]

是的。这就足以让你失去记忆力。 JVM尝试为357503X357503个整数分配内存,其中每个整数携带32位,几乎产生约476GB。

你究竟想做什么?

答案 1 :(得分:0)

在32位系统中,最高可达2GB。在64位系统上,您可以获得更多。

命令行标志是:

java -Xmx2g myprogram

但在你的情况下似乎这还不够,因为357503 * 357503 * 4/1024/1024/1024(整数字节为4)大约是476G,所以我认为你应该重新考虑你的解决方案。