52、Netty源码分析:PoolArena的内存分配

目录

    • tcacheAllocateSmall()
  • tcacheAllocateNormal()
    • newChunk()
  • allocateHuge()
    • newUnpooledChunk()

PoolArena根据请求大大小主要分配三中类型的内存,小于28KB的分配PoolSubpage,28KB~4MB的分配池化的PoolChunk,4MB以上的分配非池化的内存。

tcacheAllocateSmall()

如果请求的内存空间小于28KB则分配small类型的空间,即PoolSubpage.

*

tcacheAllocateNormal()

如果请求的大小在28KB~4MB之间则分配normal类型的空间,即池化的PoolChunk,采用二分查找的方式从PoolArena的5个利用率不同的list中选取chunk,如果5个list中都无法获得PoolChunk则创建新的chunk,创建成功后分配空间给buf,保存在qInit链表中。

*

newChunk()

*

allocateHuge()

当请求的空间大小大于4MB的时候分配的是非池化的chunk,这种chunk使用结束后直接释放.

*

newUnpooledChunk()

非池化的chunk创建过程与池化的chunk一致,只是不需要传入pageSize、pageShifts、chunkSize等切段使用的参数,因为它只分配一次,使用完毕后会直接释放。

*

至此,PoolArena的内存分配分析完毕,感谢阅读。
全文完,如果觉得文章有点意思,不妨点个“赞”或者“在看”吧,您的每一份正反馈都是对三横兰写作的最大肯定,感谢阅读_

每天坚持一点点,每天进步一点点

坚持是日复一日,质变需日积月累

我是三横兰,那个三横的兰
*

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