static Entry newInstance(Object msg, int size, long total, ChannelPromise promise) {
Entry entry = RECYCLER.get();
entry.msg = msg;
entry.pendingSize = size + CHANNEL_OUTBOUND_BUFFER_ENTRY_OVERHEAD;
entry.total = total;
entry.promise = promise;
return entry;
}
在Netty中,创建一个Entry时需要加上96,是因为Entry对象中包含了一个Object数组,用于存储消息的内容。而这个Object数组的大小是根据消息的长度动态计算的,具体计算方式是:
int objectSize = length >>> 3;
if ((length & 7) != 0) {
objectSize ++;
}
其中,length是消息的长度,>>>3表示将length右移3位,相当于除以8,计算出消息内容需要占用的Object数组的大小。如果消息长度不能被8整除,那么需要再加上1个Object的大小。
而96这个数字,是因为在计算Object数组大小时,还需要额外的空间来存储一些元数据,比如消息的类型、是否需要压缩等信息。这些元数据占用的空间大小是固定的,为96字节。因此,在创建Entry时需要额外分配96字节的空间,用于存储这些元数据。
在后续的使用中,这个数字并没有特殊的用途,只是用于计算Object数组的大小和分配Entry对象的空间。