最近の Java のインタビューで、この質問をされました。OutOfMemory Exception を取得した場合、どのクラスとどのメソッドが OutOfMemory Exception をスローしたかを調べるにはどうすればよいでしょうか。私はそれがスタックトレースに来ると答えましたが、彼は多くの場合、どの特定のメソッド/クラスがその例外をスローしたかを教えてくれないと言っていました. 彼は、役立つツールまたは JVM の引数を期待していたと思います。でも使ったことがないので答えられません。
無限ループでハッシュマップに値を入れる簡単な例を試しました。しばらくすると OutOfMemory エラーが発生し、クラス/メソッド名と行番号が表示されます。これらの詳細 [メソッド/クラス名] が得られないシナリオと、それを見つけるために使用できるツール/VM 引数を理解したいと思います。
**Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at hashmapTest.main(hashmapTest.java:18)**
この VM 引数 Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath についても読みましたが、この目的を達成するために使用されているかどうかはよくわかりません。