Class Reference<T>
- java.lang.Object
-
- java.lang.ref.Reference<T>
-
- Direct Known Subclasses:
FinalizerReference,PhantomReference,SoftReference,WeakReference
public abstract class Reference<T> extends Object
Provides an abstract class which describes behavior common to all reference objects. It is not possible to create immediate subclasses ofReferencein addition to the ones provided by this package. It is also not desirable to do so, since references require very close cooperation with the system's garbage collector. The existing, specialized reference classes should be used instead.Three different type of references exist, each being weaker than the preceding one:
SoftReference,WeakReference, andPhantomReference. "Weakness" here means that less restrictions are being imposed on the garbage collector as to when it is allowed to actually garbage-collect the referenced object.In order to use reference objects properly it is important to understand the different types of reachability that trigger their clearing and enqueueing. The following table lists these, from strongest to weakest. For each row, an object is said to have the reachability on the left side if (and only if) it fulfills all of the requirements on the right side. In all rows, consider the root set to be a set of references that are "resistant" to garbage collection (that is, running threads, method parameters, local variables, static fields and the like).
Strongly reachable - There exists at least one path from the root set to the object that does not traverse any
instance of a
java.lang.ref.Referencesubclass.
Softly reachable - The object is not strongly reachable.
- There exists at least one path from the root set to the object that does traverse
a
java.lang.ref.SoftReferenceinstance, but nojava.lang.ref.WeakReferenceorjava.lang.ref.PhantomReferenceinstances.
Weakly reachable - The object is neither strongly nor softly reachable.
- There exists at least one path from the root set to the object that does traverse a
java.lang.ref.WeakReferenceinstance, but nojava.lang.ref.PhantomReferenceinstances.
Phantom-reachable - The object is neither strongly, softly, nor weakly reachable.
- The object is referenced by a
java.lang.ref.PhantomReferenceinstance. - The object has already been finalized.
-
-
Field Summary
Fields Modifier and Type Field Description Reference<?>pendingNextUsed internally by the VM.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()Makes the referentnull.booleanenqueue()Forces the reference object to be enqueued if it has been associated with a queue.booleanenqueueInternal()Adds an object to its reference queue.Tget()Returns the referent of the reference object.booleanisEnqueued()Checks whether the reference object has been enqueued.
-
-
-
Field Detail
-
pendingNext
public volatile Reference<?> pendingNext
Used internally by the VM. This field forms a circular and singly linked list of reference objects discovered by the garbage collector and awaiting processing by the reference queue thread.
-
-
Method Detail
-
clear
public void clear()
Makes the referentnull. This does not force the reference object to be enqueued.
-
enqueueInternal
public final boolean enqueueInternal()
Adds an object to its reference queue.- Returns:
trueif this call has caused theReferenceto become enqueued, orfalseotherwise
-
enqueue
public boolean enqueue()
Forces the reference object to be enqueued if it has been associated with a queue.- Returns:
trueif this call has caused theReferenceto become enqueued, orfalseotherwise
-
get
public T get()
Returns the referent of the reference object.- Returns:
- the referent to which reference refers, or
nullif the object has been cleared.
-
isEnqueued
public boolean isEnqueued()
Checks whether the reference object has been enqueued.- Returns:
trueif theReferencehas been enqueued,falseotherwise
-
-