2009-08-14 3 views
4

2番目のスナップショットにあるオブジェクトではなく、ベースラインのスナップショットにないオブジェクトは、どのようにして新しく表示されますか?オンラインで見て、私はメモリダンプを作るためにjmapの代わりにhprofを使う必要があると示唆していますが、hprofはまったく同じフォーマットでダンプを生成するようです。jhatの-baselineオプションが機能しないのはなぜですか?

これはJDK 1.6.0_14です。私はWindowsとUNIXの両方で試しました。

+0

プラットフォームのバージョン(Windows?Unix?)とjdk? – VonC

答えて

10

jhat -baselineは確かjmapによって生成ダンプでは動作しません。私は確信していませんが、と考えています。これは、hprofが最初からJVMに直接接続してオブジェクトのトラックを保持し、複数のダンプ間で一貫したIDを生成できるためです。それについて私を引用しないでください。いずれにせよ、重要な点は、jmapのダンプがうまくいかないことです。

ただし、すべてが失われることはありません。行ってEclipse Memory Analyzerを取得します。 (Eclipseを使用しない場合は、スタンドアロンの実行可能ファイルとしてそれを得ることができ、恐れることはない。)それはjhatよりも高速ですが、jhat より少ないメモリを使用し、それはあなたがやりたいことができます。

  1. オープンDUMP2を(ファイル|オープンヒープダンプを使用)。それがあなたのためのレポートを作成することを気にしないでください。
  2. ダンプ1を開く(同じ方法)。再び、報告はありません。
  3. dump2のタブで、「ヒストグラム」をクリックします。
  4. ヒストグラムサブタブのツールバーの右側に、「別のヒープダンプと比較」が表示されます。クリックして。
  5. ダンプとしてダイアログボックスからdump1を選択し、ベースラインとして使用します。
  6. 以前は、dump2とベースラインdump1の違いがあります。

これはすべてjmapのダンプでうまく動作します。

+0

恐ろしい!そこからダンプ2の新しいオブジェクトにドリルダウンし、それらを保持しているものを見つける方法がありますか? – skiphoppy

+0

私が知る限り、比較から直接ではなく、いいえ。あなたは全体のセットからドリルダウンすることができます。 (Dominator Treeを選択して、興味のあるクラスにフィルタをかけ、右クリックして、受信した参照を含むオブジェクトを一覧表示し、必要に応じてツリーを展開してください。)特定の新しいオブジェクトを保持しているものを見ることができるということは、役に立つが、私はそれをする方法を知らない。 –

0

hprofを使用する必要があるようです。しかし、あなたは同じVMインスタンスを使用していますか?

-baselineオプションを使用すると、HPROFおよび同じVMインスタンスから生成された2つのダンプを比較できます。両方のダンプに同じオブジェクトが表示された場合は、報告された新しいオブジェクトのリストから除外されます。 1つのダンプがベースラインとして指定され、ベースラインが取得されてから2番目のダンプで作成されるオブジェクトに焦点を当てることができます。

すべてが新しいと見なされる場合、そのVMの同じインスタンスであることを確認します。

Here

関連する問題