如何找到堆中的对象数

新手上路,请多包涵

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

原文由 java_geek 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 399
2 个回答

您可以尝试一个 hack:

  • 创建自己的 java.lang.Object(复制原始来源)
  • 计算构造函数中创建的对象(不为数组调用)
  • 将类文件的路径添加到引导类路径

请参阅这篇(旧) 文章 以获取示例。

使用 JPDAJMX 可能有更好的方法,但我还没有找到如何……

原文由 user85421 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

JVM TI 是 C 代码使用的工具接口,它几乎可以完全访问 JVM 的运行,但它是 C 代码,JVM 不能直接使用。您可能会编写一个 C 库,然后与它交互,但没有现成的东西。

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

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

原文由 Will Hartung 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题