为什么每个对象似乎都被标记为新的,而不仅仅是位于第二个快照中但不在我的基线快照中的对象?在网上环顾四周,我看到一些建议,我需要使用 hprof 而不是 jmap 来进行内存转储,但似乎 hprof 以完全相同的格式生成转储。
这是 JDK 1.6.0_14;我在 Windows 和 UNIX 上都试过。
最佳答案
jhat -baseline
确实不适用于 jmap
生成的转储。我不确定,但我相信这是因为 hprof 从一开始就连接到 JVM 并保持自己的对象跟踪,允许它在多个转储中生成一致的 ID。不要引用我的话。无论哪种方式,就您而言,重要的一点是 jmap 转储不起作用。
然而,并没有失去一切。去拿 Eclipse Memory Analyzer 。 (如果您不使用 Eclipse,请不要担心,您可以将其作为独立的可执行文件使用。)它比 jhat 更快,比 jhat 使用更少的内存,并且可以执行您想要的操作:
所有这些都适用于 jmap 转储。
关于java - 为什么 jhat 的 -baseline 选项不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1279346/