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