Package net.bytebuddy.dynamic
Class NexusAccessor
java.lang.Object
net.bytebuddy.dynamic.NexusAccessor
The Nexus accessor is creating a VM-global singleton
Nexus
such that it can be seen by all class loaders of
a virtual machine. Furthermore, it provides an API to access this global instance.-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final NexusAccessor.Dispatcher
The dispatcher to use.private final ReferenceQueue<? super ClassLoader>
The reference queue that is notified upon a GC eligibleNexus
entry ornull
if no such queue should be notified. -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new accessor for theNexus
without any active management of stale references within a nexus.NexusAccessor
(ReferenceQueue<? super ClassLoader> referenceQueue) Creates a new accessor for aNexus
where any GC eligible are enqueued to the supplied reference queue. -
Method Summary
Modifier and TypeMethodDescriptionstatic void
clean
(Reference<? extends ClassLoader> reference) Removes a stale entries that are registered in theNexus
.private static <T> T
doPrivileged
(PrivilegedAction<T> action) A proxy forjava.security.AccessController#doPrivileged
that is activated if available.static boolean
isAlive()
Checks if thisNexusAccessor
is capable of registering loaded type initializers.void
register
(String name, ClassLoader classLoader, int identification, LoadedTypeInitializer loadedTypeInitializer) Registers a loaded type initializer in Byte Buddy'sNexus
which is injected into the system class loader.
-
Field Details
-
DISPATCHER
The dispatcher to use. -
referenceQueue
@MaybeNull @ValueHandling(REVERSE_NULLABILITY) private final ReferenceQueue<? super ClassLoader> referenceQueueThe reference queue that is notified upon a GC eligibleNexus
entry ornull
if no such queue should be notified.
-
-
Constructor Details
-
NexusAccessor
public NexusAccessor()Creates a new accessor for theNexus
without any active management of stale references within a nexus. -
NexusAccessor
Creates a new accessor for aNexus
where any GC eligible are enqueued to the supplied reference queue. Any such enqueued reference can be explicitly removed from the nexus via theclean(Reference)
method. Nexus entries can become stale if a class loader is garbage collected after a class was loaded but before a class was initialized.- Parameters:
referenceQueue
- The reference queue onto which stale references should be enqueued ornull
if no reference queue should be notified.
-
-
Method Details
-
doPrivileged
A proxy forjava.security.AccessController#doPrivileged
that is activated if available.- Type Parameters:
T
- The type of the action's resolved value.- Parameters:
action
- The action to execute from a privileged context.- Returns:
- The action's resolved value.
-
isAlive
public static boolean isAlive()Checks if thisNexusAccessor
is capable of registering loaded type initializers.- Returns:
true
if this accessor is alive.
-
clean
Removes a stale entries that are registered in theNexus
. Entries can become stale if a class is loaded but never initialized prior to its garbage collection. As all class loaders within a nexus are only referenced weakly, such class loaders are always garbage collected. However, the initialization data stored by Byte Buddy does not become eligible which is why it needs to be cleaned explicitly.- Parameters:
reference
- The reference to remove. References are collected via a reference queue that is supplied to theNexusAccessor
.
-
register
public void register(String name, @MaybeNull ClassLoader classLoader, int identification, LoadedTypeInitializer loadedTypeInitializer) Registers a loaded type initializer in Byte Buddy'sNexus
which is injected into the system class loader.
-