2011-04-13 9 views
2

私たちのコードは-XX:+ HeapDumpOnOutOfMemoryErrorフラグで実行され、OOM上でhprofファイルを取得します。 最近、私はインストールからそのようなファイルを取得しました。私はEclipseメモリアナライザ(MAT)でそれを開いて、合計サイズが46MBであることがわかりました。プロセスが-Xmx1024mで開始された場合、どうすればできますか?なぜhprofファイルはjvmに与えられるメモリ量よりもはるかに小さいでしょう

サイズは、割り当てられた最大サイズにはるかに近くてはなりませんか?

これはjdk1.6と同じです。

EDIT:ok今私はsimilar questionを見つけましたが、実際にPermGenのスペースの問題が原因である可能性があります。私のプロセスは23日間続きました。私は非常に頻繁に、1秒に1回多分、おそらく私が知る限り新しいスレッドを作成します。何とか私がこれを確認できるかどうか誰もが知っていますか?

答えて

1

これは、非常に大きなオブジェクトの作成に失敗した場合に発生します。つまり、作成に失敗したオブジェクトはダンプにありません。

+0

はい私はこれについて考えましたが、他のヒントポイントはありません...私の編集を見て、ここで関連する質問が見つかりました – Persimmonium

+0

最も簡単な原因は元の例外を読み取ることです。たとえば、 "java.lang.OutOfMemoryError:Java heap space"、 "java.lang.OutOfMemoryError:PermGen space"または "java.lang.OutOfMemoryError:Direct buffer memory"また、スタックトレースは失敗した操作を示すはずです。手掛かり –

+0

残念ながら私は例外をキャッチしませんでした – Persimmonium

関連する問題