public class FinalizableReferenceQueue
extends java.lang.Object
FinalizableReference.finalizeReferent()
on them.
Keep a strong reference to this object until all of the associated referents have been
finalized. If this object is garbage collected earlier, the backing thread will not invoke finalizeReferent()
on the remaining references.
Modifier and Type | Class and Description |
---|---|
(package private) static class |
FinalizableReferenceQueue.DecoupledLoader
Try to load Finalizer in its own class loader.
|
(package private) static class |
FinalizableReferenceQueue.DirectLoader
Loads Finalizer directly using the current class loader.
|
(package private) static interface |
FinalizableReferenceQueue.FinalizerLoader
Loads Finalizer.class.
|
(package private) static class |
FinalizableReferenceQueue.SystemLoader
Tries to load Finalizer from the system class loader.
|
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
FINALIZER_CLASS_NAME |
private static java.util.Map<FinalizableReferenceQueue,java.lang.Boolean> |
finalizerQueues |
private static java.util.logging.Logger |
logger |
(package private) java.lang.ref.ReferenceQueue<java.lang.Object> |
queue
The actual reference queue that our background thread will poll.
|
private static java.lang.reflect.Method |
startFinalizer
Reference to Finalizer.startFinalizer().
|
(package private) boolean |
threadStarted
Whether or not the background thread started successfully.
|
Constructor and Description |
---|
FinalizableReferenceQueue()
Constructs a new queue.
|
Modifier and Type | Method and Description |
---|---|
(package private) void |
cleanUp()
Repeatedly dequeues references from the queue and invokes
FinalizableReference.finalizeReferent() on them until the queue is empty. |
static void |
cleanUpAll() |
(package private) static java.lang.reflect.Method |
getStartFinalizer(java.lang.Class<?> finalizer)
Looks up Finalizer.startFinalizer().
|
private static java.lang.Class<?> |
loadFinalizer(FinalizableReferenceQueue.FinalizerLoader... loaders)
Iterates through the given loaders until it finds one that can load Finalizer.
|
private void |
pollReferenceQueue() |
private static final java.util.logging.Logger logger
private static final java.lang.String FINALIZER_CLASS_NAME
private static final java.lang.reflect.Method startFinalizer
private static final java.util.Map<FinalizableReferenceQueue,java.lang.Boolean> finalizerQueues
final java.lang.ref.ReferenceQueue<java.lang.Object> queue
final boolean threadStarted
public FinalizableReferenceQueue()
void cleanUp()
FinalizableReference.finalizeReferent()
on them until the queue is empty. This method is a
no-op if the background thread was created successfully.private void pollReferenceQueue()
private static java.lang.Class<?> loadFinalizer(FinalizableReferenceQueue.FinalizerLoader... loaders)
static java.lang.reflect.Method getStartFinalizer(java.lang.Class<?> finalizer)
public static void cleanUpAll()