有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获得任意类的实例数?

给定一个类(例如:foo.bar.MyClass),如何计算JVM中该类的实例数

谢谢

编辑:我正在寻找将检索此计数的代码

EDIT:更具体地说,是方法Integer getInstanceCount(Class c)的实现


共 (3) 个答案

  1. # 1 楼答案

    如果出于调试/优化原因想知道这一点:请查找内存分析器

  2. # 2 楼答案

    您可以使用静态属性来度量虚拟机中类的实例:

    static int noOfInstances = 0;
    

    在构造函数中增加每个新实例:

    noOfInstances++;
    

    或者使用实例初始值设定项:

    { noOfInstances++; }
    

    对象最终确定时的减量

    void finalize() {
        noOfInstances ;
    }
    
  3. # 3 楼答案

    根据具体情况,有三种甚至四种可能的答案。这是:

    1. 如果您可以更改类的源代码,那么您可以添加一个静态计数器(请参见@the Feast's answer)

    2. 如果您有内存问题,那么应该使用内存分析器(请参阅@winSharp93),例如:http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html

    3. 如果您没有访问源代码的权限,那么可以向JVM注册一个插装代理,它将把这个静态字段注入您感兴趣的类中(不是微不足道的,但可能)。此处提供了有关检测的教程:http://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation.html

    4. 如果您正在寻找一些公开这些信息的Java API,那么很遗憾,答案是不支持这种功能