allocate
PoolChunk分配内存空间时可调用allocate
方法来分配,具体的源码过程如下:
从代码中可以看出会根据分配的内存大小决定分配的是subpage还是normal的page,接下来具体分析以下方法:
1、 allocateSubpage
;
2、 allocateRun
;
3、 initBuf
;
allocateSubpage
subpage.allocate()
在PoolSubPage中已经分析过,接下来具体分析allocateRun
方法。
allocateRun
具体的过程在上图中已逐步分析,接下来继续具体分析:
1、 removeAvailRun0()
,删除runsAvailMap
记录的可用run的起始位置信息及末尾信息;
2、 splitLargeRun()
,从可用的run中分配所需的run,并更新剩余可用run的信息,即更新runsAvail和runsAvailMap;
3、 runSize()
,从handle中获取具体的大小;
removeAvailRun0
splitLargeRun
这个方法获取的handle记录的是已分配的内存,不是可用内存的handle。
runSize
insertAvailRun
更新可用run信息的availsRun
数组、可用run的起始位置信息及末尾信息的runsAvailMap
。
initBuf
这里先不深入探讨PooledByteBuf.init()
方法,后续再分析。
至此,PoolChunk的内存分配allocate()方法分析至此完毕。
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: