Home / Class/ AdaptiveCalculator Class — netty Architecture

AdaptiveCalculator Class — netty Architecture

Architecture documentation for the AdaptiveCalculator class in AdaptiveCalculator.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  2f0e419b_c7aa_e7dc_bae6_34e16344d97c["AdaptiveCalculator"]
  b6074012_9ec6_07d6_2e86_ce983dc06452["AdaptiveCalculator.java"]
  2f0e419b_c7aa_e7dc_bae6_34e16344d97c -->|defined in| b6074012_9ec6_07d6_2e86_ce983dc06452
  e4c6718e_20f4_617e_2a77_e29ca7eba9d2["getSizeTableIndex()"]
  2f0e419b_c7aa_e7dc_bae6_34e16344d97c -->|method| e4c6718e_20f4_617e_2a77_e29ca7eba9d2
  f9ed7c4e_7457_4cd3_369d_31d2b8270cf4["AdaptiveCalculator()"]
  2f0e419b_c7aa_e7dc_bae6_34e16344d97c -->|method| f9ed7c4e_7457_4cd3_369d_31d2b8270cf4
  d410ae4c_f791_89af_3305_5d66c5905f9c["record()"]
  2f0e419b_c7aa_e7dc_bae6_34e16344d97c -->|method| d410ae4c_f791_89af_3305_5d66c5905f9c
  76ec0871_3b42_6e92_a465_232b3a1a07e4["nextSize()"]
  2f0e419b_c7aa_e7dc_bae6_34e16344d97c -->|method| 76ec0871_3b42_6e92_a465_232b3a1a07e4

Relationship Graph

Source Code

common/src/main/java/io/netty/util/internal/AdaptiveCalculator.java lines 28–136

public final class AdaptiveCalculator {
    private static final int INDEX_INCREMENT = 4;
    private static final int INDEX_DECREMENT = 1;

    private static final int[] SIZE_TABLE;

    static {
        List<Integer> sizeTable = new ArrayList<Integer>();
        for (int i = 16; i < 512; i += 16) {
            sizeTable.add(i);
        }

        // Suppress a warning since i becomes negative when an integer overflow happens
        for (int i = 512; i > 0; i <<= 1) {
            sizeTable.add(i);
        }

        SIZE_TABLE = new int[sizeTable.size()];
        for (int i = 0; i < SIZE_TABLE.length; i ++) {
            SIZE_TABLE[i] = sizeTable.get(i);
        }
    }

    private static int getSizeTableIndex(final int size) {
        for (int low = 0, high = SIZE_TABLE.length - 1;;) {
            if (high < low) {
                return low;
            }
            if (high == low) {
                return high;
            }

            int mid = low + high >>> 1;
            int a = SIZE_TABLE[mid];
            int b = SIZE_TABLE[mid + 1];
            if (size > b) {
                low = mid + 1;
            } else if (size < a) {
                high = mid - 1;
            } else if (size == a) {
                return mid;
            } else {
                return mid + 1;
            }
        }
    }

    private final int minIndex;
    private final int maxIndex;
    private final int minCapacity;
    private final int maxCapacity;
    private int index;
    private int nextSize;
    private boolean decreaseNow;

    public AdaptiveCalculator(int minimum, int initial, int maximum) {
        checkPositive(minimum, "minimum");
        if (initial < minimum) {
            throw new IllegalArgumentException("initial: " + initial);
        }
        if (maximum < initial) {
            throw new IllegalArgumentException("maximum: " + maximum);
        }

        int minIndex = getSizeTableIndex(minimum);
        if (SIZE_TABLE[minIndex] < minimum) {
            this.minIndex = minIndex + 1;
        } else {
            this.minIndex = minIndex;
        }

        int maxIndex = getSizeTableIndex(maximum);
        if (SIZE_TABLE[maxIndex] > maximum) {
            this.maxIndex = maxIndex - 1;
        } else {
            this.maxIndex = maxIndex;
        }

        int initialIndex = getSizeTableIndex(initial);
        if (SIZE_TABLE[initialIndex] > initial) {
            this.index = initialIndex - 1;

Frequently Asked Questions

What is the AdaptiveCalculator class?
AdaptiveCalculator is a class in the netty codebase, defined in common/src/main/java/io/netty/util/internal/AdaptiveCalculator.java.
Where is AdaptiveCalculator defined?
AdaptiveCalculator is defined in common/src/main/java/io/netty/util/internal/AdaptiveCalculator.java at line 28.

Analyze Your Own Codebase

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

Try Supermodel Free