< prev index next >

src/java.base/share/classes/java/lang/ref/Reference.java

Print this page
rev 50108 : [mq]: tschatzl_1

@@ -74,25 +74,27 @@
      *
      * Unregistered: Not associated with a queue when created.
      * queue = ReferenceQueue.NULL.
      *
      * The collector only needs to examine the referent field and the
-     * discovered field to determine whether a normal Reference object needs
-     * special treatment.  If the referent is non-null and not known to be
-     * live, then it may need to be discovered for possible later
-     * notification.  But if the discovered field is non-null, then either (1)
-     * it has already been discovered, or (2) it is in the pending list.
+     * discovered field to determine whether a normal (non-FinalReference)
+     * Reference object needs special treatment.  If the referent is non-null
+     * and not known to be live, then it may need to be discovered for
+     * possible later notification.  But if the discovered field is non-null,
+     * then either (1) it has already been discovered, or (2) it is in the
+     * pending list.
      *
-     * FinalReference differs from other references, because a FinalReference
-     * is not cleared when notified.  The referent being null or not cannot be
-     * used to distinguish between the active state and pending or inactive
-     * states.  However, FinalReferences do not support enqueue().  Instead,
-     * the next field of a FinalReference object is set to the object when it
-     * is added to the pending list, and the use of this as the value of next
-     * in the enqueued and dequeued states maintains the non-active state.  An
-     * additional check that the next field is null is required to determine
-     * that a FinalReference object is active.
+     * FinalReference (which exists to support finalization, which was
+     * deprecated in JDK 9) differs from normal references, because a
+     * FinalReference is not cleared when notified.  The referent being null
+     * or not cannot be used to distinguish between the active state and
+     * pending or inactive states.  However, FinalReferences do not support
+     * enqueue().  Instead, the next field of a FinalReference object is set
+     * to "this" when it is added to the pending list.  The use of "this"
+     * as the value of next in the enqueued and dequeued states maintains the
+     * non-active state.  An additional check that the next field is null is
+     * required to determine that a FinalReference object is active.
      *
      * Initial states:
      *   active/registered
      *   active/unregistered [1]
      *
< prev index next >