假设我们有一个对象和一个静态变量,用于统计生成的对象
variable = new Foo();
Foo.getObjCounter(); // -> 1
java中是否有放置此代码的方法:
variable = null;
Foo.decreaseFooCounter();
进入一种方法,例如:
variable.delete();
Foo.getFooCounter(); // -> 0
或
Foo.delete(variable);
Foo.getFooCounter(); // -> 0
答案 0 :(得分:1)
您可以通过使用WeakReference
s或更具体地由Set
支持的WeakHashMap
来实现这种行为。请参见以下示例:
class Foo {
private static final Set<Foo> references = Collections.newSetFromMap(new WeakHashMap<>());
public Foo() {
references.add(this); // register ourselves
}
public static int getFooCounter() {
return references.size();
}
// rest of the methods
}
尽管仅当垃圾收集器释放了对创建的Foo
的引用时,才会删除它们。引用文档:
[...]假设垃圾收集器在某个时间点确定对象是弱可访问的。到那时,它将自动清除对该对象的所有弱引用 [...]