Class SizeClasses

java.lang.Object
io.netty.buffer.SizeClasses
All Implemented Interfaces:
SizeClassesMetric

final class SizeClasses extends Object implements SizeClassesMetric
SizeClasses requires 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 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 interface SizeClassesMetric
      Returns:
      size
    • sizeIdx2sizeCompute

      public int sizeIdx2sizeCompute(int sizeIdx)
      Description copied from interface: SizeClassesMetric
      Computes size according to sizeIdx.
      Specified by:
      sizeIdx2sizeCompute in interface SizeClassesMetric
      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 interface SizeClassesMetric
      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 interface SizeClassesMetric
      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 interface SizeClassesMetric
      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 interface SizeClassesMetric
      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 interface SizeClassesMetric
      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 interface SizeClassesMetric
      Parameters:
      size - request size
      Returns:
      normalized size
    • normalizeSizeCompute

      private static int normalizeSizeCompute(int size)