Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算类的实例数_Java_.net_Testing - Fatal编程技术网

Java 计算类的实例数

Java 计算类的实例数,java,.net,testing,Java,.net,Testing,我正在寻找一种方法,以编程方式获取.NET和Java中某类类型的实例数 比如说我有一个Foo班。我希望能够在相同的过程中,获得所有Foo实例的当前计数。 但是,我无法修改Foo,因此带有计数的静态int已失效。此外,我不能只是将我创建的所有实例添加到某个静态列表中,然后进行计数。我只想说: System.GC.numberOf< Foo >() System.GC.numberOf() 或者别的什么 我在查看垃圾收集器,但找不到任何相关的方法。快速而肮脏:如果您不能更改类,也许您

我正在寻找一种方法,以编程方式获取.NET和Java中某类类型的实例数

比如说我有一个Foo班。我希望能够在相同的过程中,获得所有Foo实例的当前计数。
但是,我无法修改Foo,因此带有计数的静态int已失效。此外,我不能只是将我创建的所有实例添加到某个静态列表中,然后进行计数。我只想说:

System.GC.numberOf< Foo >()
System.GC.numberOf()
或者别的什么


我在查看垃圾收集器,但找不到任何相关的方法。

快速而肮脏:如果您不能更改类,也许您可以在项目的另一部分中放置一个计数器,在实例化所述类时将其递增?

您可以控制Java VM的运行方式吗?如果是这样,您可以编写一个快速而肮脏的调试器代理


请参阅事件“VM对象分配”和“无对象”

如果无法直接修改该类(可能是因为它是一个内置类),您是否可以创建一个包装器或继承原始类的子类

public class subFoo extends foo
{
    protected static int count = 0;

    public subFoo() 
    {
        count++;
        super();
    }

    protected void finalize() throws Throwable
    {
        count--;
        super.finalize();
    } 

    public static int getInstanceCount()
    {
        return count;
    }
}
这个例子是Java,可能有一些语法问题,因为我有点生疏了


当然,您必须确保在代码的其余部分将所有
foo
重新声明为
subfo

如前所述,SO中也有类似的问题。
您可以使用的一种方法是更改
对象
类:请参阅

简历:

  • 复制对象的源
  • 将计数添加到其构造函数(完成)
  • add方法读取计数
  • 将带有编译类的目录前置到引导类路径(-Xbootclasspath)

另一种有点奇怪的方法是使用面向方面的技术对所讨论的类的构造函数进行测试。例如,看一看。

这有重复的。到处搜索。有类似的问题,但答案总是涉及到用某种计数器修改课堂。我想计算我没有定义或控制的类的实例。这一点在一些回答中也有说明。跟踪您在控制的代码中创建的对象的数量。我使用工具统计远程进程中对象的实例,这对于跟踪泄漏非常有用。我希望有一种方法可以在同一个程序中复制这种逻辑,用于测试目的。我确实想到了这一点,但不幸的是,我正在处理的是由第三方库生成的对象。我想在运行自动测试时对这些对象进行计数,以确保它们被正确释放+1阅读问题并提供一个好的解决方案!我将尝试这个解决方案,因为我可能也可以以其他类似的方式为.net类提供工具。