public final class ByteBlockPool extends Object implements Accountable
| Modifier and Type | Class and Description | 
|---|---|
static class  | 
ByteBlockPool.Allocator
Abstract class for allocating and freeing byte
  blocks. 
 | 
static class  | 
ByteBlockPool.DirectAllocator
A simple  
ByteBlockPool.Allocator that never recycles. | 
static class  | 
ByteBlockPool.DirectTrackingAllocator
A simple  
ByteBlockPool.Allocator that never recycles, but
  tracks how much total RAM is in use. | 
| Modifier and Type | Field and Description | 
|---|---|
byte[] | 
buffer
Current head buffer 
 | 
byte[][] | 
buffers
array of buffers currently used in the pool. 
 | 
static int | 
BYTE_BLOCK_MASK  | 
static int | 
BYTE_BLOCK_SHIFT  | 
static int | 
BYTE_BLOCK_SIZE  | 
int | 
byteOffset
Current head offset 
 | 
int | 
byteUpto
Where we are in head buffer 
 | 
static int | 
FIRST_LEVEL_SIZE
The first level size for new slices 
 | 
static int[] | 
LEVEL_SIZE_ARRAY
An array holding the level sizes for byte slices. 
 | 
static int[] | 
NEXT_LEVEL_ARRAY
An array holding the offset into the  
LEVEL_SIZE_ARRAY
 to quickly navigate to the next slice level. | 
NULL_ACCOUNTABLE| Constructor and Description | 
|---|
ByteBlockPool(ByteBlockPool.Allocator allocator)  | 
| Modifier and Type | Method and Description | 
|---|---|
int | 
allocSlice(byte[] slice,
          int upto)
Creates a new byte slice with the given starting size and 
 returns the slices offset in the pool. 
 | 
void | 
append(BytesRef bytes)
Appends the bytes in the provided  
BytesRef at
 the current position. | 
int | 
newSlice(int size)
Allocates a new slice with the given size. 
 | 
void | 
nextBuffer()
Advances the pool to its next buffer. 
 | 
long | 
ramBytesUsed()
Return the memory usage of this object in bytes. 
 | 
byte | 
readByte(long offset)
Read a single byte at the given  
offset. | 
void | 
readBytes(long offset,
         byte[] bytes,
         int bytesOffset,
         int bytesLength)
Reads bytes out of the pool starting at the given offset with the given  
 length into the given byte array at offset off. 
 | 
void | 
reset()
Resets the pool to its initial state reusing the first buffer and fills all
 buffers with 0 bytes before they reused or passed to
  
ByteBlockPool.Allocator.recycleByteBlocks(byte[][], int, int). | 
void | 
reset(boolean zeroFillBuffers,
     boolean reuseFirst)
Expert: Resets the pool to its initial state reusing the first buffer. 
 | 
void | 
setBytesRef(BytesRef term,
           int textStart)  | 
void | 
setRawBytesRef(BytesRef ref,
              long offset)
 | 
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetChildResourcespublic static final int BYTE_BLOCK_SHIFT
public static final int BYTE_BLOCK_SIZE
public static final int BYTE_BLOCK_MASK
public byte[][] buffers
public int byteUpto
public byte[] buffer
public int byteOffset
public static final int[] NEXT_LEVEL_ARRAY
LEVEL_SIZE_ARRAY
 to quickly navigate to the next slice level.public static final int[] LEVEL_SIZE_ARRAY
public static final int FIRST_LEVEL_SIZE
newSlice(int)public ByteBlockPool(ByteBlockPool.Allocator allocator)
public void reset()
ByteBlockPool.Allocator.recycleByteBlocks(byte[][], int, int). Calling
 nextBuffer() is not needed after reset.public void reset(boolean zeroFillBuffers,
                  boolean reuseFirst)
nextBuffer() is not needed after reset.zeroFillBuffers - if true the buffers are filled with 0. 
        This should be set to true if this pool is used with slices.reuseFirst - if true the first buffer will be reused and calling
        nextBuffer() is not needed after reset iff the 
        block pool was used before ie. nextBuffer() was called before.public void nextBuffer()
reset() call will advance the pool to
 its first buffer immediately.public int newSlice(int size)
FIRST_LEVEL_SIZEpublic int allocSlice(byte[] slice,
                      int upto)
public void setBytesRef(BytesRef term, int textStart)
public void append(BytesRef bytes)
BytesRef at
 the current position.public void readBytes(long offset,
                      byte[] bytes,
                      int bytesOffset,
                      int bytesLength)
Note: this method allows to copy across block boundaries.
public void setRawBytesRef(BytesRef ref, long offset)
BytesRef so that its content is equal to the
 ref.length bytes starting at offset. Most of the time this
 method will set pointers to internal data-structures. However, in case a
 value crosses a boundary, a fresh copy will be returned.
 On the contrary to setBytesRef(BytesRef, int), this does not
 expect the length to be encoded with the data.public byte readByte(long offset)
offset.public long ramBytesUsed()
AccountableramBytesUsed in interface AccountableCopyright © 2000-2021 Apache Software Foundation. All Rights Reserved.