我正在阅读Java 8规范,我看到了终结器可访问的定义:
A finalizer-reachable object can be reached from some finalizable object through some chain of references, but not from any live thread.
这在代码中会是什么样子?我对这样的东西甚至会是什么样子都没有直觉。
在下面的示例代码中,当 Example
的实例变得不可访问时,os
引用的对象将可访问终结器。
public class Example {
private OutputStream os;
public Example(OutputStream os) {
this.os = 0s;
}
protected void finalize() {
try {
os.close();
} catch (IOException ex) {
// ignore it
}
}
}
但是,如果Example
实例不再符合定版条件(例如,因为它之前已经定型,然后在定版期间"复活"),则os
将无法通过定器访问。
"终结器可访问"状态是关于指定在终结期间可能引用的对象不会被过早删除。 该规范没有说明应如何确保这一点。我想Java代码(甚至本机代码)不可能确定特定对象是否是这种状态。
你有一个对象 Foo。 Foo是可完成的,并且在程序中的任何变量中都没有引用。 Foo有一个会员酒吧。 Bar 引用未在其他任何地方引用的对象。 因此,对象 Bar 引用是可访问的终结器。
基本上它是一个无法再通过代码访问的对象,但可以通过另一个无法通过代码访问的对象访问。