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