分析每个类的垃圾收集对象实例的数量

时间:2011-11-14 19:19:55

标签: java garbage-collection

我正在寻找一种工具,可以提供类似VisuaVM的实时对象分析,但是在非GUI模式下。

我引用的Visual VM功能可以通过转到“Profiler”选项卡并单击“Memory”来访问。

通过为1个对象(所有对象)设置“配置文件对象分配和GC”的配置文件预设。这给了我在自动刷新视图中所需的确切内容,我可以过滤我感兴趣的类。

但是,我希望能够为每个拍摄的快照将“活动对象”表导出到文本文件中(Visual VM每隔一秒刷新一次)。显然,指向和点击不可能是一个解决方案......

任何人都知道这样的“命令行”探查器?

我一直在研究提供堆转储的jmap,但它太昂贵了(转储需要的时间太长,我只对对象的数量感兴趣)。

有一个名为YourKit的商业工具,但我不知道它是否可以做我需要的东西(而且对于我需要它的“一次性”使用类型而言似乎也相当昂贵。)

如果我可以按原样使用VisualVM,但是将输出附加到文件(而不是刷新其GUI),那就完美了......

1 个答案:

答案 0 :(得分:2)

我认为班级直方图就是你要找的。您可以定期收集直方图,这将显示每个类的对象数占用空间。然后,您可以自己解析文本输出,以便:

  • 比较两个直方图以查看实例分配/解除分配
  • 按类名过滤
  • 监视空间占用类实例的时间

使用jmap -histo $pid.

收集班级直方图