编程语言
首页 > 编程语言> > Java OutOfMemoryError甚至具有正确的结构?

Java OutOfMemoryError甚至具有正确的结构?

作者:互联网

我正在使用Java中的2D int数组,它们是方形的,并且在行和列中可以有〜30000个元素,这意味着数组中有30000 ^ 2 * 4个字节,小于5GB(我还有很多)超过5GB的可用内存).

我程序的基本结构是这样的:

public class A {
    public static void main(String[] args) {
        Graph g = ...; // read from file
        System.out.println(B.computeSomethingBig(g));
    }
}

public class B {
     public static computeSomethingBig(Graph g) {
         int numVertices = g.numVertices();
         System.out.println(numVertices); // ~30000 maximum
         int[][] array = new int[numVertices][numVertices];
         // ... other computations
     }
}

现在,在Eclipse中,我使用以下参数在A类中运行main:

-Xms5g -Xmx10g

我有numVertices打印出30000左右的值,并且设置最小堆大小(-Xms)似乎超出了必要.但是,我得到:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

解决方法:

运行以下命令:

public class A {
        public static void main(String[] args) {
                int numVertices = 30000;
                int[][] array = new int[numVertices][numVertices];
        }
}

没有任何参数,即java A会导致OOM错误.运行java -Xms5g -Xmx10g是可行的.我怀疑numVertices大于您的预期.为什么在分配以确保之前不输出它.

还应考虑您的Graph或应用程序中的其他对象也可能正在使用堆空间.

标签:eclipse,heap-memory,out-of-memory,java
来源: https://codeday.me/bug/20191029/1958334.html