開発中の Java アプリケーションでメモリ「リーク」が発生しました。JUnit テスト スイートを実行すると、ランダムにメモリ不足の例外が発生します (java.lang.OutOfMemoryError)。
Javaアプリケーションのヒープを調べて、ヒープ全体を使い果たしているものを確認して、ガベージコレクションできるはずのオブジェクトへの参照を保持しているものを特定するには、どのツールを使用できますか。
開発中の Java アプリケーションでメモリ「リーク」が発生しました。JUnit テスト スイートを実行すると、ランダムにメモリ不足の例外が発生します (java.lang.OutOfMemoryError)。
Javaアプリケーションのヒープを調べて、ヒープ全体を使い果たしているものを確認して、ガベージコレクションできるはずのオブジェクトへの参照を保持しているものを特定するには、どのツールを使用できますか。
VisualVM は、Java の最新リリースに含まれています。これを使用してヒープ ダンプを作成し、その中のオブジェクトを確認できます。
または、jmap (jdk/bin ディレクトリ内) を使用して heapdump コマンドラインを作成することもできます。
jmap -dump:format=b,file=heap.bin <pid>
これを使用して、すべてのオブジェクトの簡単なヒストグラムを取得することもできます
jmap -histo <pid>
ヒープ ダンプの高度な分析には、Eclipse Memory Analyzer ( http://eclipse.org/mat ) をお勧めします。特定のオブジェクトまたはオブジェクトのセットが生きている理由を正確に知ることができます。以下は、Memory Analyzerで何ができるかを示すブログ エントリです。クリック/
無料のものが必要な場合は、VisualVMをお試しください
プロジェクトの説明から:
VisualVM は、コマンドライン JDK ツールと軽量のプロファイリング機能を統合したビジュアル ツールです。開発時と本番時の両方で使用できるように設計されています。
これはかなり古い質問です。IntelliJ が最初に回答されて以来、多くの人が IntelliJ を使い始めた可能性があります。IntelliJ には、JVM Debugger Memory Viewと呼ばれるメモリ使用量を表示できるプラグインがあります。
Eclipse メモリ アナライザーを使用する
ヒープ ダンプを分析するときに、機能、パフォーマンス、価格 (無料およびオープン ソース) に近いツールを私が知っているツールは他にありません。
JProfilerやYourKitProfilerなどのプロファイラーを使用する
JProfilerは私にとって非常にうまく機能しました....
http://www.ej-technologies.com/products/jprofiler/overview.html
GTK をサポートするシステムを使用している場合は、JMPを使用してみてください。
JRockit Mission Control ツール スイートの一部である Memory Leak Detector を試すことができます。JVM の実行中にヒープを検査できます。常にスナップショットを作成する必要はありません。オンラインで JVM に接続するだけで、ガベージ コレクション間でヒープがどのように変化するかを確認できます。また、オブジェクトを検査し、参照をグラフィカルにたどり、アプリケーションが現在オブジェクトを割り当てている場所からスタック トレースを取得することもできます。ここに簡単な紹介があります。
このツールは無料で開発に使用でき、ここからダウンロードできます。