4

2 番目のスナップショットにはあるがベースライン スナップショットには含まれていないオブジェクトだけではなく、すべてのオブジェクトが新規としてマークされているように見えるのはなぜですか? オンラインで調べてみると、jmap の代わりに hprof を使用してメモリ ダンプを作成する必要があるという提案がいくつか見られますが、hprof はまったく同じ形式でダンプを生成するようです。

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

4

2 に答える 2

11

jhat -baselineによって生成されたダンプでは実際には機能しませんjmap。確かではありませんが、これは、 hprofが最初から JVM にアタッチされ、オブジェクトの独自の追跡を維持し、複数のダンプにわたって一貫した ID を生成できるためだと思います。それについて私を引用しないでください。いずれにせよ、重要な点は、jmap ダンプが機能しないことです。

しかし、すべてが失われるわけではありません。Eclipse Memory Analyzerを入手してください。(Eclipse を使用しない場合でも、心配する必要はありません。スタンドアロンの実行可能ファイルとして入手できます。) jhat よりも高速で、jhat よりも少ないメモリを使用し、必要なことを行うことができます。

  1. dump2 を開きます (File|Open Heap Dump を使用)。レポートを作成する必要はありません。
  2. dump1 を開きます (同じ方法)。繰り返しますが、報告はありません。
  3. dump2 のタブで、[ヒストグラム] をクリックします。
  4. [ヒストグラム] サブタブのツールバーの右側には、[別のヒープ ダンプと比較] があります。クリックして。
  5. ベースラインとして使用するダンプとして、ダイアログから dump1 を選択します。
  6. さきほど、dump2 とベースラインの dump1 に違いがあります。

これはすべて、jmap ダンプで正常に機能します。

于 2009-08-27T12:14:38.493 に答える
0

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

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

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

ここ

于 2009-08-21T19:57:55.857 に答える