在 Java 中"finalizer-reachable"对象意味着什么?



我正在阅读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 引用是可访问的终结器。

基本上它是一个无法再通过代码访问的对象,但可以通过另一个无法通过代码访问的对象访问。

最新更新