我猜你希望有一个像这样的程序......
class Test {
public static void main(String[] args) {
new Test();
System.out.println("done");
}
protected void finalize() {
System.out.println("this object is known to never be referenced.");
}
}
可能会在"done"
之前输出"此对象已知永远不会被引用"
。(如果我理解有误,请纠正我!)
此外,编译器/JVM很容易检测到"未读取的本地变量"。例如,在下面的程序中,Eclipse注意到"t本地变量从未被读取"。
然而,对于以下程序的(.class版本),JVM是否可以在"done"
之前输出"此对象已知永远不会被引用"
是非法的吗?
class Test {
public static void main(String[] args) {
Test t = new Test();
System.out.println("done");
}
protected void finalize() {
System.out.println("this object is known to never be referenced.");
}
}
大多数垃圾收集文档都谈论到可达性。鉴于从未读取变量
t
,该对象显然不是“可达”的,对吗?欢迎参考JLS。