为什么jhat的-baseline选项不起作用?

ski*_*ppy 4 java profiling jhat hprof

为什么每个对象看起来都标记为新的,而不仅仅是第二个快照中但不在我的基线快照中的对象?在线查看,我看到一些建议,我需要使用hprof而不是jmap来进行内存转储,但似乎hprof以完全相同的格式生成转储.

这是JDK 1.6.0_14; 我试过Windows和UNIX.

Jon*_*ght 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. Presto,你有dump2和基线dump1之间的区别.

所有这一切都适用于jmap转储.