为什么每个对象看起来都是新的,而不只是第二个快照中的对象,而不是我的基准快照中的对象?在网上浏览一下,我看到一些建议,我需要使用hprof而不是jmap来生成内存转储,但似乎hprof以完全相同的格式生成转储。
这是JDK 1.6.0_14;我在Windows和UNIX上都尝试过。
发布于 2009-08-27 12:14:38
jhat -baseline确实不能与jmap生成的转储一起工作。我不确定,但我相信这是因为hprof从一开始就连接到JVM,并保持自己的对象跟踪,从而允许它在多个转储中生成一致的ID。别引用我的话。无论哪种方式,您所关心的重要一点是jmap转储不起作用。
然而,并不是所有的都失去了。去拿Eclipse Memory Analyzer吧。(如果您不使用Eclipse,请不要担心,您可以将其作为独立的可执行文件获得。)它比jhat更快,比jhat占用更少的内存,而且它可以做你想做的事情:
所有这些在jmap转储中都可以很好地工作。
发布于 2009-08-21 19:57:56
看起来你需要使用hprof。但是您确定您使用的是相同的VM实例吗?
HPROF选项允许比较两个转储文件,如果它们是由
生成的并且来自同一个VM实例。如果同一对象出现在两个转储中,则会从报告的新对象列表中排除该对象。一个转储被指定为基线,并且分析可以专注于自获得基线以来在第二个转储中创建的对象。
如果一切都被认为是新的,我将确保这是VM的相同实例。
Here
https://stackoverflow.com/questions/1279346
复制相似问题