Skip to content

Latest commit

 

History

History
62 lines (28 loc) · 2.08 KB

20.彻底明白ByteBuf的自动创建.md

File metadata and controls

62 lines (28 loc) · 2.08 KB

20 彻底明白ByteBuf的自动释放.md

ByteBuf 是如何进行自动创建和自动是释放的呢,这个过程是Netty封装起来了,下面我门一起探索一些吧!

今天看一下ByteBuf是如何进行自动创建的。

首先确认BuffBuf创建的最源头在哪里?

channel1 入站数据的读取

这个在NioEventLoop核心原理章节提到过。

下面方法中 当通道中有可读时间之后,调用了 unsafe.read() 方法。

下面进入到read方法:

这里通过config.getAllocator() 方法进行ByteBuf的自动创建,这个内存分配器一般都是使用默认的,池化的内存分配器,这个也可以自己 在引导类进行配置。 如下所示:

到此已经完成了channel中的数据读取到了ByteBuf中了,下面就是讲ByteBuf的数据提交的流水线中了:

那接下来就是我们比较熟悉的 handle开发了。 就是我们开发人员接触的比较多的部分。

在分配ByteBuf的时候做了什么?

内存分配器会调用上面的方法进行判断当前系统是否支持unsafe,比如安卓系统就不支持,就会直接分配堆内存。 如果支持unsafe,则会优先分配直接内存。

具体分配缓冲区的时候呢,也有两种情况,一种是池化的(默认),还有一种飞池化的

总结一下ButeBuf的自动创建