
基于前文对 NIO Selector 消息边界处理、compact() 缓冲区管理及粘包/拆包逻辑的讨论,避免容量超出(Buffer Overflow) 的核心在于建立动态扩容机制与严格的上限约束,防止因单条消息过大或残包积压导致内存溢出(OOM)。一、核心防御策略设置最大消息阈值(防 OOM)机制:在解析长度字段后,立即校验 length 是否超过预设最大值(如 10MB)。动作:若超限,直接关闭连接并记录日志,拒绝处理恶意或异常大数据包。动态扩容机制(防截断)机制:当缓冲区剩余空间不足以容纳下一条完整消息时,自动创建更大的 ByteBuffer。动作:将旧数据拷贝至新缓冲区,并通过 key.attach(newBuffer) 更新关联对象。定期重置缓冲区(防泄漏)机制:若缓冲区因多次扩容变得过大,而在后续通信中仅传输小数据,会造成内存浪费。动作:在连接空闲或处理完大包后,将缓冲区重置为初始大小。二、代码实现示例privatestaticfinalintMAX_MESSAGE_SIZE=10*1024*1024;// 10MBprivatestaticfinalintINITIAL_BUFFER_SIZE=1024;privatevoidhandleRead(SelectionKeykey)throwsIOException{SocketChannelclient=(SocketChannel)key.channel();ByteBufferbuffer=(