Skip to content

零拷贝

  1. ByteBuf 可以直接使用直接内存。

    Socket 通信如果采用堆内存的话,需要将堆里的对象拷贝到堆外,进行一次对象拷贝。

    原因是因为堆里面的对象可能会随着垃圾回收改变对象地址,所以对该对象的引用更新地址。

    但是 Socket 没有更新对象地址动作,需要的是一个固定的地址。所以堆内存不适合 Socket 使用。只能将对象拷贝到直接内存然后使用。

    ByteBuf 直接使用直接内存,减少了对象拷贝

  2. Netty 提供了组合 Buffer,可以将多个 Buffer 合并为一个。

    传统通过内存拷贝的方式将几个小Buffer合并成一个大的Buffer。

    而 Netty 无需内存拷贝就可以聚合 Buffer。

  3. Netty 的文件传输采用transferTo,直接发给 Channel,避免进行内存拷贝。