2 番目のスナップショットにはあるがベースライン スナップショットには含まれていないオブジェクトだけではなく、すべてのオブジェクトが新規としてマークされているように見えるのはなぜですか? オンラインで調べてみると、jmap の代わりに hprof を使用してメモリ ダンプを作成する必要があるという提案がいくつか見られますが、hprof はまったく同じ形式でダンプを生成するようです。
これは JDK 1.6.0_14 です。Windows と UNIX の両方で試しました。
jhat -baseline
によって生成されたダンプでは実際には機能しませんjmap
。確かではありませんが、これは、 hprofが最初から JVM にアタッチされ、オブジェクトの独自の追跡を維持し、複数のダンプにわたって一貫した ID を生成できるためだと思います。それについて私を引用しないでください。いずれにせよ、重要な点は、jmap ダンプが機能しないことです。
しかし、すべてが失われるわけではありません。Eclipse Memory Analyzerを入手してください。(Eclipse を使用しない場合でも、心配する必要はありません。スタンドアロンの実行可能ファイルとして入手できます。) jhat よりも高速で、jhat よりも少ないメモリを使用し、必要なことを行うことができます。
これはすべて、jmap ダンプで正常に機能します。
hprof を使用する必要があるようです。しかし、同じ VM インスタンスを使用してもよろしいですか?
-baseline オプションを使用すると、2 つのダンプが HPROF によって生成され、同じ VM インスタンスから生成された場合に比較できます。同じオブジェクトが両方のダンプに表示される場合、報告される新しいオブジェクトのリストから除外されます。1 つのダンプがベースラインとして指定され、ベースラインが取得されてから 2 番目のダンプで作成されたオブジェクトに分析の焦点を当てることができます。
すべてが新しいと見なされる場合は、それが VM の同じインスタンスであることを確認します。