对象是什么意思"终结者可达"在Java中?

时间:2017-01-08 02:54:58

标签: java finalizer

我正在阅读Java 8规范,我看到终结器可达的定义:

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

代码中会出现什么样的情况?我不会对这样的事情有直觉。

2 个答案:

答案 0 :(得分:2)

在下面的示例代码中,当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将不会终结可达的。

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

答案 1 :(得分:0)

你有一个对象Foo。 Foo是可终结的,并且在程序中的任何变量中都没有引用。 Foo有一名成员Bar。 Bar引用未在其他任何位置引用的对象。对象Bar引用因此终结器可达。

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