0

1億intのint配列は400MBである必要がありますよね?1つのint=4バイト

したがって、VMの最大ヒープを-Xmx1024mで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 の連続したメモリが必要になるという事実にあります。基本的にこれは、使用するには 400 MB のメモリの固体ブロックが必要であることを意味します。ヒープの断片化が原因で、使用する 400 MB のメモリ ブロックを見つけることができません。そのため、この状況でメモリ不足エラーが発生しています。

于 2012-10-23T02:00:04.500 に答える