Class IntegerBestFitAllocator
- java.lang.Object
-
- org.terracotta.offheapstore.storage.allocator.IntegerBestFitAllocator
-
-
Field Summary
Fields Modifier and Type Field Description private static intCHUNK_ALIGN_MASKprivate static intCHUNK_OVERHEADprivate static intCINUSE_BITprivate static booleanDEBUGprivate intdesignatedVictimprivate intdesignatedVictimSizeprivate static intFLAG_BITSprivate static intFLAG4_BITprivate static intINUSE_BITSprivate static intMALLOC_ALIGNMENTprivate static intMAX_REQUESTprivate static intMAX_SMALL_REQUESTprivate static intMAX_SMALL_SIZEprivate static intMCHUNK_SIZEprivate static intMIN_CHUNK_SIZEprivate static intMIN_LARGE_SIZEprivate static intMIN_REQUESTprivate static intMINIMAL_SIZEprivate static intNSMALLBINSprivate static intNTREEBINSprivate intoccupiedprivate static intPINUSE_BITprivate static intSIZE_T_BITSIZEprivate static intSIZE_T_SIZEprivate static intSMALLBIN_SHIFTprivate int[]smallBinsprivate intsmallMapprivate OffHeapStorageAreastorageprivate inttopprivate static intTOP_FOOT_OFFSETprivate static intTOP_FOOT_SIZEprivate inttopSizeprivate static intTREEBIN_SHIFTprivate int[]treeBinsprivate inttreeMapprivate static booleanVALIDATING
-
Constructor Summary
Constructors Constructor Description IntegerBestFitAllocator(OffHeapStorageArea storage)Create a best fit allocator backed by the given OffHeapStorageArea.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static intalignOffset(int a)longallocate(long size)private intallocateFromSmallBin(int index, int nb)private intbackward(int p)private voidbackward(int p, int value)private voidcheckAnyChunk(int p)private voidcheckFreeChunk(int p)private voidcheckInUseChunk(int p)private voidcheckMallocedChunk(int mem, int s)private voidcheckSmallBin(int index)private voidcheckTopChunk(int p)private voidcheckTree(int t)private voidcheckTreeBin(int index)private intchild(int p, int index)private voidchild(int p, int index, int value)private booleanchunkInUse(int p)private intchunkSize(int p)private static intchunkToMem(int p)voidclear()private voidclearPreviousInUse(int p)private voidclearSmallMap(int i)private voidclearTreeMap(int i)private voiddlfree(int mem, boolean shrink)private intdlmalloc(int bytes)private java.lang.Stringdump()voidexpand(long increase)private booleanfindFreeChunk(int x)private intforward(int p)private voidforward(int p, int value)voidfree(long address)longgetLastUsedAddress()longgetLastUsedPointer()longgetMaximumAddress()intgetMinimalSize()private inthead(int p)private voidhead(int p, int value)private intindex(int p)private voidindex(int p, int value)private voidinsertChunk(int p, int s)private voidinsertLargeChunk(int x, int s)private voidinsertSmallChunk(int p, int s)private static booleanisAligned(int a)private booleanisInUse(int p)private static booleanisSmall(int s)java.util.Iterator<java.lang.Long>iterator()private static intleftBits(int i)private intleftmostChild(int x)private static intleftShiftForTreeIndex(int i)private voidmarkSmallMap(int i)private voidmarkTreeMap(int i)private static intmemToChunk(int p)private static intminSizeForTreeIndex(int i)private intnextChunk(int p)private booleannextPreviousInUse(int p)longoccupied()private static booleanokAddress(int a)private static booleanokNext(int p, int n)private static intpadRequest(int req)private intparent(int p)private voidparent(int p, int value)private intprevChunk(int p)private intprevFoot(int p)private voidprevFoot(int p, int value)private booleanpreviousInUse(int p)private voidreplaceDesignatedVictim(int p, int s)private voidsetFoot(int p, int s)private voidsetFreeWithPreviousInUse(int p, int s, int n)private voidsetInUseAndPreviousInUse(int p, int s)private voidsetSizeAndPreviousInUseOfFreeChunk(int p, int s)private voidsetSizeAndPreviousInUseOfInUseChunk(int p, int s)private static intsmallBinIndex(int s)private static intsmallBinIndexToSize(int i)private booleansmallMapIsMarked(int i)private intsplitFromDesignatedVictim(int nb)private intsplitFromSmallBin(int index, int nb)private intsplitFromTop(int nb)private intsplitFromTree(int nb)private intsplitSmallFromTree(int nb)java.lang.StringtoString()private inttraverseAndCheck()private static inttreeBinIndex(int s)private booleantreeMapIsMarked(int i)private voidunlinkChunk(int p, int s)private voidunlinkLargeChunk(int x)private voidunlinkSmallChunk(int p, int s)voidvalidateAllocator()Debugging SupportintvalidateMallocedPointer(int m)
-
-
-
Field Detail
-
DEBUG
private static final boolean DEBUG
-
VALIDATING
private static final boolean VALIDATING
-
SIZE_T_SIZE
private static final int SIZE_T_SIZE
- See Also:
- Constant Field Values
-
SIZE_T_BITSIZE
private static final int SIZE_T_BITSIZE
- See Also:
- Constant Field Values
-
MALLOC_ALIGNMENT
private static final int MALLOC_ALIGNMENT
- See Also:
- Constant Field Values
-
CHUNK_ALIGN_MASK
private static final int CHUNK_ALIGN_MASK
- See Also:
- Constant Field Values
-
MCHUNK_SIZE
private static final int MCHUNK_SIZE
- See Also:
- Constant Field Values
-
CHUNK_OVERHEAD
private static final int CHUNK_OVERHEAD
- See Also:
- Constant Field Values
-
MIN_CHUNK_SIZE
private static final int MIN_CHUNK_SIZE
- See Also:
- Constant Field Values
-
MAX_REQUEST
private static final int MAX_REQUEST
- See Also:
- Constant Field Values
-
MIN_REQUEST
private static final int MIN_REQUEST
- See Also:
- Constant Field Values
-
TOP_FOOT_SIZE
private static final int TOP_FOOT_SIZE
-
MINIMAL_SIZE
private static final int MINIMAL_SIZE
-
TOP_FOOT_OFFSET
private static final int TOP_FOOT_OFFSET
-
PINUSE_BIT
private static final int PINUSE_BIT
- See Also:
- Constant Field Values
-
CINUSE_BIT
private static final int CINUSE_BIT
- See Also:
- Constant Field Values
-
FLAG4_BIT
private static final int FLAG4_BIT
- See Also:
- Constant Field Values
-
INUSE_BITS
private static final int INUSE_BITS
- See Also:
- Constant Field Values
-
FLAG_BITS
private static final int FLAG_BITS
- See Also:
- Constant Field Values
-
NSMALLBINS
private static final int NSMALLBINS
- See Also:
- Constant Field Values
-
NTREEBINS
private static final int NTREEBINS
- See Also:
- Constant Field Values
-
SMALLBIN_SHIFT
private static final int SMALLBIN_SHIFT
- See Also:
- Constant Field Values
-
TREEBIN_SHIFT
private static final int TREEBIN_SHIFT
- See Also:
- Constant Field Values
-
MIN_LARGE_SIZE
private static final int MIN_LARGE_SIZE
- See Also:
- Constant Field Values
-
MAX_SMALL_SIZE
private static final int MAX_SMALL_SIZE
- See Also:
- Constant Field Values
-
MAX_SMALL_REQUEST
private static final int MAX_SMALL_REQUEST
- See Also:
- Constant Field Values
-
storage
private final OffHeapStorageArea storage
-
smallMap
private int smallMap
-
treeMap
private int treeMap
-
smallBins
private final int[] smallBins
-
treeBins
private final int[] treeBins
-
designatedVictimSize
private int designatedVictimSize
-
designatedVictim
private int designatedVictim
-
topSize
private int topSize
-
top
private int top
-
occupied
private int occupied
-
-
Constructor Detail
-
IntegerBestFitAllocator
public IntegerBestFitAllocator(OffHeapStorageArea storage)
Create a best fit allocator backed by the given OffHeapStorageArea.- Parameters:
storage- source of ByteBuffer instances
-
-
Method Detail
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
dump
private java.lang.String dump()
-
dlmalloc
private int dlmalloc(int bytes)
-
allocateFromSmallBin
private int allocateFromSmallBin(int index, int nb)
-
splitFromSmallBin
private int splitFromSmallBin(int index, int nb)
-
replaceDesignatedVictim
private void replaceDesignatedVictim(int p, int s)
-
splitSmallFromTree
private int splitSmallFromTree(int nb)
-
splitFromTree
private int splitFromTree(int nb)
-
splitFromDesignatedVictim
private int splitFromDesignatedVictim(int nb)
-
splitFromTop
private int splitFromTop(int nb)
-
dlfree
private void dlfree(int mem, boolean shrink)
-
insertChunk
private void insertChunk(int p, int s)
-
insertSmallChunk
private void insertSmallChunk(int p, int s)
-
insertLargeChunk
private void insertLargeChunk(int x, int s)
-
unlinkChunk
private void unlinkChunk(int p, int s)
-
unlinkSmallChunk
private void unlinkSmallChunk(int p, int s)
-
unlinkLargeChunk
private void unlinkLargeChunk(int x)
-
chunkInUse
private boolean chunkInUse(int p)
-
previousInUse
private boolean previousInUse(int p)
-
isInUse
private boolean isInUse(int p)
-
chunkSize
private int chunkSize(int p)
-
clearPreviousInUse
private void clearPreviousInUse(int p)
-
nextChunk
private int nextChunk(int p)
-
prevChunk
private int prevChunk(int p)
-
nextPreviousInUse
private boolean nextPreviousInUse(int p)
-
setFoot
private void setFoot(int p, int s)
-
setSizeAndPreviousInUseOfFreeChunk
private void setSizeAndPreviousInUseOfFreeChunk(int p, int s)
-
setFreeWithPreviousInUse
private void setFreeWithPreviousInUse(int p, int s, int n)
-
setInUseAndPreviousInUse
private void setInUseAndPreviousInUse(int p, int s)
-
setSizeAndPreviousInUseOfInUseChunk
private void setSizeAndPreviousInUseOfInUseChunk(int p, int s)
-
prevFoot
private int prevFoot(int p)
-
prevFoot
private void prevFoot(int p, int value)
-
head
private int head(int p)
-
head
private void head(int p, int value)
-
forward
private int forward(int p)
-
forward
private void forward(int p, int value)
-
backward
private int backward(int p)
-
backward
private void backward(int p, int value)
-
child
private int child(int p, int index)
-
child
private void child(int p, int index, int value)
-
parent
private int parent(int p)
-
parent
private void parent(int p, int value)
-
index
private int index(int p)
-
index
private void index(int p, int value)
-
leftmostChild
private int leftmostChild(int x)
-
padRequest
private static int padRequest(int req)
-
chunkToMem
private static int chunkToMem(int p)
-
memToChunk
private static int memToChunk(int p)
-
okAddress
private static boolean okAddress(int a)
-
okNext
private static boolean okNext(int p, int n)
-
isAligned
private static boolean isAligned(int a)
-
alignOffset
private static int alignOffset(int a)
-
isSmall
private static boolean isSmall(int s)
-
smallBinIndex
private static int smallBinIndex(int s)
-
smallBinIndexToSize
private static int smallBinIndexToSize(int i)
-
treeBinIndex
private static int treeBinIndex(int s)
-
markSmallMap
private void markSmallMap(int i)
-
clearSmallMap
private void clearSmallMap(int i)
-
smallMapIsMarked
private boolean smallMapIsMarked(int i)
-
markTreeMap
private void markTreeMap(int i)
-
clearTreeMap
private void clearTreeMap(int i)
-
treeMapIsMarked
private boolean treeMapIsMarked(int i)
-
leftShiftForTreeIndex
private static int leftShiftForTreeIndex(int i)
-
minSizeForTreeIndex
private static int minSizeForTreeIndex(int i)
-
leftBits
private static int leftBits(int i)
-
validateAllocator
public void validateAllocator()
Debugging Support- Specified by:
validateAllocatorin interfaceAllocator
-
validateMallocedPointer
public int validateMallocedPointer(int m)
-
checkAnyChunk
private void checkAnyChunk(int p)
-
checkTopChunk
private void checkTopChunk(int p)
-
checkInUseChunk
private void checkInUseChunk(int p)
-
checkFreeChunk
private void checkFreeChunk(int p)
-
checkMallocedChunk
private void checkMallocedChunk(int mem, int s)
-
checkTree
private void checkTree(int t)
-
checkTreeBin
private void checkTreeBin(int index)
-
checkSmallBin
private void checkSmallBin(int index)
-
traverseAndCheck
private int traverseAndCheck()
-
findFreeChunk
private boolean findFreeChunk(int x)
-
getLastUsedPointer
public long getLastUsedPointer()
- Specified by:
getLastUsedPointerin interfaceAllocator
-
getLastUsedAddress
public long getLastUsedAddress()
- Specified by:
getLastUsedAddressin interfaceAllocator
-
getMinimalSize
public int getMinimalSize()
- Specified by:
getMinimalSizein interfaceAllocator
-
getMaximumAddress
public long getMaximumAddress()
- Specified by:
getMaximumAddressin interfaceAllocator
-
iterator
public java.util.Iterator<java.lang.Long> iterator()
- Specified by:
iteratorin interfacejava.lang.Iterable<java.lang.Long>
-
-