Class CleanerJava24Linker

java.lang.Object
io.netty.util.internal.CleanerJava24Linker
All Implemented Interfaces:
Cleaner

public class CleanerJava24Linker extends java.lang.Object implements Cleaner
Allocates direct buffers with malloc and free from libc, linked through the Foreign Function & Memory API.

The FFM API is compiled against the netty-ffm-stub module. It and the signature-polymorphic MethodHandle calls are only used from the nested classes, which are only loaded on Java versions that have the FFM API, so this class still loads and verifies where it is missing (e.g. Android).

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    private static final class 
     
    private static final class 
    Links malloc and free on first use rather than when PlatformDependent is initialized, because creating the downcall handles is a startup cost for applications that may never allocate a direct buffer.
    private static final class 
    Checks that native access is enabled for this module, and that this platform has a 64-bit native linker that finds malloc and free.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final InternalLogger
     
    private static final boolean
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    allocate(int capacity)
    Create a direct ByteBuffer and return it alongside its cleaning mechanism, in a CleanableDirectBuffer.
    (package private) static void
    free(long memoryAddress)
     
    void
    freeDirectBuffer(java.nio.ByteBuffer buffer)
    Free a direct ByteBuffer if possible
    boolean
    Check if the clean operation is "relatively expensive".
    (package private) static boolean
     
    (package private) static long
    malloc(int capacity)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface Cleaner

    reallocate
  • Field Details

    • logger

      private static final InternalLogger logger
    • SUPPORTED

      private static final boolean SUPPORTED
  • Constructor Details

    • CleanerJava24Linker

      public CleanerJava24Linker()
  • Method Details

    • isSupported

      static boolean isSupported()
    • allocate

      public CleanableDirectBuffer allocate(int capacity)
      Description copied from interface: Cleaner
      Create a direct ByteBuffer and return it alongside its cleaning mechanism, in a CleanableDirectBuffer.
      Specified by:
      allocate in interface Cleaner
      Parameters:
      capacity - The desired capacity of the direct buffer.
      Returns:
      The new CleanableDirectBuffer instance.
    • freeDirectBuffer

      public void freeDirectBuffer(java.nio.ByteBuffer buffer)
      Description copied from interface: Cleaner
      Free a direct ByteBuffer if possible
      Specified by:
      freeDirectBuffer in interface Cleaner
    • hasExpensiveClean

      public boolean hasExpensiveClean()
      Description copied from interface: Cleaner
      Check if the clean operation is "relatively expensive". Expensive clean operations are fine for pooling allocators, but should be avoided for unpooled buffers.
      Specified by:
      hasExpensiveClean in interface Cleaner
      Returns:
      true if this Cleaner has an expensive clean (i.e. CleanableDirectBuffer.clean()) operation.
    • malloc

      static long malloc(int capacity)
    • free

      static void free(long memoryAddress)