首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么jhat的-baseline选项不起作用?

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

Stack Overflow用户
提问于 2009-08-14 18:17:20
回答 2查看 2.4K关注 0票数 4

为什么每个对象看起来都是新的,而不只是第二个快照中的对象,而不是我的基准快照中的对象?在网上浏览一下,我看到一些建议,我需要使用hprof而不是jmap来生成内存转储,但似乎hprof以完全相同的格式生成转储。

这是JDK 1.6.0_14;我在Windows和UNIX上都尝试过。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-27 12:14:38

jhat -baseline确实不能与jmap生成的转储一起工作。我不确定,但我相信这是因为hprof从一开始就连接到JVM,并保持自己的对象跟踪,从而允许它在多个转储中生成一致的ID。别引用我的话。无论哪种方式,您所关心的重要一点是jmap转储不起作用。

然而,并不是所有的都失去了。去拿Eclipse Memory Analyzer吧。(如果您不使用Eclipse,请不要担心,您可以将其作为独立的可执行文件获得。)它比jhat更快,比jhat占用更少的内存,而且它可以做你想做的事情:

  1. 打开dump2 (使用文件|打开堆转储)。不用费心让它为您创建报告。
  2. 打开dump1 (相同方式)。同样,没有报告。
  3. 在dump2的选项卡中,单击直方图子选项卡中工具栏右侧的"Compare to
  4. “。单击它。
  5. 从对话框中选择dump1作为转储,以用作dump2和基线dump1之间的差异。

所有这些在jmap转储中都可以很好地工作。

票数 11
EN

Stack Overflow用户

发布于 2009-08-21 19:57:56

看起来你需要使用hprof。但是您确定您使用的是相同的VM实例吗?

HPROF选项允许比较两个转储文件,如果它们是由

生成的并且来自同一个VM实例。如果同一对象出现在两个转储中,则会从报告的新对象列表中排除该对象。一个转储被指定为基线,并且分析可以专注于自获得基线以来在第二个转储中创建的对象。

如果一切都被认为是新的,我将确保这是VM的相同实例。

Here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1279346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档