Package jnr.ffi.util.ref
Class FinalizableReferenceQueue
- java.lang.Object
-
- jnr.ffi.util.ref.FinalizableReferenceQueue
-
public class FinalizableReferenceQueue extends java.lang.ObjectA reference queue with an associated background thread that dequeues references and invokesFinalizableReference.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.- Since:
- 2.0 (imported from Google Collections Library)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classFinalizableReferenceQueue.DecoupledLoaderTry to load Finalizer in its own class loader.(package private) static classFinalizableReferenceQueue.DirectLoaderLoads Finalizer directly using the current class loader.(package private) static interfaceFinalizableReferenceQueue.FinalizerLoaderLoads Finalizer.class.(package private) static classFinalizableReferenceQueue.SystemLoaderTries to load Finalizer from the system class loader.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.StringFINALIZER_CLASS_NAMEprivate static java.util.Map<FinalizableReferenceQueue,java.lang.Boolean>finalizerQueuesprivate static java.util.logging.Loggerlogger(package private) java.lang.ref.ReferenceQueue<java.lang.Object>queueThe actual reference queue that our background thread will poll.private static java.lang.reflect.MethodstartFinalizerReference to Finalizer.startFinalizer().(package private) booleanthreadStartedWhether or not the background thread started successfully.
-
Constructor Summary
Constructors Constructor Description FinalizableReferenceQueue()Constructs a new queue.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) voidcleanUp()Repeatedly dequeues references from the queue and invokesFinalizableReference.finalizeReferent()on them until the queue is empty.static voidcleanUpAll()(package private) static java.lang.reflect.MethodgetStartFinalizer(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 voidpollReferenceQueue()
-
-
-
Field Detail
-
logger
private static final java.util.logging.Logger logger
-
FINALIZER_CLASS_NAME
private static final java.lang.String FINALIZER_CLASS_NAME
- See Also:
- Constant Field Values
-
startFinalizer
private static final java.lang.reflect.Method startFinalizer
Reference to Finalizer.startFinalizer().
-
finalizerQueues
private static final java.util.Map<FinalizableReferenceQueue,java.lang.Boolean> finalizerQueues
-
queue
final java.lang.ref.ReferenceQueue<java.lang.Object> queue
The actual reference queue that our background thread will poll.
-
threadStarted
final boolean threadStarted
Whether or not the background thread started successfully.
-
-
Method Detail
-
cleanUp
void cleanUp()
Repeatedly dequeues references from the queue and invokesFinalizableReference.finalizeReferent()on them until the queue is empty. This method is a no-op if the background thread was created successfully.
-
pollReferenceQueue
private void pollReferenceQueue()
-
loadFinalizer
private static java.lang.Class<?> loadFinalizer(FinalizableReferenceQueue.FinalizerLoader... loaders)
Iterates through the given loaders until it finds one that can load Finalizer.- Returns:
- Finalizer.class
-
getStartFinalizer
static java.lang.reflect.Method getStartFinalizer(java.lang.Class<?> finalizer)
Looks up Finalizer.startFinalizer().
-
cleanUpAll
public static void cleanUpAll()
-
-