给定一个类(例如:foo.bar.MyClass),如何计算JVM中存在的该类的实例数?
由于
编辑:我正在寻找能够检索此计数的代码。
编辑:更具体地说,是方法Integer getInstanceCount(Class c)
答案 0 :(得分:5)
根据具体情况,有三种甚至四种可能的答案。他们在这里:
如果您可以更改课程的源代码,那么您可以添加一个静态计数器(参见@The Feast的答案)
如果您遇到内存问题,那么您应该使用内存分析器(请参阅@ 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,那么 - 遗憾的是 - 答案是不支持此类工具。
答案 1 :(得分:2)
如果您想了解调试/优化原因:查找内存分析器。
答案 2 :(得分:1)
您可以使用静态属性来度量虚拟机中的类实例:
static int noOfInstances = 0;
使用以下命令增加构造函数中的每个新实例:
noOfInstances++;
或者使用实例初始值设定项:
{ noOfInstances++; }
最终确定对象时减少。
void finalize() {
noOfInstances--;
}