Netty 的 ByteBuf 实现非常复杂,本章我们会宏观的从整体方向对 ByteBuf 进行分析。
ByteBuf 是一个抽象类,它的主要继承关系如下:
从上面的关系图中,我们可以看到 ByteBuf 的子类众多,它大致可以从三个维度来进行分类
从上面的讲解中,我们可以进一步得到 ByteBuf 会有六种组合,Pool(池化内存)和 Unpooled(非池化内存);Unsafe 和 非 Unsafe;heap(堆内内存)和 Direct(堆外内存)。
ByteBuf 最基本的一些操作在 AbstractByteBuf 中已经实现了,它的众多子类中采用不同的策略来对内存分配空间。
类 | 描述 |
---|---|
PooledHeapByteBuf | 池化的堆内缓冲区 |
PooledUnsafeHeapByteBuf | 池化的Unsafe堆内缓冲区 |
PooledDirectByteBuf | 池化的直接(堆外)缓冲区 |
PooledUnsafeDirectByteBuf | 池化的 Unsafe 直接(堆外)缓冲区 |
UnpooledHeapByteBuf | 非池化的堆内缓冲区 |
UnpooledUnsafeHeapByteBuf | 非池化的 Unsafe 堆内缓冲区 |
UnpooledDirectByteBuf | 非池化的直接(堆外)缓冲区 |
UnpooledUnsafeDirectByteBuf | 非池化的 Unsafe 直接(堆外)缓冲区 |
本章我们宏观的从整体方向对 ByteBuf 进行分析,知道了可以从三个维度来对其子类进行分类,分别为池化内存,堆外内存和直接对对象内存进行操作。