SizeClasses Class — netty Architecture
Architecture documentation for the SizeClasses class in SizeClasses.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD d1cbce7b_bd0a_5553_8e62_6deeb38137ff["SizeClasses"] 95af4fd0_f0e7_759d_4f64_224f6b715722["SizeClasses.java"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|defined in| 95af4fd0_f0e7_759d_4f64_224f6b715722 9682c31b_1e8c_cdd5_584a_e9f43b2c752a["SizeClasses()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 9682c31b_1e8c_cdd5_584a_e9f43b2c752a 90408e2f_689e_0ba6_ef35_9b594fa267a8["newSizeClass()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 90408e2f_689e_0ba6_ef35_9b594fa267a8 df10baa0_1f3b_513f_0212_4cc30a52f8ee["newIdx2SizeTab()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| df10baa0_1f3b_513f_0212_4cc30a52f8ee 0fff0007_5d31_e6c3_579f_00f722ad4360["calculateSize()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 0fff0007_5d31_e6c3_579f_00f722ad4360 23340afc_607e_6d69_aa04_02a9689ed359["sizeOf()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 23340afc_607e_6d69_aa04_02a9689ed359 e2fe51ab_8c8a_4b5c_3a5f_336b659e0c62["newPageIdx2sizeTab()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| e2fe51ab_8c8a_4b5c_3a5f_336b659e0c62 99df5c83_e8b2_f91b_cbd6_250b80d82602["newSize2idxTab()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 99df5c83_e8b2_f91b_cbd6_250b80d82602 c6c6ff7d_ae35_e6df_477c_f81983261908["sizeIdx2size()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| c6c6ff7d_ae35_e6df_477c_f81983261908 3b0c05d0_815b_b398_4d70_7023a40b5c50["sizeIdx2sizeCompute()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 3b0c05d0_815b_b398_4d70_7023a40b5c50 28f779fe_e705_284f_1d74_54525cfbb7d6["pageIdx2size()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 28f779fe_e705_284f_1d74_54525cfbb7d6 1215c79c_7dce_53dc_f8e8_39cd71cbbe1e["pageIdx2sizeCompute()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 1215c79c_7dce_53dc_f8e8_39cd71cbbe1e 84194f88_a180_4e4f_24f0_73236d305f6d["size2SizeIdx()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 84194f88_a180_4e4f_24f0_73236d305f6d 6f53d4d9_a4b5_17ff_fa8e_0d7908756327["pages2pageIdx()"] d1cbce7b_bd0a_5553_8e62_6deeb38137ff -->|method| 6f53d4d9_a4b5_17ff_fa8e_0d7908756327
Relationship Graph
Source Code
buffer/src/main/java/io/netty/buffer/SizeClasses.java lines 81–413
final class SizeClasses implements SizeClassesMetric {
static final int LOG2_QUANTUM = 4;
private static final int LOG2_SIZE_CLASS_GROUP = 2;
private static final int LOG2_MAX_LOOKUP_SIZE = 12;
private static final int LOG2GROUP_IDX = 1;
private static final int LOG2DELTA_IDX = 2;
private static final int NDELTA_IDX = 3;
private static final int PAGESIZE_IDX = 4;
private static final int SUBPAGE_IDX = 5;
private static final int LOG2_DELTA_LOOKUP_IDX = 6;
private static final byte no = 0, yes = 1;
final int pageSize;
final int pageShifts;
final int chunkSize;
final int directMemoryCacheAlignment;
final int nSizes;
final int nSubpages;
final int nPSizes;
final int lookupMaxSize;
final int smallMaxSizeIdx;
private final int[] pageIdx2sizeTab;
// lookup table for sizeIdx < nSizes
private final int[] sizeIdx2sizeTab;
// lookup table used for size <= lookupMaxClass
// spacing is 1 << LOG2_QUANTUM, so the size of array is lookupMaxClass >> LOG2_QUANTUM
private final int[] size2idxTab;
SizeClasses(int pageSize, int pageShifts, int chunkSize, int directMemoryCacheAlignment) {
int group = log2(chunkSize) - LOG2_QUANTUM - LOG2_SIZE_CLASS_GROUP + 1;
//generate size classes
//[index, log2Group, log2Delta, nDelta, isMultiPageSize, isSubPage, log2DeltaLookup]
short[][] sizeClasses = new short[group << LOG2_SIZE_CLASS_GROUP][7];
int normalMaxSize = -1;
int nSizes = 0;
int size = 0;
int log2Group = LOG2_QUANTUM;
int log2Delta = LOG2_QUANTUM;
int ndeltaLimit = 1 << LOG2_SIZE_CLASS_GROUP;
//First small group, nDelta start at 0.
//first size class is 1 << LOG2_QUANTUM
for (int nDelta = 0; nDelta < ndeltaLimit; nDelta++, nSizes++) {
short[] sizeClass = newSizeClass(nSizes, log2Group, log2Delta, nDelta, pageShifts);
sizeClasses[nSizes] = sizeClass;
size = sizeOf(sizeClass, directMemoryCacheAlignment);
}
log2Group += LOG2_SIZE_CLASS_GROUP;
//All remaining groups, nDelta start at 1.
for (; size < chunkSize; log2Group++, log2Delta++) {
for (int nDelta = 1; nDelta <= ndeltaLimit && size < chunkSize; nDelta++, nSizes++) {
short[] sizeClass = newSizeClass(nSizes, log2Group, log2Delta, nDelta, pageShifts);
sizeClasses[nSizes] = sizeClass;
size = normalMaxSize = sizeOf(sizeClass, directMemoryCacheAlignment);
}
}
//chunkSize must be normalMaxSize
assert chunkSize == normalMaxSize;
int smallMaxSizeIdx = 0;
int lookupMaxSize = 0;
int nPSizes = 0;
int nSubpages = 0;
for (int idx = 0; idx < nSizes; idx++) {
short[] sz = sizeClasses[idx];
if (sz[PAGESIZE_IDX] == yes) {
nPSizes++;
Source
Frequently Asked Questions
What is the SizeClasses class?
SizeClasses is a class in the netty codebase, defined in buffer/src/main/java/io/netty/buffer/SizeClasses.java.
Where is SizeClasses defined?
SizeClasses is defined in buffer/src/main/java/io/netty/buffer/SizeClasses.java at line 81.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free