Netty中的缓存Bytebuf

首先我们来明确一下Buffer(缓存)
JavaNIO中的Buffer、Netty中的Buffer、Netty中的Bytebuf这是3个不同的类,但实现的内容和完成的功能几乎一致,最原始的是JavaNIO中的Buffer实现,最先进的是Netty中Bytebuf的实现,下面我们来看Bytebuf类

Netty中的Buffer讲解

http://t.zoukankan.com/TomSnail-p-6218163.html
https://www.cnblogs.com/shanheyongmu/p/16490399.html
源码讲解:https://zhuanlan.zhihu.com/p/579902298

Netty中的Bytebuf类
(1)Bytebuf会自动扩容
在这里插入图片描述
在这里插入图片描述
(4)组成(四部分组成:废弃部分、可读部分、可写部分、可扩容部分),因为这种结构在读写之间不需要进行flip转换。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明:
每个Bytebuf都实现的这个ReferenceCounted接口,这个接口采用引用计数的方法,也就是这个buffer对象被引用则计数器会+1,调用release计数器-1,计数器为0时,内存被回收,即使该对象还在,但方法不可用
在这里插入图片描述
那么有一个问题,由谁来负责buffer的回收呢,或者由谁来操作buffer的计数器呢?
答案:我们回顾一下是谁与buffer产生io,在Netty中是由handler与buffer产生IO,从而与客户端通信,handler在pipeline中可能是由一系列的handler来构成整个消息的处理过程,当前的这个buffer最终由最后一个引用的handler来负责回收。图中有一个head和tail两个handler,因为这是一个双向链表,如果有一个buffer在调用过程中一直没有被回收,最终在head或tail中调用,会负责回收。如下如所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智博的自留地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值