Class SizeClasses

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

final class SizeClasses extends java.lang.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 Summary

    Fields
    Modifier and Type
    Field
    Description
    (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

    Constructors
    Constructor
    Description
    SizeClasses(int pageSize, int pageShifts, int chunkSize, int directMemoryCacheAlignment)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private 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
     
    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)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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)