当前位置: 首页 > article >正文

《Netty》从零开始学netty源码(四十六)之PooledByteBuf

PooledByteBuf

Netty中一大块内存块PoolChunk默认大小为4MB,为了尽可能充分利用内存会将它切成很多块PooledByteBufPooledByteBuf的类关系图如下:

在这里插入图片描述

PooledUnsafeDirectByteBufPooledUnsafeHeapByteBuf直接暴露对象的底层地址。

PooledByteBuf的创建过程开销很大,高并发情况下进行网络I/O时会创建大量的实例,为了降低系统开销,Netty将创建过的PooledByteBuf进行缓存重复利用。它的属性如下:

在这里插入图片描述

它的方法中比较重要的有:从channel中读数据getBytes()、从channel中写数据setBytes()、动态扩容capacity()、分配缓存allocate()、回收缓存deallocate()、回收利用recycle()

getBytes

在这里插入图片描述

分配得到的字节缓冲区与memory共享底层数据,但读/写索引单独维护。

checkIndex

在这里插入图片描述

ensureAccessible()

在这里插入图片描述

checkIndex0

在这里插入图片描述

_internalNioBuffer

newInternalNioBuffer()方法为抽象方法,此处与memory类型有关,可能是直接内存或者堆内存,因此其实现由具体的子类实现。

本文分析至此,更多后文再具体分析,感谢阅读。
请添加图片描述


http://www.kler.cn/news/16234.html

相关文章:

  • 不能使用chatGPT?这3个平替甚至比chatGPT更强
  • 万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 2 (传统机器学习方法如何选择)...
  • 《孙子兵法》中关于领导力的一个不错的描述
  • 创建NAT模式KVM虚拟机
  • spring常用的事务传播行为
  • CSS(二)-- 选择器的运用(针对基本选择器和复合选择器的详细解析)
  • 一文了解使用Moonbeam原生跨链的潜力项目
  • 【Java笔试强训 27】
  • 【Leetcode -86.分隔链表 -92.反转链表Ⅱ】
  • LeetCode_字符串_简单_415.字符串相加
  • 终于把 vue-router 运行原理讲明白了(二)!!!
  • 票务app开发案例分享
  • 【JAVA】#详细介绍!!! 文件操作之File对象(1)!
  • 从信息泄露到权限后台
  • Java面试题队列
  • Pandoc 从入门到精通,你也可以学会这一个文本转换利器
  • 2的幂次方
  • 微软开源AI修图工具让老照片重现生机
  • Java版本电子招标采购系统源代码—企业战略布局下的采购寻源
  • 网络安全漏洞分析之远程代码执行
  • 长/短 链接/轮询 和websocket
  • python深度强化学习模型的原理、应用!
  • Java 中的包是什么?如何创建和使用包?(八)
  • 第11章 项目人力资源管理
  • HTTP基础知识
  • 【博弈论】【第一章】博弈论导论
  • 跟着杰哥学强化学习:q-learning的一些思考
  • 有仰拍相机和俯拍相机时,俯拍相机中心和吸嘴中心的标定
  • 研究生,但是一直摆烂——想办法解决
  • 数据治理在学术上的发展史以及未来展望