为什么每个对象似乎都被标记为新对象,而不仅仅是第二个快照中但不在我的基准快照中的对象?在网上查看,我看到一些建议,我需要使用 hprof 而不是 jmap 来进行内存转储,但 hprof 似乎以完全相同的格式生成转储。
这是JDK 1.6.0_14;我在 Windows 和 UNIX 上都试过了。
jhat -baseline
确实不适用于由jmap
。我不确定,但我believe这是因为 hprof 从一开始就附加到 JVM 并保留自己的对象跟踪,从而允许它在多个转储中生成一致的 ID。不要引用我的话。无论哪种方式,就您而言,重要的一点是 jmap 转储不起作用。
然而,一切并没有失去。去获取Eclipse 内存分析器。 (如果您不使用 Eclipse,不用担心,您可以将其作为独立的可执行文件获取。)它比 jhat 更快,使用的内存比 jhat 更少and它可以做你想做的事:
- 打开 dump2(使用“文件”|“打开堆转储”)。不用费心让它为您创建报告。
- 打开dump1(同样的方式)。再次,没有报告。
- 在 dump2 的选项卡中,单击“直方图”
- 直方图子选项卡中工具栏右侧是“与另一个堆转储比较”。点击它。
- 从对话框中选择 dump1 作为要用作基线的转储。
- 很快,您就看到了 dump2 和基线 dump1 之间的差异。
所有这些都可以通过 jmap 转储正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)