Java でヒープの内容を確認するにはどうすればよいですか?
-
02-07-2019 - |
質問
開発中の Java アプリケーションでメモリ リークが発生しました。JUnit テスト スイートを実行すると、ランダムにメモリ不足例外 (java.lang.OutOfMemoryError) が発生します。
Java アプリケーションのヒープを調べてヒープ全体を使い果たしているものを確認し、ガベージ コレクション可能なオブジェクトへの参照を保持しているものを特定するには、どのようなツールを使用できますか。
解決
VisualVM は Java の最新リリースに含まれています。これを使用してヒープ ダンプを作成し、その中のオブジェクトを確認できます。
あるいは、jmap (jdk/bin ディレクトリ内) を使用してヒープダンプ コマンドを作成することもできます。
jmap -dump:format=b,file=heap.bin <pid>
これを使用して、すべてのオブジェクトのヒストグラムを簡単に取得することもできます。
jmap -histo <pid>
Eclipse Memory Analyzer をお勧めします (http://eclipse.org/mat) ヒープ ダンプの高度な分析用。これにより、特定のオブジェクトまたはオブジェクトのセットが生きている理由を正確に知ることができます。以下は、Memory Analyzer で何ができるかを示すブログ エントリです。 http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analysis-finding-memory-leaks-with-one-click/
他のヒント
無料のものが必要な場合は、 VisualVM
を試してください。プロジェクトの説明から:
VisualVMは、コマンドラインJDKツールと軽量プロファイリング機能を統合したビジュアルツールです。開発時と実稼働時の両方で使用できるように設計されています。
これはかなり古い質問です。最初に回答されて以来、多くの人が IntelliJ を使い始めたかもしれません。IntelliJ には、メモリ使用量を表示できるプラグインがあります。 JVMデバッガのメモリビュー.
JProfilerは非常にうまく機能しました。...
http://www.ej-technologies.com/products/jprofiler /overview.html
ヒープダンプを分析するときに、機能やパフォーマンス、価格(無料でオープンソース)に近いツールを知っている他のツールはありません。
GTKをサポートするシステムを使用している場合、 JMP を使用してみてください。