allocate
PoolChunk分配内存空间时可调用allocate方法来分配,具体的源码过程如下:

从代码中可以看出会根据分配的内存大小决定分配的是subpage还是normal的page,接下来具体分析以下方法:
allocateSubpageallocateRuninitBuf
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()方法分析至此完毕。




















