4

誰かがEclipseメモリマネージャを使用してJavaコードのメモリリークを検出しましたか?メモリマネージャの使用に関する情報を探すのに適した場所を誰かが勧めることはできますか?オンラインで何かを読んだところ、クラッシュするまで(メモリ不足エラーが発生するまで)プログラムを実行する必要があることがわかりました。これにより、クラッシュレポートが生成されます。次に、メモリマネージャを使用してこのレポートを開き、メモリリークが発生する可能性のある場所を調べます。これは誰もがメモリマネージャを使用する方法ですか?

4

6 に答える 6

2

おそらく最も簡単なことは、HProf(JVMに標準で付属)でプログラムをしばらく実行し、強制終了することです。HProfの出力は、うまくいけば、すぐにいくつかのポインタを提供するはずです。メモリリーク。

Eclipseメモリデバッガー(私はあなたが書いたものからしか知識がありません)とは異なり、実行の任意の時点から統計を収集できます。

于 2009-10-28T15:34:15.077 に答える
2

-XX:+HeapDumpOnOutOfMemoryErrorは便利ですが、Eclipse メモリ マネージャーを使用するための現在のワークフローは次のとおりです。

  1. プログラムを正常に実行する
  2. メモリが手に負えなくなるのを待ちます。
  3. jmap を実行します。jmap -dump:format=b,file=dump.hprof <PID>
  4. EMM で hprof ファイルを開きます。

私は通常、ヒストグラムとドミネーター ツリー ビューを使用して作業を開始し、何かおかしくないかどうかを確認し、そこからドリルダウンします。

VisualVM は便利ですが、ヒープ ダンプを使用する場合は EMM よりもはるかに効率が悪いようです (EMM はヒープ ダンプの読み込みに関する多くの情報をキャッシュします)。Netbeans Profiler は、割り当ての場所を取得したり、時間のプロファイリングを行うのに適しています。

于 2009-10-28T16:28:06.153 に答える
2

プログラムがクラッシュする (メモリ不足エラーが発生する) までプログラムを実行する必要があることを示唆しており、クラッシュ レポートが生成されます。

私はこれが真実ではないと思います - がOutOfMemoryError発生したときにダンプファイルを取得しません (作成者はこの問題を、コアダンプが保存される原因となる何らかの JVM バグと混同していると思います)。

最良の手順は、jmapを使用してヒープ ダンプを取得することです。これにより、ヒープの内容がバイナリ ファイル (通常は hprof ファイルと呼ばれます) に出力されます。このファイルは、任意の数のアナライザーで分析できます。

  • jhat - hprof ファイルを分析する Sun ツールで、組み込み Web サーバーを起動して、Web ブラウザーを介してヒープを分析したり、レポートを表示したりできます。これは大きなヒープでは非常に遅いことがわかりました。
  • VisualVM - JDK にバンドルされている素晴らしいデバッグ/トラブルシューティング ツール. 特に、これは、実行中のプロセスのヒープ ダンプやスレッド ダンプを生成するためにも使用できます。ただし、大きな hprof ファイルのロードも非常に遅いことがわかりました。
  • Eclipse Memory Analyzer - hprof ファイルを生成できる Eclipse プラグイン。

Eclipse プラグインを使用することを強くお勧めします。大きな (> 500MB) ヒープ ダンプを (1 分以内で) すばやくロードし、有用なレポートを作成し、複雑なロジックを持つクエリ言語をサポートするなどの理由からです。

于 2009-10-28T16:18:28.810 に答える
1

このページでは、jvmヒープダンプの操作について説明します。Jhatは、ヒープを操作するグラフィックが少ない場合はより簡単ですが、同じダンプファイルをEclipseメモリマネージャーにロードすることもできます。current(1.6)jvmを使用している場合は、jvisualvmからいくつかの情報を取得することもできます。

于 2009-10-28T15:36:45.787 に答える
0

私は通常、NetBeans Profiler を使用してアプリケーションをプロファイリングすることを好みます。ほとんどの場合、リークしているオブジェクトと、それらが作成された場所を簡単に確認できます。これを行うツールは他にもいくつかあると思われますが、私は NetBeans プロファイラーがうまく機能し、使いやすいことを知っています。

于 2009-10-28T16:25:49.417 に答える
0

Jprobeを使用してみることができます。アプリケーションを監視し、作成されたオブジェクトを調べることができます。また、これは、どのオブジェクトがガベージ コレクションを取得せず、先に進むためのポインターになるかを分析するのにも役立ちます。

無料ではありませんが、試用ライセンスが付属していると記憶していますので、それを確認してください。

于 2009-10-28T16:26:35.577 に答える