Netty在创建一个Entry时为什么需要加上96,这个数字在后续有什么特殊使用的地方吗?

        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对象的空间。