Java でヒープの内容を確認するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/145922

  •  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

Eclipse Memory Analyzer

を使用します。

ヒープダンプを分析するときに、機能やパフォーマンス、価格(無料でオープンソース)に近いツールを知っている他のツールはありません。

GTKをサポートするシステムを使用している場合、 JMP を使用してみてください。

JRockit Mission Controlツールスイートの一部であるMemory Leak Detectorを試すことができます。 JVMの実行中にヒープを検査できます。常にスナップショットを撮る必要はありません。 JVMにオンラインで接続して、ガベージコレクション間でヒープがどのように変化するかを確認できます。オブジェクトを検査し、参照をグラフィカルに追跡し、アプリケーションが現在オブジェクトを割り当てている場所からスタックトレースを取得することもできます。ここに簡単な紹介があります。

このツールは開発に自由に使用でき、ダウンロードできますここ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top