PooledByteBufAllocator
通过前面的学习我们大体了解了PooledByteBufAllocator管辖下的数据结构,整体情况如下:
PooledByteBufAllocator主要管理了三类内存,堆内存heapArenas
、直接内存directArenas
、线程缓存PoolThreadCache,前两者是多线程共享的,末者是线程独享的,当PooledByteBufAllocator分配内存的时候先从本地线程获取,减少线程之间的资源竞争,分配失败的情况下才考虑从公共内存池中分配。
PooledByteBufAllocator的各个属性的意义:
smallCacheSize
指的是单个SubPageMemoryRegionCache的大小normalCacheSize
指的是单个NormalMemoryRegionCache的大小chunkSize
指的是PoolChunk的大小
接下来我们通过buffer()方法来探究其分配内存的过程:
PooledByteBufAllocator创建directBuf的源码如下:
在这个过程中虽然没有直接从PoolThreadCache中直接获取内存,但是从前面的学习中我们知道第8步中会先从传入的参数cache中获取。
在分配的过程会根据是否配置了内存泄漏监测来对buf进行包装,如果设置了则会将buf包一层内存泄漏监测的功能。
至此,PooledByteBufAllocator的分析至此结束。