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大小,都取决于该数组的值。
如果读取操作不能连续两次填充一定数量的分配缓冲区,则会逐渐减少预期的可读字节数。
否则,它会继续返回相同的预测。

浙公网安备 33010602011771号