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

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

通过转到“Profiler”选项卡并单击“Memory”来访问我所指的Visual VMfunction。

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

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

有人知道这样的“命令行”探查器吗?

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

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

如果我可以按原样使用VisualVM,但是让它将输出附加到文件(而不是刷新它的GUI),它将是完美的……

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

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

使用jmap -histo $pid.收集类直方图jmap -histo $pid.