2011-02-08 7 views
5

最終的にOutOfMemoryを生成するプログラムがあります。 プログラムコードは次のとおりです。OutOfMemoryのときにJavaダンプを生成する

public class VeryLargeObject implements Serializable { 
    public static final int SIZE = 1 << 12; 

    public String tag; 
    public int[][] bigOne = new int[SIZE][SIZE]; 

    { 
     // Initialize bigOne 
     for(int i = 0; i < SIZE ; ++i) { 
      for(int j = 0; j < SIZE; ++j) { 
       bigOne[i][j] = (int) (Math.random() * 100); 
      } 
     } 
    } 

    public VeryLargeObject(String tag) { 
     this.tag = tag; 
    } 

    public static void main(String args[]) { 
     VeryLargeObject[] vla = new VeryLargeObject[1 << 12]; 
     for(int i = 0; i < Integer.MAX_VALUE; ++i) { 
      vla[i] = new VeryLargeObject("aa"); 
     } 
    } 
} 

私は、次のパラメータを使用してプログラムを実行します。

java VeryLargeObject -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="D:\workspace" 

プログラムがOutOfMemoryをして失敗しても何のダンプファイルが生成されません。理由は何ですか?

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
     at VeryLargeObject.<init>(VeryLargeObject.java:14) 
     at VeryLargeObject.main(VeryLargeObject.java:32) 
+3

ヒープファイルが生成されなかったと言っていましたか? -XX:+ HeapDumpOnOutOfMemoryError(+記号に気づく) – CoolBeans

+0

>プログラムはOutOfMemoryで失敗しますが、ファイルが生成された場合にはダンプします。 - それはタイプミスですか? - あなたは** ** ** ** ** **を意味しますか? – Ralph

答えて

8

スタータ用前XXオプションと任意のオプションをドロップVeryLargeObject、それ以外の場合はJVMではなくJavaプログラムにパラメータを渡します

+0

のルートディレクトリに ".hprof"と書かれています。私はVeryLargeObjectのドキュメントを見つけられません。 – Vipin

+0

@Vipin、 'VeryLargeObject'は 'main(String [])'を含むクラスです。その質問自体を見てください。 – bestsss

+0

私はそれを気づかなかった、よく今私はそれを得た:) – Vipin

5

私は、jvmがパスに書き込めず、サイレントモードで失敗したと考えます。たとえば、これは存在するディレクトリ内のファイル名でなければなりません。ディレクトリがD:\workspaceの場合は失敗します。 D:\workspace\heap.hprofをお持ちの場合は動作する可能性があります。その名前の空白のファイルを作成してみてください。

+1

+1 25秒で私より速く – Ralph

+1

パラメータが間違って配置されています – bestsss

14

問題は、-XX:HeapDumpPathがファイルであり、パスではないことです。

-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="c:\temp\dump2.hprof" 

を追加:あなたが "エラー" の両方を修正する必要があるので、

bestsssは、右すぎる:

java -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="c:\temp\dump2.hprof" VeryLargeObject 
+3

'-XX:HeapDumpPath'は次のようなパスにすることもできます: '-XX:HeapDumpPath = c:/'、パターン "java_pid4128ドライブC: –

関連する問題