今天学习一下非池化的堆内存。
前面已经提到过,ByteBuf这部分使用到了模版模式,有点类似于AQS。
这是定义的抽象方法,具体的setBytes由具体的子类来实现,不同功能的子类实现自己的逻辑。
不建议使用构造器分配,而是使用分配器进行分配。
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程序进行回收。