Class SizeClasses
- java.lang.Object
-
- io.netty.buffer.SizeClasses
-
- All Implemented Interfaces:
SizeClassesMetric
- Direct Known Subclasses:
PoolArena
abstract class SizeClasses extends java.lang.Object implements SizeClassesMetric
SizeClasses requirespageShiftsto be defined prior to inclusion, and it in turn defines:LOG2_SIZE_CLASS_GROUP: Log of size class count for each size doubling. LOG2_MAX_LOOKUP_SIZE: Log of max size class in the lookup table. sizeClasses: Complete table of [index, log2Group, log2Delta, nDelta, isMultiPageSize, isSubPage, log2DeltaLookup] tuples. index: Size class index. log2Group: Log of group base size (no deltas added). log2Delta: Log of delta to previous size class. nDelta: Delta multiplier. isMultiPageSize: 'yes' if a multiple of the page size, 'no' otherwise. isSubPage: 'yes' if a subpage size class, 'no' otherwise. log2DeltaLookup: Same as log2Delta if a lookup table size class, 'no' otherwise.
nSubpages: Number of subpages size classes. nSizes: Number of size classes. nPSizes: Number of size classes that are multiples of pageSize. smallMaxSizeIdx: Maximum small size class index. lookupMaxclass: Maximum size class included in lookup table. log2NormalMinClass: Log of minimum normal size class.
The first size class and spacing are 1 << LOG2_QUANTUM. Each group has 1 << LOG2_SIZE_CLASS_GROUP of size classes. size = 1 << log2Group + nDelta * (1 << log2Delta) The first size class has an unusual encoding, because the size has to be split between group and delta*nDelta. If pageShift = 13, sizeClasses looks like this: (index, log2Group, log2Delta, nDelta, isMultiPageSize, isSubPage, log2DeltaLookup)
( 0, 4, 4, 0, no, yes, 4) ( 1, 4, 4, 1, no, yes, 4) ( 2, 4, 4, 2, no, yes, 4) ( 3, 4, 4, 3, no, yes, 4)
( 4, 6, 4, 1, no, yes, 4) ( 5, 6, 4, 2, no, yes, 4) ( 6, 6, 4, 3, no, yes, 4) ( 7, 6, 4, 4, no, yes, 4)
( 8, 7, 5, 1, no, yes, 5) ( 9, 7, 5, 2, no, yes, 5) ( 10, 7, 5, 3, no, yes, 5) ( 11, 7, 5, 4, no, yes, 5) ... ... ( 72, 23, 21, 1, yes, no, no) ( 73, 23, 21, 2, yes, no, no) ( 74, 23, 21, 3, yes, no, no) ( 75, 23, 21, 4, yes, no, no)
( 76, 24, 22, 1, yes, no, no)
-
-
Field Summary
Fields Modifier and Type Field Description protected intchunkSizeprotected intdirectMemoryCacheAlignmentprivate static intINDEX_IDXprivate static intLOG2_DELTA_LOOKUP_IDXprivate static intLOG2_MAX_LOOKUP_SIZE(package private) static intLOG2_QUANTUMprivate static intLOG2_SIZE_CLASS_GROUPprivate static intLOG2DELTA_IDXprivate static intLOG2GROUP_IDXprivate intlookupMaxSizeprivate static intNDELTA_IDXprivate static byteno(package private) intnPSizes(package private) intnSizes(package private) intnSubpagesprivate int[]pageIdx2sizeTabprotected intpageShiftsprotected intpageSizeprivate static intPAGESIZE_IDXprivate int[]size2idxTabprivate short[][]sizeClassesprivate int[]sizeIdx2sizeTab(package private) intsmallMaxSizeIdxprivate static intSUBPAGE_IDXprivate static byteyes
-
Constructor Summary
Constructors Modifier Constructor Description protectedSizeClasses(int pageSize, int pageShifts, int chunkSize, int directMemoryCacheAlignment)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private intalignSize(int size)private voididx2SizeTab(int[] sizeIdx2sizeTab, int[] pageIdx2sizeTab)intnormalizeSize(int size)Normalizes usable size that would result from allocating an object with the specified size and alignment.private static intnormalizeSizeCompute(int size)longpageIdx2size(int pageIdx)Computes size from lookup table according to pageIdx.longpageIdx2sizeCompute(int pageIdx)Computes size according to pageIdx.intpages2pageIdx(int pages)Normalizes request size up to the nearest pageSize class.private intpages2pageIdxCompute(int pages, boolean floor)intpages2pageIdxFloor(int pages)Normalizes request size down to the nearest pageSize class.private voidsize2idxTab(int[] size2idxTab)intsize2SizeIdx(int size)Normalizes request size up to the nearest size class.private intsizeClass(int index, int log2Group, int log2Delta, int nDelta)private intsizeClasses()intsizeIdx2size(int sizeIdx)Computes size from lookup table according to sizeIdx.intsizeIdx2sizeCompute(int sizeIdx)Computes size according to sizeIdx.
-
-
-
Field Detail
-
LOG2_QUANTUM
static final int LOG2_QUANTUM
- See Also:
- Constant Field Values
-
LOG2_SIZE_CLASS_GROUP
private static final int LOG2_SIZE_CLASS_GROUP
- See Also:
- Constant Field Values
-
LOG2_MAX_LOOKUP_SIZE
private static final int LOG2_MAX_LOOKUP_SIZE
- See Also:
- Constant Field Values
-
INDEX_IDX
private static final int INDEX_IDX
- See Also:
- Constant Field Values
-
LOG2GROUP_IDX
private static final int LOG2GROUP_IDX
- See Also:
- Constant Field Values
-
LOG2DELTA_IDX
private static final int LOG2DELTA_IDX
- See Also:
- Constant Field Values
-
NDELTA_IDX
private static final int NDELTA_IDX
- See Also:
- Constant Field Values
-
PAGESIZE_IDX
private static final int PAGESIZE_IDX
- See Also:
- Constant Field Values
-
SUBPAGE_IDX
private static final int SUBPAGE_IDX
- See Also:
- Constant Field Values
-
LOG2_DELTA_LOOKUP_IDX
private static final int LOG2_DELTA_LOOKUP_IDX
- See Also:
- Constant Field Values
-
no
private static final byte no
- See Also:
- Constant Field Values
-
yes
private static final byte yes
- See Also:
- Constant Field Values
-
pageSize
protected final int pageSize
-
pageShifts
protected final int pageShifts
-
chunkSize
protected final int chunkSize
-
directMemoryCacheAlignment
protected final int directMemoryCacheAlignment
-
nSizes
final int nSizes
-
nSubpages
int nSubpages
-
nPSizes
int nPSizes
-
smallMaxSizeIdx
int smallMaxSizeIdx
-
lookupMaxSize
private int lookupMaxSize
-
sizeClasses
private final short[][] sizeClasses
-
pageIdx2sizeTab
private final int[] pageIdx2sizeTab
-
sizeIdx2sizeTab
private final int[] sizeIdx2sizeTab
-
size2idxTab
private final int[] size2idxTab
-
-
Method Detail
-
sizeClasses
private int sizeClasses()
-
sizeClass
private int sizeClass(int index, int log2Group, int log2Delta, int nDelta)
-
idx2SizeTab
private void idx2SizeTab(int[] sizeIdx2sizeTab, int[] pageIdx2sizeTab)
-
size2idxTab
private void size2idxTab(int[] size2idxTab)
-
sizeIdx2size
public int sizeIdx2size(int sizeIdx)
Description copied from interface:SizeClassesMetricComputes size from lookup table according to sizeIdx.- Specified by:
sizeIdx2sizein interfaceSizeClassesMetric- Returns:
- size
-
sizeIdx2sizeCompute
public int sizeIdx2sizeCompute(int sizeIdx)
Description copied from interface:SizeClassesMetricComputes size according to sizeIdx.- Specified by:
sizeIdx2sizeComputein interfaceSizeClassesMetric- Returns:
- size
-
pageIdx2size
public long pageIdx2size(int pageIdx)
Description copied from interface:SizeClassesMetricComputes size from lookup table according to pageIdx.- Specified by:
pageIdx2sizein interfaceSizeClassesMetric- Returns:
- size which is multiples of pageSize.
-
pageIdx2sizeCompute
public long pageIdx2sizeCompute(int pageIdx)
Description copied from interface:SizeClassesMetricComputes size according to pageIdx.- Specified by:
pageIdx2sizeComputein interfaceSizeClassesMetric- Returns:
- size which is multiples of pageSize
-
size2SizeIdx
public int size2SizeIdx(int size)
Description copied from interface:SizeClassesMetricNormalizes request size up to the nearest size class.- Specified by:
size2SizeIdxin interfaceSizeClassesMetric- Parameters:
size- request size- Returns:
- sizeIdx of the size class
-
pages2pageIdx
public int pages2pageIdx(int pages)
Description copied from interface:SizeClassesMetricNormalizes request size up to the nearest pageSize class.- Specified by:
pages2pageIdxin interfaceSizeClassesMetric- Parameters:
pages- multiples of pageSizes- Returns:
- pageIdx of the pageSize class
-
pages2pageIdxFloor
public int pages2pageIdxFloor(int pages)
Description copied from interface:SizeClassesMetricNormalizes request size down to the nearest pageSize class.- Specified by:
pages2pageIdxFloorin interfaceSizeClassesMetric- Parameters:
pages- multiples of pageSizes- Returns:
- pageIdx of the pageSize class
-
pages2pageIdxCompute
private int pages2pageIdxCompute(int pages, boolean floor)
-
alignSize
private int alignSize(int size)
-
normalizeSize
public int normalizeSize(int size)
Description copied from interface:SizeClassesMetricNormalizes usable size that would result from allocating an object with the specified size and alignment.- Specified by:
normalizeSizein interfaceSizeClassesMetric- Parameters:
size- request size- Returns:
- normalized size
-
normalizeSizeCompute
private static int normalizeSizeCompute(int size)
-
-