java如何获得任意类的实例数?
给定一个类(例如:foo.bar.MyClass),如何计算JVM中该类的实例数
谢谢
编辑:我正在寻找将检索此计数的代码
EDIT:更具体地说,是方法Integer getInstanceCount(Class c)
的实现
你可以在下面搜索框中键入要查询的问题!
给定一个类(例如:foo.bar.MyClass),如何计算JVM中该类的实例数
谢谢
编辑:我正在寻找将检索此计数的代码
EDIT:更具体地说,是方法Integer getInstanceCount(Class c)
的实现
# 1 楼答案
如果出于调试/优化原因想知道这一点:请查找内存分析器
# 2 楼答案
您可以使用静态属性来度量虚拟机中类的实例:
在构造函数中增加每个新实例:
或者使用实例初始值设定项:
对象最终确定时的减量
# 3 楼答案
根据具体情况,有三种甚至四种可能的答案。这是:
如果您可以更改类的源代码,那么您可以添加一个静态计数器(请参见@the Feast's answer)
如果您有内存问题,那么应该使用内存分析器(请参阅@winSharp93),例如:http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html,
如果您没有访问源代码的权限,那么可以向JVM注册一个插装代理,它将把这个静态字段注入您感兴趣的类中(不是微不足道的,但可能)。此处提供了有关检测的教程:http://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation.html
如果您正在寻找一些公开这些信息的Java API,那么很遗憾,答案是不支持这种功能