0

1 亿个 int 的 int 数组应该是 400 MB,对吧?1 个整数 = 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");


}
4

1 回答 1

3

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

于 2012-10-23T02:00:04.500 回答