Javaでは、java.lang.OutOfMemoryError
が発生した時点を正確に見つけることは可能ですか?OutOfMemoryエラーの原因を特定する
私はより良い自分のアプリケーションを使用すると、OutOfMemoryErrorが発生をキャッチし、以下に示すように、ランタイムを求めることができる
Javaでは、java.lang.OutOfMemoryError
が発生した時点を正確に見つけることは可能ですか?OutOfMemoryエラーの原因を特定する
私はより良い自分のアプリケーションを使用すると、OutOfMemoryErrorが発生をキャッチし、以下に示すように、ランタイムを求めることができる
を失敗する前に請求を取った正確にどのくらいのメモリを理解するために探しています。
try {
//...
} catch (OutOfMemoryError er) {
// this will tell you how much you have used
long heapSize = Runtime.getRuntime().totalMemory();
System.err.println("memory used "+heapSize);
}
(ヒープがメモリを使い果たしたときのOutOfMemoryErrorが発生しなければならない)
あなたのコードでは、それは失敗します見当がつかない場合は、シャットダウンフックと出力はヒープサイズを登録してみてください。
間違いなく良いアイデア!ありがとうブルース – JAM
例外をスローしてスタックトレースをダンプしますか?エラーが発生したときにコードが行っていたことを正確に伝える必要があります。 –
Kinda rough。一度にJVMで非常に多くのことが起こっているので、どのスレッドが原因であるかを知ることは難しいです。ブレークするスレッドは必ずしもすべてのメモリを占有するスレッドではありません。 –
@AdamLiss質問はどこに問題が発生したのかという問題ではありません。問題は、アプリケーションのメモリがどれくらいの大きさであるかです。 – JAM