Class LongBestFitAllocator
- java.lang.Object
-
- org.terracotta.offheapstore.storage.allocator.LongBestFitAllocator
-
-
Field Summary
Fields Modifier and Type Field Description private static intCHUNK_ALIGN_MASKprivate static intCHUNK_OVERHEADprivate static intCINUSE_BITprivate static booleanDEBUGprivate longdesignatedVictimprivate longdesignatedVictimSizeprivate static intFLAG_BITSprivate static intFLAG4_BITprivate static intINUSE_BITSprivate static intMALLOC_ALIGNMENTprivate static longMAX_REQUESTprivate static intMAX_SMALL_REQUESTprivate static intMAX_SMALL_SIZEprivate static intMCHUNK_SIZEprivate static longMIN_CHUNK_SIZEprivate static intMIN_LARGE_SIZEprivate static longMIN_REQUESTprivate static longMINIMAL_SIZEprivate static intNSMALLBINSprivate static intNTREEBINSprivate longoccupiedprivate static intPINUSE_BITprivate static intSIZE_T_BITSIZEprivate static intSIZE_T_SIZEprivate static intSMALLBIN_SHIFTprivate long[]smallBinsprivate intsmallMapprivate OffHeapStorageAreastorageprivate longtopprivate static longTOP_FOOT_OFFSETprivate static longTOP_FOOT_SIZEprivate longtopSizeprivate static intTREEBIN_SHIFTprivate long[]treeBinsprivate inttreeMapprivate static booleanVALIDATING
-
Constructor Summary
Constructors Constructor Description LongBestFitAllocator(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 longalignOffset(long a)longallocate(long size)private longallocateFromSmallBin(int index, long nb)private longbackward(long p)private voidbackward(long p, long value)private voidcheckAnyChunk(long p)private voidcheckFreeChunk(long p)private voidcheckInUseChunk(long p)private voidcheckMallocedChunk(long mem, long s)private voidcheckSmallBin(int index)private voidcheckTopChunk(long p)private voidcheckTree(long t)private voidcheckTreeBin(int index)private longchild(long p, int index)private voidchild(long p, int index, long value)private booleanchunkInUse(long p)private longchunkSize(long p)private static longchunkToMem(long p)voidclear()private voidclearPreviousInUse(long p)private voidclearSmallMap(int i)private voidclearTreeMap(int i)private voiddlfree(long mem, boolean shrink)private longdlmalloc(long bytes)private java.lang.Stringdump()voidexpand(long increase)private booleanfindFreeChunk(long x)private longforward(long p)private voidforward(long p, long value)voidfree(long address)longgetLastUsedAddress()longgetLastUsedPointer()longgetMaximumAddress()intgetMinimalSize()private longhead(long p)private voidhead(long p, long value)private intindex(long p)private voidindex(long p, int value)private voidinsertChunk(long p, long s)private voidinsertLargeChunk(long x, long s)private voidinsertSmallChunk(long p, long s)private static booleanisAligned(long a)private booleanisInUse(long p)private static booleanisSmall(long s)java.util.Iterator<java.lang.Long>iterator()private static intleftBits(int i)private longleftmostChild(long x)private static intleftShiftForTreeIndex(int i)private voidmarkSmallMap(int i)private voidmarkTreeMap(int i)private static longmemToChunk(long p)private static intminSizeForTreeIndex(int i)private longnextChunk(long p)private booleannextPreviousInUse(long p)longoccupied()private static booleanokAddress(long a)private static booleanokNext(long p, long n)private static longpadRequest(long req)private longparent(long p)private voidparent(long p, long value)private longprevChunk(long p)private longprevFoot(long p)private voidprevFoot(long p, long value)private booleanpreviousInUse(long p)private voidreplaceDesignatedVictim(long p, long s)private voidsetFoot(long p, long s)private voidsetFreeWithPreviousInUse(long p, long s, long n)private voidsetInUseAndPreviousInUse(long p, long s)private voidsetSizeAndPreviousInUseOfFreeChunk(long p, long s)private voidsetSizeAndPreviousInUseOfInUseChunk(long p, long s)private static intsmallBinIndex(long s)private static intsmallBinIndexToSize(int i)private booleansmallMapIsMarked(int i)private longsplitFromDesignatedVictim(long nb)private longsplitFromSmallBin(int index, long nb)private longsplitFromTop(long nb)private longsplitFromTree(long nb)private longsplitSmallFromTree(long nb)java.lang.StringtoString()private longtraverseAndCheck()private static inttreeBinIndex(long s)private booleantreeMapIsMarked(int i)private voidunlinkChunk(long p, long s)private voidunlinkLargeChunk(long x)private voidunlinkSmallChunk(long p, long s)voidvalidateAllocator()Debugging SupportlongvalidateMallocedPointer(long m)
-
-
-
Field Detail
-
DEBUG
private static final boolean DEBUG
-
VALIDATING
private static final boolean VALIDATING
-
SIZE_T_BITSIZE
private static final int SIZE_T_BITSIZE
- See Also:
- Constant Field Values
-
SIZE_T_SIZE
private static final int SIZE_T_SIZE
- 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 long MIN_CHUNK_SIZE
- See Also:
- Constant Field Values
-
MAX_REQUEST
private static final long MAX_REQUEST
- See Also:
- Constant Field Values
-
MIN_REQUEST
private static final long MIN_REQUEST
- See Also:
- Constant Field Values
-
TOP_FOOT_SIZE
private static final long TOP_FOOT_SIZE
-
MINIMAL_SIZE
private static final long MINIMAL_SIZE
-
TOP_FOOT_OFFSET
private static final long 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 long[] smallBins
-
treeBins
private final long[] treeBins
-
designatedVictimSize
private long designatedVictimSize
-
designatedVictim
private long designatedVictim
-
topSize
private long topSize
-
top
private long top
-
occupied
private long occupied
-
-
Constructor Detail
-
LongBestFitAllocator
public LongBestFitAllocator(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 long dlmalloc(long bytes)
-
allocateFromSmallBin
private long allocateFromSmallBin(int index, long nb)
-
splitFromSmallBin
private long splitFromSmallBin(int index, long nb)
-
replaceDesignatedVictim
private void replaceDesignatedVictim(long p, long s)
-
splitSmallFromTree
private long splitSmallFromTree(long nb)
-
splitFromTree
private long splitFromTree(long nb)
-
splitFromDesignatedVictim
private long splitFromDesignatedVictim(long nb)
-
splitFromTop
private long splitFromTop(long nb)
-
dlfree
private void dlfree(long mem, boolean shrink)
-
insertChunk
private void insertChunk(long p, long s)
-
insertSmallChunk
private void insertSmallChunk(long p, long s)
-
insertLargeChunk
private void insertLargeChunk(long x, long s)
-
unlinkChunk
private void unlinkChunk(long p, long s)
-
unlinkSmallChunk
private void unlinkSmallChunk(long p, long s)
-
unlinkLargeChunk
private void unlinkLargeChunk(long x)
-
chunkInUse
private boolean chunkInUse(long p)
-
previousInUse
private boolean previousInUse(long p)
-
isInUse
private boolean isInUse(long p)
-
chunkSize
private long chunkSize(long p)
-
clearPreviousInUse
private void clearPreviousInUse(long p)
-
nextChunk
private long nextChunk(long p)
-
prevChunk
private long prevChunk(long p)
-
nextPreviousInUse
private boolean nextPreviousInUse(long p)
-
setFoot
private void setFoot(long p, long s)
-
setSizeAndPreviousInUseOfFreeChunk
private void setSizeAndPreviousInUseOfFreeChunk(long p, long s)
-
setFreeWithPreviousInUse
private void setFreeWithPreviousInUse(long p, long s, long n)
-
setInUseAndPreviousInUse
private void setInUseAndPreviousInUse(long p, long s)
-
setSizeAndPreviousInUseOfInUseChunk
private void setSizeAndPreviousInUseOfInUseChunk(long p, long s)
-
prevFoot
private long prevFoot(long p)
-
prevFoot
private void prevFoot(long p, long value)
-
head
private long head(long p)
-
head
private void head(long p, long value)
-
forward
private long forward(long p)
-
forward
private void forward(long p, long value)
-
backward
private long backward(long p)
-
backward
private void backward(long p, long value)
-
child
private long child(long p, int index)
-
child
private void child(long p, int index, long value)
-
parent
private long parent(long p)
-
parent
private void parent(long p, long value)
-
index
private int index(long p)
-
index
private void index(long p, int value)
-
leftmostChild
private long leftmostChild(long x)
-
padRequest
private static long padRequest(long req)
-
chunkToMem
private static long chunkToMem(long p)
-
memToChunk
private static long memToChunk(long p)
-
okAddress
private static boolean okAddress(long a)
-
okNext
private static boolean okNext(long p, long n)
-
isAligned
private static boolean isAligned(long a)
-
alignOffset
private static long alignOffset(long a)
-
isSmall
private static boolean isSmall(long s)
-
smallBinIndex
private static int smallBinIndex(long s)
-
smallBinIndexToSize
private static int smallBinIndexToSize(int i)
-
treeBinIndex
private static int treeBinIndex(long 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 long validateMallocedPointer(long m)
-
checkAnyChunk
private void checkAnyChunk(long p)
-
checkTopChunk
private void checkTopChunk(long p)
-
checkInUseChunk
private void checkInUseChunk(long p)
-
checkFreeChunk
private void checkFreeChunk(long p)
-
checkMallocedChunk
private void checkMallocedChunk(long mem, long s)
-
checkTree
private void checkTree(long t)
-
checkTreeBin
private void checkTreeBin(int index)
-
checkSmallBin
private void checkSmallBin(int index)
-
traverseAndCheck
private long traverseAndCheck()
-
findFreeChunk
private boolean findFreeChunk(long 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>
-
-