VM设置为最大1024m时的Java OutOfMemoryError

时间:2012-10-23 01:50:36

标签: java out-of-memory

1亿英寸的int数组应该是400 MB,对吗? 一个int = 4个字节

因此,如果我使用-Xmx1024m将VM设置为最大堆1024m,为什么此代码会失败:

public static void main(String[] args) {

    int[] b = new int[100000000]; //100 mil = 400mb
    System.out.println("ok");
    int[] c = new int[100000000];

}

这是输出:

ok
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at Main.main(Main.java:9)

解决方案 - 将其分解!

public static void main(String[] args) {

    int[] a = new int[50000000]; //50 mil = 200mb
    System.out.println("ok 1");
    int[] b = new int[50000000];
    System.out.println("ok 2");
    int[] c = new int[50000000];
    System.out.println("ok 3");
    int[] d = new int[50000000];
    System.out.println("ok 4");


}

1 个答案:

答案 0 :(得分:3)

问题在于,当你创建这个int []时,它需要400mb的连续内存。基本上这意味着,您需要一个400mb内存的固体块才能使用。由于堆的碎片,它无法找到一个可靠的400mb内存块来使用。这就是为什么你在这种情况下会出现内存不足的错误。