Skip to content

Latest commit

 

History

History
70 lines (37 loc) · 2.67 KB

22学习盛宴:UnpooledHeapByteBuf 非池化的堆内存的核心原理.md

File metadata and controls

70 lines (37 loc) · 2.67 KB

22 学习盛宴:UnpooledHeapByteBuf 非池化的堆内存的核心原理

今天学习一下非池化的堆内存。

首先看一下 UnpooledHeapByteBuf 的继承关系

UnpooledHeapByteBuf的重要属性

前面已经提到过,ByteBuf这部分使用到了模版模式,有点类似于AQS。

这是定义的抽象方法,具体的setBytes由具体的子类来实现,不同功能的子类实现自己的逻辑。

getByte方法逻辑差不多

UnpooledHeapByteBuf内存是如何分配的

不建议使用构造器分配,而是使用分配器进行分配。

newHeapBuffer也是一个模版方法,不同子类有自己的实现。

 protected ByteBuf newHeapBuffer(int initialCapacity, int maxCapacity) {
        return (ByteBuf)(PlatformDependent.hasUnsafe() ? new UnpooledByteBufAllocator.InstrumentedUnpooledUnsafeHeapByteBuf(this, initialCapacity, maxCapacity) : new UnpooledByteBufAllocator.InstrumentedUnpooledHeapByteBuf(this, initialCapacity, maxCapacity));
    }

new byte[] 方式创建数组,如果不主动释放,则由GC程序进行回收。

内存分配钩子方法allocateArray的实现