netty--buffer分配策略

AdaptiveRecvByteBufAllocator 动态分配buffer大小的类。

如果前一次读取完全填满了分配的缓冲区,它将逐渐增加预期的可读字节数。(增加的方式:初始化类的时候,会预先设置好可以动态增加的值,代码如下:)

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

        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);
        }
    }

  数组内存放的值:小于512的值,两个数的差值为16;大于512,值左移1位(相当于乘以2)。

值:16,32,48,64,80,96,112,128,144,160,176,192,208,224,240,256,272,288,304,320,336,352,368,384,400,416,432,448,464,480,496,

512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824

增加和减少的buffer大小,都取决于该数组的值。

如果读取操作不能连续两次填充一定数量的分配缓冲区,则会逐渐减少预期的可读字节数。

否则,它会继续返回相同的预测。

原文地址:https://www.cnblogs.com/chen--biao/p/11333283.html