Class BufferRecycler

java.lang.Object
com.fasterxml.jackson.core.util.BufferRecycler
All Implemented Interfaces:
RecyclerPool.WithPool<BufferRecycler>

public class BufferRecycler extends Object implements RecyclerPool.WithPool<BufferRecycler>
This is a small utility class, whose main functionality is to allow simple reuse of raw byte/char buffers. It is usually allocated through RecyclerPool (starting with 2.16): multiple pool implementations exists. The default pool implementation uses ThreadLocal combined with SoftReference. The end result is a low-overhead GC-cleanable recycling: hopefully ideal for use by stream readers.

Rewritten in 2.10 to be thread-safe (see [jackson-core#479] for details), to not rely on ThreadLocal access.
Rewritten in 2.16 to work with RecyclerPool abstraction.

  • Field Details

    • BYTE_READ_IO_BUFFER

      public static final int BYTE_READ_IO_BUFFER
      Buffer used for reading byte-based input.
      See Also:
    • BYTE_WRITE_ENCODING_BUFFER

      public static final int BYTE_WRITE_ENCODING_BUFFER
      Buffer used for temporarily storing encoded content; used for example by UTF-8 encoding writer
      See Also:
    • BYTE_WRITE_CONCAT_BUFFER

      public static final int BYTE_WRITE_CONCAT_BUFFER
      Buffer used for temporarily concatenating output; used for example when requesting output as byte array.
      See Also:
    • BYTE_BASE64_CODEC_BUFFER

      public static final int BYTE_BASE64_CODEC_BUFFER
      Buffer used for concatenating binary data that is either being encoded as base64 output, or decoded from base64 input.
      Since:
      2.1
      See Also:
    • CHAR_TOKEN_BUFFER

      public static final int CHAR_TOKEN_BUFFER
      Buffer used as input buffer for tokenization for character-based parsers.
      See Also:
    • CHAR_CONCAT_BUFFER

      public static final int CHAR_CONCAT_BUFFER
      Buffer used by generators; for byte-backed generators for buffering of String values to output (before encoding into UTF-8), and for char-backed generators as actual concatenation buffer.
      See Also:
    • CHAR_TEXT_BUFFER

      public static final int CHAR_TEXT_BUFFER
      Used through TextBuffer: directly by parsers (to concatenate String values) and indirectly via SegmentedStringWriter when serializing (databind level ObjectMapper and ObjectWriter). In both cases used as segments (and not for whole value), but may result in retention of larger chunks for big content (long text values during parsing; bigger output documents for generation).
      See Also:
    • CHAR_NAME_COPY_BUFFER

      public static final int CHAR_NAME_COPY_BUFFER
      For parsers, temporary buffer into which char[] for names is copied when requested as such; for WriterBasedGenerator used for buffering during writeString(Reader) operation (not commonly used).
      See Also:
    • _byteBuffers

      protected final AtomicReferenceArray<byte[]> _byteBuffers
    • _charBuffers

      protected final AtomicReferenceArray<char[]> _charBuffers
  • Constructor Details

    • BufferRecycler

      public BufferRecycler()
      Default constructor used for creating instances of this default implementation.
    • BufferRecycler

      protected BufferRecycler(int bbCount, int cbCount)
      Alternate constructor to be used by sub-classes, to allow customization of number of low-level buffers in use.
      Parameters:
      bbCount - Number of byte[] buffers to allocate
      cbCount - Number of char[] buffers to allocate
      Since:
      2.4
  • Method Details

    • allocByteBuffer

      public final byte[] allocByteBuffer(int ix)
      Parameters:
      ix - One of READ_IO_BUFFER constants.
      Returns:
      Buffer allocated (possibly recycled)
    • allocByteBuffer

      public byte[] allocByteBuffer(int ix, int minSize)
    • releaseByteBuffer

      public void releaseByteBuffer(int ix, byte[] buffer)
    • allocCharBuffer

      public final char[] allocCharBuffer(int ix)
    • allocCharBuffer

      public char[] allocCharBuffer(int ix, int minSize)
    • releaseCharBuffer

      public void releaseCharBuffer(int ix, char[] buffer)
    • byteBufferLength

      protected int byteBufferLength(int ix)
    • charBufferLength

      protected int charBufferLength(int ix)
    • balloc

      protected byte[] balloc(int size)
    • calloc

      protected char[] calloc(int size)
    • withPool

      public BufferRecycler withPool(RecyclerPool<BufferRecycler> pool)
      Method called by owner of this recycler instance, to provide reference to RecyclerPool into which instance is to be released (if any)
      Specified by:
      withPool in interface RecyclerPool.WithPool<BufferRecycler>
      Parameters:
      pool - Pool that "owns" pooled item
      Returns:
      This item (for call chaining)
      Since:
      2.16
    • releaseToPool

      public void releaseToPool()
      Method called when owner of this recycler no longer wishes use it; this should return it to pool passed via withPool() (if any).
      Specified by:
      releaseToPool in interface RecyclerPool.WithPool<BufferRecycler>
      Since:
      2.16