Package org.apache.lucene.util

# Class RecyclingByteBlockAllocator

java.lang.Object
org.apache.lucene.util.ByteBlockPool.Allocator
org.apache.lucene.util.RecyclingByteBlockAllocator

public final class RecyclingByteBlockAllocator extends ByteBlockPool.Allocator
A `ByteBlockPool.Allocator` implementation that recycles unused byte blocks in a buffer and reuses them in subsequent calls to `getByteBlock()`.

Note: This class is not thread-safe

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final int`
  `DEFAULT_BUFFERED_BLOCKS`

  ### Fields inherited from class org.apache.lucene.util.ByteBlockPool.Allocator

  `blockSize`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `RecyclingByteBlockAllocator()`
  Creates a new `RecyclingByteBlockAllocator` with a block size of `ByteBlockPool.BYTE_BLOCK_SIZE`, upper buffered docs limit of `DEFAULT_BUFFERED_BLOCKS` (64).
  `RecyclingByteBlockAllocator(int maxBufferedBlocks)`
  Creates a new `RecyclingByteBlockAllocator`.
  `RecyclingByteBlockAllocator(int maxBufferedBlocks, Counter bytesUsed)`
  Creates a new `RecyclingByteBlockAllocator`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `long`
  `bytesUsed()`
  `int`
  `freeBlocks(int num)`
  Removes the given number of byte blocks from the buffer if possible.
  `byte[]`
  `getByteBlock()`
  `int`
  `maxBufferedBlocks()`
  `int`
  `numBufferedBlocks()`
  `void`
  `recycleByteBlocks(byte[][] blocks, int start, int end)`

  ### Methods inherited from class java.lang.Object

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

- ## Field Details

  - ### DEFAULT_BUFFERED_BLOCKS

    public static final int DEFAULT_BUFFERED_BLOCKS
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### RecyclingByteBlockAllocator

    public RecyclingByteBlockAllocator(int maxBufferedBlocks, Counter bytesUsed)
    Creates a new `RecyclingByteBlockAllocator`
    Parameters:
      `maxBufferedBlocks` - maximum number of buffered byte block
      `bytesUsed` - `Counter` reference counting internally allocated bytes

  - ### RecyclingByteBlockAllocator

    public RecyclingByteBlockAllocator(int maxBufferedBlocks)
    Creates a new `RecyclingByteBlockAllocator`.
    Parameters:
      `maxBufferedBlocks` - maximum number of buffered byte block

  - ### RecyclingByteBlockAllocator

    public RecyclingByteBlockAllocator()
    Creates a new `RecyclingByteBlockAllocator` with a block size of `ByteBlockPool.BYTE_BLOCK_SIZE`, upper buffered docs limit of `DEFAULT_BUFFERED_BLOCKS` (64).

- ## Method Details

  - ### getByteBlock

    public byte[] getByteBlock()
    Overrides:
      `getByteBlock` in class `ByteBlockPool.Allocator`

  - ### recycleByteBlocks

    public void recycleByteBlocks(byte[][] blocks, int start, int end)
    Specified by:
      `recycleByteBlocks` in class `ByteBlockPool.Allocator`

  - ### numBufferedBlocks

    public int numBufferedBlocks()
    Returns:
      the number of currently buffered blocks

  - ### bytesUsed

    public long bytesUsed()
    Returns:
      the number of bytes currently allocated by this `ByteBlockPool.Allocator`

  - ### maxBufferedBlocks

    public int maxBufferedBlocks()
    Returns:
      the maximum number of buffered byte blocks

  - ### freeBlocks

    public int freeBlocks(int num)
    Removes the given number of byte blocks from the buffer if possible.
    Parameters:
      `num` - the number of byte blocks to remove
    Returns:
      the number of actually removed buffers