allocateNormal
在前面分析PoolArena的分配内存的方法中,每次分配都是先从本地线程缓存中分配,本地线程缓存PoolThreadCache的分配方法如下:
分配过程主要有两步:
- 从PoolThreadCache的缓存数组中获取相应大小的缓存cache
- 将需要缓存的数据放入该cache中
cacheForNormal()
从缓存数组中获取相应的cache。
allocate()
在allocate的过程中又分为两步:
- 将需要缓存的数据存入cache中
- 如果分配太过于频繁则要把使用频率低的放回公共池arena中供其他线程使用
将需要缓存的数据存入cache中:
MemoryRegionCache中存放数据的对象数据结构如下:
将使用频率过低的内存块放回公共池arena中:
add()
在PoolArena中如果要释放一个内存块时会先把它占的位置存到本地线程缓存中再将它的数据清空,这样下次需要使用内存的时候可以快速的获取到该块空间,过程如下:
接下来继续分析cache()
和cache.add()
方法
获取cache
缓存数据add()
free()
如果当前线程结束了要将它缓存的内存空间交还给arena,过程如下:
free具体某个缓存数组的过程如下:
至此,PoolThreadCache的功能分析至此完毕,感谢阅读。