为什么不的工作与jHat的 - 基线选项?(Why doesn't the -baselin

2019-09-23 18:40发布

为什么每次对象似乎标志着新的,而不只是对象是在第二个快照,但不是在我的基线快照? 环顾四周网上,我看到了一些建议,我需要改用HPROF JMAP,使我的内存转储,但现在看来,HPROF在完全相同的格式生成转储。

这是JDK 1.6.0_14; 我试图在Windows和UNIX。

Answer 1:

jhat -baseline确实不会将产生转储工作jmap 。 我不能肯定,但我相信这是因为HPROF从一开始就重视JVM和保持它自己的轨道对象,允许其在多个垃圾场产生一致的ID。 不要可以引用我这句话。 无论哪种方式,只要您关注的重要一点是,JMAP转储不起作用。

然而,一切都没有失去。 去在Eclipse的内存分析器 。 (如果你不使用Eclipse,不要害怕,你可以把它作为一个独立的可执行文件),它比速度与jHat,使用较少的内存比与jHat它可以做你想做的:

  1. 打开dump2(与文件|打开堆转储)。 不要打扰有它为您创建一个报告。
  2. 打开dump1(相同)。 同样,没有报告。
  3. 在dump2选项卡,单击“直方图”
  4. 在工具栏上的直方图中的子标签右边是“比较到另一个堆转储”。 点击它。
  5. 选择你的对话框dump1作为转储为基准使用。
  6. 转眼间,你有dump2和基线dump1之间的差异。

所有这一切都正常工作与一个JMAP转储。



Answer 2:

看来你需要使用HP​​ROF。 但你一定要使用相同的虚拟机实例?

本 - 基线选项允许,如果他们被HPROF和来自同一个VM实例制作要比较的两个转储。 如果同一个对象同时出现在转储它将从报告的新对象列表中排除。 一个转储被指定为一个基线和分析可以集中于在第二转储创建以来获得基线的对象。

如果一切都被认为是新的,我会确保这是虚拟机的同一个实例。

这里



文章来源: Why doesn't the -baseline option of jhat work?