一,NIO零拷贝结合前文对 NIO 核心组件(Channel/Buffer)、I/O 多路复用及高并发场景的讨论,零拷贝(Zero-Copy) 是 NIO 提升高性能的关键技术之一。它旨在减少数据在内核空间与用户空间之间的冗余拷贝次数,以及上下文切换开销。一、 传统 I/O vs 零拷贝:数据流向对比传统 I/O(4 次拷贝,4 次上下文切换)当应用程序通过 read() 和 write() 传输文件数据时:DMA 拷贝:磁盘数据 - 内核缓冲区(Page Cache)。CPU 拷贝:内核缓冲区 - 用户缓冲区(Application Buffer)。CPU 拷贝:用户缓冲区 - Socket 缓冲区(Kernel Socket Buffer)。DMA 拷贝:Socket 缓冲区 - 网卡协议引擎(NIC)。痛点:数据在内核和用户态之间来回拷贝,消耗 CPU 和内存带宽。2. NIO 零拷贝(2 次拷贝,2 次上下文切换)利用 FileChannel.transferTo() 或 sendfile 系统调用:DMA 拷贝:磁盘数据 - 内核缓冲区(Page Cache)。CPU 拷贝:内核缓冲区 - Socket 缓冲区(仅拷贝描述符信息,非数据本身,或通过 gather 操作)。DMA 拷贝:Socket 缓冲区 - 网卡协议引擎。优势:数