Netty的ByteBuf分析

Netty的ByteBuf分析教程

Netty 的 ByteBuf 实现非常复杂,本章我们会宏观的从整体方向对 ByteBuf 进行分析。

ByteBuf主要继承关系

ByteBuf 是一个抽象类,它的主要继承关系如下:

08 ByteBuf主要功能类继承关系.png

从上面的关系图中,我们可以看到 ByteBuf 的子类众多,它大致可以从三个维度来进行分类

  1. Pooled:池化内存,从预先分配好的内存空间中提取一段连续内存封装成一个 ByteBuf,分给应用程序使用。
  2. Unsafe:是 JDK 底层的一个负责 I/O 操作的对象,可以直接获取对象的内存地址,基于内存地址进行读写操作。
  3. Direct:堆外内存,直接调用 JDK 的底层 API 进行物理内存分配,不在 JVM 的内存中,需要手动释放内存。

从上面的讲解中,我们可以进一步得到 ByteBuf 会有六种组合,Pool(池化内存)和 Unpooled(非池化内存);Unsafe 和 非 Unsafe;heap(堆内内存)和 Direct(堆外内存)。

ByteBuf子类功能总结

ByteBuf 最基本的一些操作在 AbstractByteBuf 中已经实现了,它的众多子类中采用不同的策略来对内存分配空间。

描述
PooledHeapByteBuf 池化的堆内缓冲区
PooledUnsafeHeapByteBuf 池化的Unsafe堆内缓冲区
PooledDirectByteBuf 池化的直接(堆外)缓冲区
PooledUnsafeDirectByteBuf 池化的 Unsafe 直接(堆外)缓冲区
UnpooledHeapByteBuf 非池化的堆内缓冲区
UnpooledUnsafeHeapByteBuf 非池化的 Unsafe 堆内缓冲区
UnpooledDirectByteBuf 非池化的直接(堆外)缓冲区
UnpooledUnsafeDirectByteBuf 非池化的 Unsafe 直接(堆外)缓冲区

Netty的ByteBuf总结

本章我们宏观的从整体方向对 ByteBuf 进行分析,知道了可以从三个维度来对其子类进行分类,分别为池化内存,堆外内存和直接对对象内存进行操作。