Class SizeClasses
- All Implemented Interfaces:
SizeClassesMetric
pageShifts
to 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 invalid input: '<'invalid input: '<' LOG2_QUANTUM. Each group has 1 invalid input: '<'invalid input: '<' LOG2_SIZE_CLASS_GROUP of size classes. size = 1 invalid input: '<'invalid input: '<' log2Group + nDelta * (1 invalid input: '<'invalid input: '<' 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
FieldsModifier and TypeFieldDescription(package private) final int
(package private) final int
private static final int
private static final int
(package private) static final int
private static final int
private static final int
private static final int
(package private) final int
private static final int
private static final byte
(package private) final int
(package private) final int
(package private) final int
private final int[]
(package private) final int
(package private) final int
private static final int
private final int[]
private final int[]
(package private) final int
private static final int
private static final byte
-
Constructor Summary
ConstructorsConstructorDescriptionSizeClasses
(int pageSize, int pageShifts, int chunkSize, int directMemoryCacheAlignment) -
Method Summary
Modifier and TypeMethodDescriptionprivate static int
alignSizeIfNeeded
(int size, int directMemoryCacheAlignment) private static int
calculateSize
(int log2Group, int nDelta, int log2Delta) private static int[]
newIdx2SizeTab
(short[][] sizeClasses, int nSizes, int directMemoryCacheAlignment) private static int[]
newPageIdx2sizeTab
(short[][] sizeClasses, int nSizes, int nPSizes, int directMemoryCacheAlignment) private static int[]
newSize2idxTab
(int lookupMaxSize, short[][] sizeClasses) private static short[]
newSizeClass
(int index, int log2Group, int log2Delta, int nDelta, int pageShifts) int
normalizeSize
(int size) Normalizes usable size that would result from allocating an object with the specified size and alignment.private static int
normalizeSizeCompute
(int size) long
pageIdx2size
(int pageIdx) Computes size from lookup table according to pageIdx.long
pageIdx2sizeCompute
(int pageIdx) Computes size according to pageIdx.int
pages2pageIdx
(int pages) Normalizes request size up to the nearest pageSize class.private int
pages2pageIdxCompute
(int pages, boolean floor) int
pages2pageIdxFloor
(int pages) Normalizes request size down to the nearest pageSize class.int
size2SizeIdx
(int size) Normalizes request size up to the nearest size class.int
sizeIdx2size
(int sizeIdx) Computes size from lookup table according to sizeIdx.int
sizeIdx2sizeCompute
(int sizeIdx) Computes size according to sizeIdx.private static int
sizeOf
(short[] sizeClass, int directMemoryCacheAlignment)
-
Field Details
-
LOG2_QUANTUM
static final int LOG2_QUANTUM- See Also:
-
LOG2_SIZE_CLASS_GROUP
private static final int LOG2_SIZE_CLASS_GROUP- See Also:
-
LOG2_MAX_LOOKUP_SIZE
private static final int LOG2_MAX_LOOKUP_SIZE- See Also:
-
LOG2GROUP_IDX
private static final int LOG2GROUP_IDX- See Also:
-
LOG2DELTA_IDX
private static final int LOG2DELTA_IDX- See Also:
-
NDELTA_IDX
private static final int NDELTA_IDX- See Also:
-
PAGESIZE_IDX
private static final int PAGESIZE_IDX- See Also:
-
SUBPAGE_IDX
private static final int SUBPAGE_IDX- See Also:
-
LOG2_DELTA_LOOKUP_IDX
private static final int LOG2_DELTA_LOOKUP_IDX- See Also:
-
no
private static final byte no- See Also:
-
yes
private static final byte yes- See Also:
-
pageSize
final int pageSize -
pageShifts
final int pageShifts -
chunkSize
final int chunkSize -
directMemoryCacheAlignment
final int directMemoryCacheAlignment -
nSizes
final int nSizes -
nSubpages
final int nSubpages -
nPSizes
final int nPSizes -
lookupMaxSize
final int lookupMaxSize -
smallMaxSizeIdx
final int smallMaxSizeIdx -
pageIdx2sizeTab
private final int[] pageIdx2sizeTab -
sizeIdx2sizeTab
private final int[] sizeIdx2sizeTab -
size2idxTab
private final int[] size2idxTab
-
-
Constructor Details
-
SizeClasses
SizeClasses(int pageSize, int pageShifts, int chunkSize, int directMemoryCacheAlignment)
-
-
Method Details
-
newSizeClass
private static short[] newSizeClass(int index, int log2Group, int log2Delta, int nDelta, int pageShifts) -
newIdx2SizeTab
private static int[] newIdx2SizeTab(short[][] sizeClasses, int nSizes, int directMemoryCacheAlignment) -
calculateSize
private static int calculateSize(int log2Group, int nDelta, int log2Delta) -
sizeOf
private static int sizeOf(short[] sizeClass, int directMemoryCacheAlignment) -
newPageIdx2sizeTab
private static int[] newPageIdx2sizeTab(short[][] sizeClasses, int nSizes, int nPSizes, int directMemoryCacheAlignment) -
newSize2idxTab
private static int[] newSize2idxTab(int lookupMaxSize, short[][] sizeClasses) -
sizeIdx2size
public int sizeIdx2size(int sizeIdx) Description copied from interface:SizeClassesMetric
Computes size from lookup table according to sizeIdx.- Specified by:
sizeIdx2size
in interfaceSizeClassesMetric
- Returns:
- size
-
sizeIdx2sizeCompute
public int sizeIdx2sizeCompute(int sizeIdx) Description copied from interface:SizeClassesMetric
Computes size according to sizeIdx.- Specified by:
sizeIdx2sizeCompute
in interfaceSizeClassesMetric
- Returns:
- size
-
pageIdx2size
public long pageIdx2size(int pageIdx) Description copied from interface:SizeClassesMetric
Computes size from lookup table according to pageIdx.- Specified by:
pageIdx2size
in interfaceSizeClassesMetric
- Returns:
- size which is multiples of pageSize.
-
pageIdx2sizeCompute
public long pageIdx2sizeCompute(int pageIdx) Description copied from interface:SizeClassesMetric
Computes size according to pageIdx.- Specified by:
pageIdx2sizeCompute
in interfaceSizeClassesMetric
- Returns:
- size which is multiples of pageSize
-
size2SizeIdx
public int size2SizeIdx(int size) Description copied from interface:SizeClassesMetric
Normalizes request size up to the nearest size class.- Specified by:
size2SizeIdx
in interfaceSizeClassesMetric
- Parameters:
size
- request size- Returns:
- sizeIdx of the size class
-
pages2pageIdx
public int pages2pageIdx(int pages) Description copied from interface:SizeClassesMetric
Normalizes request size up to the nearest pageSize class.- Specified by:
pages2pageIdx
in interfaceSizeClassesMetric
- Parameters:
pages
- multiples of pageSizes- Returns:
- pageIdx of the pageSize class
-
pages2pageIdxFloor
public int pages2pageIdxFloor(int pages) Description copied from interface:SizeClassesMetric
Normalizes request size down to the nearest pageSize class.- Specified by:
pages2pageIdxFloor
in interfaceSizeClassesMetric
- Parameters:
pages
- multiples of pageSizes- Returns:
- pageIdx of the pageSize class
-
pages2pageIdxCompute
private int pages2pageIdxCompute(int pages, boolean floor) -
alignSizeIfNeeded
private static int alignSizeIfNeeded(int size, int directMemoryCacheAlignment) -
normalizeSize
public int normalizeSize(int size) Description copied from interface:SizeClassesMetric
Normalizes usable size that would result from allocating an object with the specified size and alignment.- Specified by:
normalizeSize
in interfaceSizeClassesMetric
- Parameters:
size
- request size- Returns:
- normalized size
-
normalizeSizeCompute
private static int normalizeSizeCompute(int size)
-