簡體   English   中英

在Java中,對象“最終可實現”是什么意思?

[英]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.

這在代碼中會是什么樣? 我對這樣的東西甚至是什么樣子都沒有直覺。

在下面的示例代碼中,當Example變得不可訪問時, os引用的對象將是finalizer-reachable的。

  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將無法到達終結器。

“ finalizer-reachable”狀態是關於指定在完成過程中可能不會引用的對象不會過早刪除。 該規范未說明應如何確保這一點。 我想象Java代碼(甚至本地代碼)無法確定特定對象是否處於此狀態。

您有一個對象Foo。 Foo是可終結的,並且在程序中的任何變量中都沒有引用。 Foo有一個會員Bar。 條形圖引用了在其他任何地方均未引用的對象。 因此,Bar引用的對象可到達終結器。

基本上,它是一個不再可以通過代碼訪問的對象,但是可以通過另一個無法通過代碼訪問的對象來訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM