给定一个类(例如:foo.bar.MyClass),如何获得JVM中存在的该类的实例数?如何获得任意类的实例的计数?
感谢
编辑:我在寻找,将检索此计数的代码。
编辑:更具体地说,该方法Integer getInstanceCount(Class c)
给定一个类(例如:foo.bar.MyClass),如何获得JVM中存在的该类的实例数?如何获得任意类的实例的计数?
感谢
编辑:我在寻找,将检索此计数的代码。
编辑:更具体地说,该方法Integer getInstanceCount(Class c)
根据确切的上下文,有三个甚至四个可能的答案。在这里,他们是:
如果你可以改变类的源代码,那么你可以如果您遇到内存问题,那么你添加一个静态的计数器(见@The盛宴的答案)
应使用内存分析器(请参阅@ winSharp93),如:http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html,
如果您无权访问源代码,则可以向JVM注册Instrumentation代理,该代理将会将该静态字段注入类你感兴趣(不是微不足道的,但可能的)。有关仪器的教程可以在这里找到:http://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation.html
如果您正在寻找一些公开此信息的Java API,那么 - 可悲的是 - 答案是不支持这样的设备。
如果你想知道这个调试/优化的原因的实现:寻找一个内存分析器。
您可以使用一个静态属性在虚拟机内进行测量的类的实例:
static int noOfInstances = 0;
增量在构造函数中的每个新的实例:
noOfInstances++;
或使用实例初始化:
{ noOfInstances++; }
当对象完成时减少。
void finalize() {
noOfInstances--;
}
乍得,因为你有你正在寻找实现特定的方法,我想知道如果这是一个家庭作业...... – delfuego 2009-12-15 16:59:48