Home / Function/ SizeClasses() — netty Function Reference

SizeClasses() — netty Function Reference

Architecture documentation for the SizeClasses() function in SizeClasses.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  9682c31b_1e8c_cdd5_584a_e9f43b2c752a["SizeClasses()"]
  d1cbce7b_bd0a_5553_8e62_6deeb38137ff["SizeClasses"]
  9682c31b_1e8c_cdd5_584a_e9f43b2c752a -->|defined in| d1cbce7b_bd0a_5553_8e62_6deeb38137ff
  90408e2f_689e_0ba6_ef35_9b594fa267a8["newSizeClass()"]
  9682c31b_1e8c_cdd5_584a_e9f43b2c752a -->|calls| 90408e2f_689e_0ba6_ef35_9b594fa267a8
  df10baa0_1f3b_513f_0212_4cc30a52f8ee["newIdx2SizeTab()"]
  9682c31b_1e8c_cdd5_584a_e9f43b2c752a -->|calls| df10baa0_1f3b_513f_0212_4cc30a52f8ee
  e2fe51ab_8c8a_4b5c_3a5f_336b659e0c62["newPageIdx2sizeTab()"]
  9682c31b_1e8c_cdd5_584a_e9f43b2c752a -->|calls| e2fe51ab_8c8a_4b5c_3a5f_336b659e0c62
  99df5c83_e8b2_f91b_cbd6_250b80d82602["newSize2idxTab()"]
  9682c31b_1e8c_cdd5_584a_e9f43b2c752a -->|calls| 99df5c83_e8b2_f91b_cbd6_250b80d82602
  style 9682c31b_1e8c_cdd5_584a_e9f43b2c752a fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

buffer/src/main/java/io/netty/buffer/SizeClasses.java lines 117–186

    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++;
            }
            if (sz[SUBPAGE_IDX] == yes) {
                nSubpages++;
                smallMaxSizeIdx = idx;
            }
            if (sz[LOG2_DELTA_LOOKUP_IDX] != no) {
                lookupMaxSize = sizeOf(sz, directMemoryCacheAlignment);
            }
        }
        this.smallMaxSizeIdx = smallMaxSizeIdx;
        this.lookupMaxSize = lookupMaxSize;
        this.nPSizes = nPSizes;
        this.nSubpages = nSubpages;
        this.nSizes = nSizes;

        this.pageSize = pageSize;
        this.pageShifts = pageShifts;
        this.chunkSize = chunkSize;
        this.directMemoryCacheAlignment = directMemoryCacheAlignment;

        //generate lookup tables
        this.sizeIdx2sizeTab = newIdx2SizeTab(sizeClasses, nSizes, directMemoryCacheAlignment);
        this.pageIdx2sizeTab = newPageIdx2sizeTab(sizeClasses, nSizes, nPSizes, directMemoryCacheAlignment);
        this.size2idxTab = newSize2idxTab(lookupMaxSize, sizeClasses);
    }

Domain

Subdomains

Frequently Asked Questions

What does SizeClasses() do?
SizeClasses() is a function 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 117.
What does SizeClasses() call?
SizeClasses() calls 4 function(s): newIdx2SizeTab, newPageIdx2sizeTab, newSize2idxTab, newSizeClass.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free