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