我如何知道在java中的任何给定时间创建了多少类实例?我有 A 类,我想知道在任何给定时间创建了多少个实例?请让我知道解决方案
问问题
2716 次
4 回答
7
使用静态变量在构造函数中跟踪它。
public class A {
private static int instances = 0;
public A() {
instances++;
}
}
如果您担心并发性:
public class A {
private static final Object LOCK = new Object();
private static int instances = 0;
public A() {
synchronized(LOCK) {
instances++;
}
}
}
要解决您在问题下方评论中所说的话:如果您想知道当前存在多少(即尚未被垃圾收集),您可以尝试以下操作:
public class A {
private static final Object LOCK = new Object();
private static int instances = 0;
public A() {
synchronized(LOCK) {
instances++;
}
}
protected void finalize() throws Throwable {
synchronized(LOCK) {
instances--;
}
}
}
该finalize()
方法将在对象被垃圾回收之前被调用。然而,垃圾收集是出了名的不可靠。
此外,作为旁注,您可以使用AtomicInteger
类而不是 anint
和synchronized
块,如下面的@rolfl 所述。如果他发布一个,所有对这个想法的支持都应该去他的答案。
于 2013-09-18T16:41:05.740 回答
0
你可以在它初始化时实现一个计数器
于 2013-09-18T16:42:22.623 回答
0
这实际上不是一个糟糕的问题,您可以通过使用 sychronize 和计数器来控制实例的数量,这种设计模式称为实例控制类,它是 Joshua Bloch 在“有效 Java”中提到的第一件事(第2章)
于 2013-09-18T16:41:21.207 回答
0
没有直接的方法,但如果您真的对跟踪这些信息感兴趣,您可以创建一个private static int instanceCounter
字段并在构造函数中递增它。您还需要一种finalize
方法,该方法会在实例被垃圾收集时递减计数器。
于 2013-09-18T16:41:55.407 回答