如何查找堆中的对象数

2022-09-02 03:58:41

如何在Java程序中找到堆上活动对象的数量?


答案 1

jmap 是标准的 java 实用程序,可用于捕获堆转储和统计信息。我不能说jmap使用什么协议连接到JVM来获取此信息,并且不清楚此信息是否直接可用于在JVM中运行的程序(尽管我确信该程序可以通过某些套接字查询它的JVM以获取此信息)。

JVM TI是C代码使用的工具接口,它几乎可以完全访问JVM的运行情况,但它是C代码,JVM不能直接使用。你可以写一个C lib,然后与它接口,但没有什么开箱即用的。

有几个JMX MBean,但我认为它们中没有一个提供实际的对象计数。你可以从中获取内存统计信息(这些是JConsole使用的)。查看 java.lang.management 类。

如果你想要一些快速(易于实现,不一定是快速的结果,因为jmap需要一些时间),我会分叉一个jmap,然后简单地读取结果文件。


答案 2

最简单的方法是使用工具。如果要在最后打印对象直方图,您将看到实例总数以及所有对象的累积大小:jmap

jmap -histo <PID>将打印具有实例数和大小的整个对象。最后一行将包含总数

Total 2802946 174459656

第二列是实例总数,最后一列是总字节数。


推荐