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