如何在 Java 程序中找到堆上的活动对象数?
原文由 java_geek 发布,翻译遵循 CC BY-SA 4.0 许可协议
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 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
您可以尝试一个 hack:
请参阅这篇(旧) 文章 以获取示例。
使用 JPDA 或 JMX 可能有更好的方法,但我还没有找到如何……