大家都知道 Tomcat 用NIO 处理瞬时高并发
(一个Selector 监听多个Channel,一个线程
管几千连接),但Tomcat 它还用NIO解决了
另外三个生产问题:

  1. Zero-Copy文件传输
    处理静态文件时,用FileChannel.transferTo()
    实现零拷贝。传统IO要经过4次数据拷贝(文
    件→内核→用户空间→ Socket→网卡),
    零拷贝直接让内核把文件从磁盘搬到网卡,拷
    贝次数降到2次,CPU和内存占用都大幅下
    降。下载大文件、CDN静态资源分发场景下性
    能提升明显。
    2.超时检查防慢客户端
    每个连接记录lastRead和lastWrite时间戳,
    Poller 线程每轮检查(now- lastRead)(从上次读
    到数据到现在,过了多久)大于 timeout就主
    动断开。防止慢客户端(网络差、恶意攻击)
    长时间占着连接不发数据,把服务器连接池耗
    光。公网服务必备,特别是移动端网络不稳定
    时。
  2. Channel 对象池减少GC
    用SynchronizedStack缓存NioChannel和
    ByteBuffer,连接关闭时不是直接销毁,而是
    reset)后放回池子复用。高并发场景下,频繁
    创建/销毁这些对象会触发大量 Young ,对
    象池能让GC 频率下降不少的。
    小结:Tomcat 用NIO不只是扛并发,还处理
    了文件传输效率、资源耗尽风险、GC压力三
    个实际问题。日常开发中,可以根据业务需求
    实际情况,进行借用。