《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的功能分析至此完毕,感谢阅读。
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值