46、Netty源码分析:PoolChunk.allocate

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()方法分析至此完毕。
*

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: