ByteBuf 是如何进行自动创建和自动是释放的呢,这个过程是Netty封装起来了,下面我门一起探索一些吧!
今天看一下ByteBuf是如何进行自动创建的。
channel1 入站数据的读取
这个在NioEventLoop核心原理章节提到过。
下面方法中 当通道中有可读时间之后,调用了 unsafe.read()
方法。
下面进入到read方法:
这里通过config.getAllocator() 方法进行ByteBuf的自动创建,这个内存分配器一般都是使用默认的,池化的内存分配器,这个也可以自己 在引导类进行配置。 如下所示:
到此已经完成了channel中的数据读取到了ByteBuf中了,下面就是讲ByteBuf的数据提交的流水线中了:
那接下来就是我们比较熟悉的 handle开发了。 就是我们开发人员接触的比较多的部分。
内存分配器会调用上面的方法进行判断当前系统是否支持unsafe,比如安卓系统就不支持,就会直接分配堆内存。 如果支持unsafe,则会优先分配直接内存。
具体分配缓冲区的时候呢,也有两种情况,一种是池化的(默认),还有一种飞池化的