Class ArrayByteBufferPool

java.lang.Object
org.eclipse.jetty.io.ArrayByteBufferPool
All Implemented Interfaces:
ByteBufferPool, Dumpable
Direct Known Subclasses:
LogarithmicArrayByteBufferPool

@ManagedObject public class ArrayByteBufferPool extends Object implements Dumpable

A ByteBuffer pool where ByteBuffers are held in queues that are held in array elements.

Given a capacity factor of 4096, the first array element holds a bucket of ByteBuffers each of capacity 4096, the second array element holds a bucket of ByteBuffers each of capacity 8192, and so on.

The maxHeapMemory and maxDirectMemory default heuristic is to use Runtime.maxMemory() divided by 4.

  • Field Details

  • Constructor Details

    • ArrayByteBufferPool

      public ArrayByteBufferPool()
      Creates a new ArrayByteBufferPool with a default configuration. Both maxHeapMemory and maxDirectMemory default to 0 to use default heuristic.
    • ArrayByteBufferPool

      public ArrayByteBufferPool(int minCapacity, int factor, int maxCapacity)
      Creates a new ArrayByteBufferPool with the given configuration. Both maxHeapMemory and maxDirectMemory default to 0 to use default heuristic.
      Parameters:
      minCapacity - the minimum ByteBuffer capacity
      factor - the capacity factor
      maxCapacity - the maximum ByteBuffer capacity
    • ArrayByteBufferPool

      public ArrayByteBufferPool(int minCapacity, int factor, int maxCapacity, int maxQueueLength)
      Creates a new ArrayByteBufferPool with the given configuration. Both maxHeapMemory and maxDirectMemory default to 0 to use default heuristic.
      Parameters:
      minCapacity - the minimum ByteBuffer capacity
      factor - the capacity factor
      maxCapacity - the maximum ByteBuffer capacity
      maxQueueLength - the maximum ByteBuffer queue length
    • ArrayByteBufferPool

      public ArrayByteBufferPool(int minCapacity, int factor, int maxCapacity, int maxBucketSize, long maxHeapMemory, long maxDirectMemory)
      Creates a new ArrayByteBufferPool with the given configuration.
      Parameters:
      minCapacity - the minimum ByteBuffer capacity
      factor - the capacity factor
      maxCapacity - the maximum ByteBuffer capacity
      maxBucketSize - the maximum ByteBuffer queue length in a AbstractByteBufferPool.Bucket
      maxHeapMemory - the max heap memory in bytes, -1 for unlimited memory or 0 to use default heuristic
      maxDirectMemory - the max direct memory in bytes, -1 for unlimited memory or 0 to use default heuristic
    • ArrayByteBufferPool

      public ArrayByteBufferPool(int minCapacity, int factor, int maxCapacity, int maxBucketSize, long maxHeapMemory, long maxDirectMemory, long retainedHeapMemory, long retainedDirectMemory)
      Creates a new ArrayByteBufferPool with the given configuration.
      Parameters:
      minCapacity - the minimum ByteBuffer capacity
      factor - the capacity factor
      maxCapacity - the maximum ByteBuffer capacity
      maxBucketSize - the maximum ByteBuffer queue length in a AbstractByteBufferPool.Bucket
      maxHeapMemory - the max heap memory in bytes, -1 for unlimited memory or 0 to use default heuristic
      maxDirectMemory - the max direct memory in bytes, -1 for unlimited memory or 0 to use default heuristic
      retainedHeapMemory - the max heap memory in bytes, -2 for no retained memory, -1 for unlimited retained memory or 0 to use default heuristic
      retainedDirectMemory - the max direct memory in bytes, -2 for no retained memory, -1 for unlimited retained memory or 0 to use default heuristic
  • Method Details

    • newRetainableByteBufferPool

      protected RetainableByteBufferPool newRetainableByteBufferPool(int factor, int maxCapacity, int maxBucketSize, long retainedHeapMemory, long retainedDirectMemory)
    • acquire

      public ByteBuffer acquire(int size, boolean direct)
      Description copied from interface: ByteBufferPool

      Requests a ByteBuffer of the given size.

      The returned buffer may have a bigger capacity than the size being requested.

      Specified by:
      acquire in interface ByteBufferPool
      Parameters:
      size - the size of the buffer
      direct - whether the buffer must be direct or not
      Returns:
      a buffer with at least the requested capacity, with position and limit set to 0.
      See Also:
    • release

      public void release(ByteBuffer buffer)
      Description copied from interface: ByteBufferPool

      Returns a ByteBuffer, usually obtained with ByteBufferPool.acquire(int, boolean) (but not necessarily), making it available for recycling and reuse.

      Specified by:
      release in interface ByteBufferPool
      Parameters:
      buffer - the buffer to return
      See Also:
    • clear

      public void clear()
    • releaseMemory

      protected void releaseMemory(boolean direct)
    • bucketFor

      protected int bucketFor(int capacity)
    • capacityFor

      protected int capacityFor(int bucket)
    • bucketFor

      protected org.eclipse.jetty.io.AbstractByteBufferPool.Bucket bucketFor(int capacity, boolean direct)
    • getDirectByteBufferCount

      @ManagedAttribute("The number of pooled direct ByteBuffers") public long getDirectByteBufferCount()
    • getHeapByteBufferCount

      @ManagedAttribute("The number of pooled heap ByteBuffers") public long getHeapByteBufferCount()
    • isDetailedDump

      public boolean isDetailedDump()
    • setDetailedDump

      public void setDetailedDump(boolean detailedDump)
    • dump

      public void dump(Appendable out, String indent) throws IOException
      Description copied from interface: Dumpable
      Dump this object (and children) into an Appendable using the provided indent after any new lines. The indent should not be applied to the first object dumped.
      Specified by:
      dump in interface Dumpable
      Parameters:
      out - The appendable to dump to
      indent - The indent to apply after any new lines.
      Throws:
      IOException - if unable to write to Appendable
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • asRetainableByteBufferPool

      public RetainableByteBufferPool asRetainableByteBufferPool()
      Description copied from interface: ByteBufferPool
      Get this pool as a RetainableByteBufferPool, which supports reference counting of the buffers and possibly a more efficient lookup mechanism based on the Pool class.
      Specified by:
      asRetainableByteBufferPool in interface ByteBufferPool
      Returns:
      This pool as a RetainableByteBufferPool. The same instance is always returned by multiple calls to this method.
    • getCapacityFactor

      protected int getCapacityFactor()
    • getMaxCapacity

      protected int getMaxCapacity()
    • getMaxBucketSize

      protected int getMaxBucketSize()
    • decrementMemory

      @Deprecated protected void decrementMemory(ByteBuffer buffer)
      Deprecated.
    • incrementMemory

      @Deprecated protected void incrementMemory(ByteBuffer buffer)
      Deprecated.
    • releaseExcessMemory

      protected void releaseExcessMemory(boolean direct, Consumer<Boolean> clearFn)
    • getDirectMemory

      @ManagedAttribute("The bytes retained by direct ByteBuffers") public long getDirectMemory()
    • getHeapMemory

      @ManagedAttribute("The bytes retained by heap ByteBuffers") public long getHeapMemory()
    • getMaxDirectMemory

      @ManagedAttribute("The max num of bytes that can be retained from direct ByteBuffers") public long getMaxDirectMemory()
    • getMaxHeapMemory

      @ManagedAttribute("The max num of bytes that can be retained from heap ByteBuffers") public long getMaxHeapMemory()
    • getMemory

      public long getMemory(boolean direct)