一个对象在 Java 中是 "finalizer-reachable" 是什么意思?

What does it mean for an object to be "finalizer-reachable" in Java?

我正在阅读 Java 8 规范,我看到了 finalizer-reachable 的定义:

A finalizer-reachable object can be reached from some finalizable object through some chain of references, but not from any live thread.

这在代码中会是什么样子?我连这样的东西会是什么样子都没有直觉。

您有一个对象 Foo。 Foo 是可终结的,并且不再引用程序中的任何变量。 Foo 有一个成员 Bar。 Bar 引用了一个未在其他任何地方引用的对象。因此,对象 Bar 引用是终结器可访问的。

基本上是一个无法通过代码到达的对象,但是可以通过另一个无法通过代码到达的对象到达。

在下面的示例代码中,当 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 实例不再符合终结条件(例如,因为它之前已经终结,然后 "resurrected" 在终结期间),那么 os 将不会终结-可达。

"finalizer-reachable" 状态是关于 指定 可能 在完成期间引用的对象不会过早删除.规范没有说明如何确保这一点。我想 Java 代码(甚至本机代码)不可能确定特定对象是否处于此状态。