Class NexusAccessor

java.lang.Object
net.bytebuddy.dynamic.NexusAccessor

@Enhance public class NexusAccessor extends Object
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.
  • Field Details

  • Constructor Details

    • NexusAccessor

      public NexusAccessor()
      Creates a new accessor for the Nexus without any active management of stale references within a nexus.
    • NexusAccessor

      public NexusAccessor(@MaybeNull ReferenceQueue<? super ClassLoader> referenceQueue)
      Creates a new accessor for a Nexus where any GC eligible are enqueued to the supplied reference queue. Any such enqueued reference can be explicitly removed from the nexus via the clean(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 or null if no reference queue should be notified.
  • Method Details

    • doPrivileged

      @Enhance private static <T> T doPrivileged(PrivilegedAction<T> action)
      A proxy for java.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 this NexusAccessor is capable of registering loaded type initializers.
      Returns:
      true if this accessor is alive.
    • clean

      public static void clean(Reference<? extends ClassLoader> reference)
      Removes a stale entries that are registered in the Nexus. 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 the NexusAccessor.
    • register

      public void register(String name, @MaybeNull ClassLoader classLoader, int identification, LoadedTypeInitializer loadedTypeInitializer)
      Registers a loaded type initializer in Byte Buddy's Nexus which is injected into the system class loader.
      Parameters:
      name - The binary name of the class.
      classLoader - The class's class loader.
      identification - The id used for identifying the loaded type initializer that was added to the Nexus.
      loadedTypeInitializer - The loaded type initializer to make available via the Nexus.