18

開発中の Java アプリケーションでメモリ「リーク」が発生しました。JUnit テスト スイートを実行すると、ランダムにメモリ不足の例外が発生します (java.lang.OutOfMemoryError)。

Javaアプリケーションのヒープを調べて、ヒープ全体を使い果たしているものを確認して、ガベージコレクションできるはずのオブジェクトへの参照を保持しているものを特定するには、どのツールを使用できますか。

4

8 に答える 8

26

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で何ができるかを示すブログ エントリです。クリック/

于 2008-09-28T14:30:28.827 に答える
7

無料のものが必要な場合は、VisualVMをお試しください

プロジェクトの説明から:

VisualVM は、コマンドライン JDK ツールと軽量のプロファイリング機能を統合したビジュアル ツールです。開発時と本番時の両方で使用できるように設計されています。

于 2008-09-28T14:22:00.267 に答える
3

これはかなり古い質問です。IntelliJ が最初に回答されて以来、多くの人が IntelliJ を使い始めた可能性があります。IntelliJ には、JVM Debugger Memory Viewと呼ばれるメモリ使用量を表示できるプラグインがあります。

于 2017-01-05T21:08:53.423 に答える
2

Eclipse メモリ アナライザーを使用する

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

于 2008-10-08T08:14:39.310 に答える
1

JProfilerYourKitProfilerなどのプロファイラーを使用する

于 2008-09-28T14:17:51.413 に答える
1

JProfilerは私にとって非常にうまく機能しました....

http://www.ej-technologies.com/products/jprofiler/overview.html

于 2008-09-28T14:18:51.023 に答える
0

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

于 2008-09-28T14:16:33.070 に答える
0

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

このツールは無料で開発に使用でき、ここからダウンロードできます。

于 2008-09-29T23:34:56.230 に答える