@InterfaceAudience.Private public interface MemStoreLAB
The MemStoreLAB is basically a bump-the-pointer allocator that allocates big (2MB) chunks from and then doles it out to threads that request slices into the array.
The purpose of this is to combat heap fragmentation in the regionserver. By ensuring that all KeyValues in a given memstore refer only to large chunks of contiguous memory, we ensure that large blocks get freed up when the memstore is flushed.
Without the MSLAB, the byte array allocated during insertion end up interleaved throughout the heap, and the old generation gets progressively more fragmented until a stop-the-world compacting collection occurs.
Modifier and Type | Method and Description |
---|---|
ByteRange |
allocateBytes(int size)
Allocate a slice of the given length.
|
void |
close()
Close instance since it won't be used any more, try to put the chunks back to pool
|
void |
decScannerCount()
Called when closing a scanner on the data of this MemStoreLAB
|
void |
incScannerCount()
Called when opening a scanner on the data of this MemStoreLAB
|
ByteRange allocateBytes(int size)
size
- ByteRange
void close()
void incScannerCount()
void decScannerCount()
Copyright © 2007-2016 The Apache Software Foundation. All Rights Reserved.