Class LongBestFitAllocator
java.lang.Object
org.terracotta.offheapstore.storage.allocator.LongBestFitAllocator
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intprivate static final intprivate static final intprivate static final booleanprivate longprivate longprivate static final intprivate static final intprivate static final intprivate static final intprivate static final longprivate static final intprivate static final intprivate static final intprivate static final longprivate static final intprivate static final longprivate static final longprivate static final intprivate static final intprivate longprivate static final intprivate static final intprivate static final intprivate static final intprivate final long[]private intprivate final OffHeapStorageAreaprivate longprivate static final longprivate static final longprivate longprivate static final intprivate final long[]private intprivate static final boolean -
Constructor Summary
ConstructorsConstructorDescriptionLongBestFitAllocator(OffHeapStorageArea storage) Create a best fit allocator backed by the given OffHeapStorageArea. -
Method Summary
Modifier and TypeMethodDescriptionprivate 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 Stringdump()voidexpand(long increase) private booleanfindFreeChunk(long x) private longforward(long p) private voidforward(long p, long value) voidfree(long address) longlonglongintprivate 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) 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) toString()private longprivate static inttreeBinIndex(long s) private booleantreeMapIsMarked(int i) private voidunlinkChunk(long p, long s) private voidunlinkLargeChunk(long x) private voidunlinkSmallChunk(long p, long s) voidDebugging SupportlongvalidateMallocedPointer(long m) Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface Iterable
forEach, spliterator
-
Field Details
-
DEBUG
private static final boolean DEBUG -
VALIDATING
private static final boolean VALIDATING -
SIZE_T_BITSIZE
private static final int SIZE_T_BITSIZE- See Also:
-
SIZE_T_SIZE
private static final int SIZE_T_SIZE- See Also:
-
MALLOC_ALIGNMENT
private static final int MALLOC_ALIGNMENT- See Also:
-
CHUNK_ALIGN_MASK
private static final int CHUNK_ALIGN_MASK- See Also:
-
MCHUNK_SIZE
private static final int MCHUNK_SIZE- See Also:
-
CHUNK_OVERHEAD
private static final int CHUNK_OVERHEAD- See Also:
-
MIN_CHUNK_SIZE
private static final long MIN_CHUNK_SIZE- See Also:
-
MAX_REQUEST
private static final long MAX_REQUEST- See Also:
-
MIN_REQUEST
private static final long MIN_REQUEST- See Also:
-
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:
-
CINUSE_BIT
private static final int CINUSE_BIT- See Also:
-
FLAG4_BIT
private static final int FLAG4_BIT- See Also:
-
INUSE_BITS
private static final int INUSE_BITS- See Also:
-
FLAG_BITS
private static final int FLAG_BITS- See Also:
-
NSMALLBINS
private static final int NSMALLBINS- See Also:
-
NTREEBINS
private static final int NTREEBINS- See Also:
-
SMALLBIN_SHIFT
private static final int SMALLBIN_SHIFT- See Also:
-
TREEBIN_SHIFT
private static final int TREEBIN_SHIFT- See Also:
-
MIN_LARGE_SIZE
private static final int MIN_LARGE_SIZE- See Also:
-
MAX_SMALL_SIZE
private static final int MAX_SMALL_SIZE- See Also:
-
MAX_SMALL_REQUEST
private static final int MAX_SMALL_REQUEST- See Also:
-
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 Details
-
LongBestFitAllocator
Create a best fit allocator backed by the given OffHeapStorageArea.- Parameters:
storage- source of ByteBuffer instances
-
-
Method Details
-
clear
-
expand
-
allocate
-
free
-
occupied
-
toString
-
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
-