Class Reference<T>
- Type Parameters:
T- the type of the referent
- Direct Known Subclasses:
PhantomReference, SoftReference, WeakReference
- Since:
- 1.2
-
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Clears this reference object.protected Objectclone()ThrowsCloneNotSupportedException.booleanenqueue()Clears this reference object, then attempts to add it to the queue with which it is registered, if any.get()Returns this reference object's referent.booleanDeprecated.This method was originally specified to test if a reference object has been cleared and enqueued but was never implemented to do this test.static voidreachabilityFence(Object ref) Ensures that the given object remains strongly reachable.final booleanTests if the referent of this reference object isobj.
-
Method Details
-
get
Returns this reference object's referent. If this reference object has been cleared, either by the program or by the garbage collector, then this method returnsnull.- Returns:
- The object to which this reference refers, or
nullif this reference object has been cleared - See Also:
-
refersTo
Tests if the referent of this reference object isobj. Using anullobjreturnstrueif the reference object has been cleared.- Parameters:
obj- the object to compare with this reference object's referent- Returns:
trueifobjis the referent of this reference object- Since:
- 16
-
clear
public void clear()Clears this reference object. Invoking this method does not enqueue this object, and the garbage collector will not clear or enqueue this object.When the garbage collector or the
enqueue()method clear references they do so directly, without invoking this method. -
isEnqueued
Deprecated.This method was originally specified to test if a reference object has been cleared and enqueued but was never implemented to do this test. This method could be misused due to the inherent race condition or without an associatedReferenceQueue. An application relying on this method to release critical resources could cause serious performance issue. An application should useReferenceQueueto reliably determine what reference objects that have been enqueued orrefersTo(null)to determine if this reference object has been cleared.Tests if this reference object is in its associated queue, if any. This method returnstrueonly if all of the following conditions are met:- this reference object was registered with a queue when it was created; and
- the garbage collector has added this reference object to the queue
or
enqueue()is called; and - this reference object is not yet removed from the queue.
false. This method may returnfalseif this reference object has been cleared but not enqueued due to the race condition.- Returns:
trueif and only if this reference object is in its associated queue (if any).
-
enqueue
public boolean enqueue()Clears this reference object, then attempts to add it to the queue with which it is registered, if any.If this reference is registered with a queue but not yet enqueued, the reference is added to the queue; this method is successful and returns true. If this reference is not registered with a queue, or was already enqueued (by the garbage collector, or a previous call to
enqueue), this method is unsuccessful and returns false.Memory consistency effects: Actions in a thread prior to a successful call to
enqueuehappen-before the reference is removed from the queue byReferenceQueue.poll()orReferenceQueue.remove(long). Unsuccessful calls toenqueuehave no specified memory consistency effects.When this method clears references it does so directly, without invoking the
clear()method. When the garbage collector clears and enqueues references it does so directly, without invoking theclear()method or this method.- Returns:
trueif this reference object was successfully enqueued;falseif it was already enqueued or if it was not registered with a queue when it was created
-
clone
ThrowsCloneNotSupportedException. AReferencecannot be meaningfully cloned. Construct a newReferenceinstead.- Overrides:
clonein classObject- Returns:
- never returns normally
- Throws:
CloneNotSupportedException- always- See Also:
-
reachabilityFence
Ensures that the given object remains strongly reachable. This reachability is assured regardless of any optimizing transformations the virtual machine may perform that might otherwise allow the object to become unreachable (see JLS ). Thus, the given object is not reclaimable by garbage collection at least until after the invocation of this method. References to the given object will not be cleared (or enqueued, if applicable) by the garbage collector until after invocation of this method. Invocation of this method does not itself initiate reference processing, garbage collection, or finalization.This method establishes an ordering for strong reachability with respect to garbage collection. It controls relations that are otherwise only implicit in a program -- the reachability conditions triggering garbage collection. This method is applicable only when reclamation may have visible effects, such as for objects that use finalizers or
Cleaner, or code that performs reference processing.Memory consistency effects: Actions in a thread prior to calling
reachabilityFence(x)happen-before the garbage collector clears any reference tox.- Parameters:
ref- the reference to the object to keep strongly reachable. Ifnull, this method has no effect.- Since:
- 9
-