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

《Netty》从零开始学netty源码(五十三)之PoolThreadCache的功能

allocateNormal

在前面分析PoolArena的分配内存的方法中,每次分配都是先从本地线程缓存中分配,本地线程缓存PoolThreadCache的分配方法如下:
在这里插入图片描述

分配过程主要有两步:

  1. PoolThreadCache的缓存数组中获取相应大小的缓存cache
  2. 将需要缓存的数据放入该cache中

cacheForNormal()

从缓存数组中获取相应的cache。

在这里插入图片描述

allocate()

在这里插入图片描述

在allocate的过程中又分为两步:

  1. 将需要缓存的数据存入cache中
  2. 如果分配太过于频繁则要把使用频率低的放回公共池arena中供其他线程使用

将需要缓存的数据存入cache中:

在这里插入图片描述

MemoryRegionCache中存放数据的对象数据结构如下:
在这里插入图片描述

将使用频率过低的内存块放回公共池arena中:

在这里插入图片描述

add()

PoolArena中如果要释放一个内存块时会先把它占的位置存到本地线程缓存中再将它的数据清空,这样下次需要使用内存的时候可以快速的获取到该块空间,过程如下:

在这里插入图片描述

接下来继续分析cache()cache.add()方法

获取cache

在这里插入图片描述

缓存数据add()

在这里插入图片描述

free()

如果当前线程结束了要将它缓存的内存空间交还给arena,过程如下:
在这里插入图片描述

free具体某个缓存数组的过程如下:
在这里插入图片描述

至此,PoolThreadCache的功能分析至此完毕,感谢阅读。
请添加图片描述


http://www.kler.cn/a/18092.html

相关文章:

  • 常见的噪声模型+图像中噪声模型的估计+常见的滤波方法(C++)
  • Python如何从HTML提取img标签下的src属性
  • sqoop import将Oracle数据加载至hive,数据量变少,只能导入一个mapper的数据量
  • Java API类与接口:类的转换方法与正则表达式
  • Linux下useradd 和 adduser的区别
  • 【GVN】AWZ算法
  • MySQL面试八股文:索引篇
  • 我把Solon打包成了native image,速度快的惊人
  • 【linux的学习与软件安装】
  • 计算机操作系统实验:页面置换算法的实现
  • 充电桩测试设备TK4800充电桩现校仪检定装置
  • MySQL优化二索引使用
  • 信息安全从业人员职业规划(甲方乙方分别说明)
  • 中兴B860AV2.1-T(M)-高安版-当贝纯净桌面线刷固件包
  • Facebook 用户量十分庞大,为什么还使用 MySQL 数据库?
  • IDEA沉浸式编程体验
  • 锁相环技术,单边带信号,信号的调制
  • MySQL数据库之索引
  • 【SpringMVC】三、SpringMVC获取请求参数与域数据共享
  • Ubuntu20.04安装Vtk9.2.6+PCL1.12.1(成功无报错)
  • 使用asp.net core web api创建web后台,并连接和使用Sql Server数据库
  • Flink dataStream,如何开窗,如何进行窗口内计算
  • BM54-三数之和
  • 盲目自学网络安全只会成为脚本小子?
  • Java入门全网最详细 - 从入门到转行
  • MySQL安装配置教程(保姆级,包含环境变量的配置)适合小白