Class CachingBufferPool

java.lang.Object
org.xerial.snappy.pool.CachingBufferPool
All Implemented Interfaces:
BufferPool

public final class CachingBufferPool extends Object implements BufferPool
A BufferPool implementation which caches values at fixed sizes.

Pooled instances are held as SoftReference to allow GC if necessary.

The current fixed sizes are calculated as follows:

  • Values invalid input: '<' 4KB return 4KB
  • 4KB - 32KB to 2KB
  • 32KB - 512KB to 16KB
  • 512KB - 2MB to 128KB
  • 2MB - 16MB to 512KB
  • 16MB - 128MB to 4MB
  • 128MB - 512MB to 16MB
  • 512MB - 1.5 GB to 128MB
  • Values > 1.5GB return Integer.MAX_VALUE

Author:
Brett Okken
  • Method Details

    • getInstance

      public static BufferPool getInstance()
      Returns instance of CachingBufferPool for using cached buffers.
      Returns:
      instance of CachingBufferPool for using cached buffers.
    • allocateArray

      public byte[] allocateArray(int size)
      Returns a byte[] of size or greater length.
      Specified by:
      allocateArray in interface BufferPool
      Parameters:
      size - The minimum size array required. Must be >= 0.
      Returns:
      A byte[] with length of at least size.
      See Also:
    • releaseArray

      public void releaseArray(byte[] buffer)
      Returns instance to pool for potential future reuse.

      Must not be returned more than 1 time. Must not be used by caller after return.

      Specified by:
      releaseArray in interface BufferPool
      Parameters:
      buffer - Instance to return to pool. Must not be null. Must not be returned more than 1 time. Must not be used by caller after return.
    • allocateDirect

      public ByteBuffer allocateDirect(int size)
      Returns a direct ByteBuffer of size or greater capacity.
      Specified by:
      allocateDirect in interface BufferPool
      Parameters:
      size - The minimum size buffer required. Must be >= 0.
      Returns:
      A ByteBuffer of size or greater capacity.
      See Also:
    • releaseDirect

      public void releaseDirect(ByteBuffer buffer)
      Returns instance to pool for potential future reuse.

      Must not be returned more than 1 time. Must not be used by caller after return.

      Specified by:
      releaseDirect in interface BufferPool
      Parameters:
      buffer - Instance to return to pool. Must not be null. Must not be returned more than 1 time. Must not be used by caller after return.
    • toString

      public String toString()
      Overrides:
      toString in class Object