Class ReferenceCountedPooled

  • All Implemented Interfaces:
    PooledByteBuffer, java.io.Closeable, java.lang.AutoCloseable

    public class ReferenceCountedPooled
    extends java.lang.Object
    implements PooledByteBuffer
    A reference counted pooled implementation, that basically consists of a main buffer, that can be sliced off into smaller buffers, and the underlying buffer will not be freed until all the slices and the main buffer itself have also been freed. This also supports the notion of un-freeing the main buffer. Basically this allows the buffer be re-used, so if only a small slice of the buffer was used for read operations the main buffer can potentially be re-used. This prevents buffer exhaustion attacks where content is sent in many small packets, and you end up allocating a large number of buffers to hold a small amount of data.
    Author:
    Stuart Douglas
    • Method Detail

      • close

        public void close()
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in interface PooledByteBuffer
      • isFreed

        public boolean isFreed()
      • tryUnfree

        public boolean tryUnfree()
      • getBuffer

        public java.nio.ByteBuffer getBuffer()
                                      throws java.lang.IllegalStateException
        Specified by:
        getBuffer in interface PooledByteBuffer
        Throws:
        java.lang.IllegalStateException
      • increaseReferenceCount

        public void increaseReferenceCount()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object