> 文章列表 > Netty Jemalloc4算法-核心数据结构图示
Netty Jemalloc4算法-核心数据结构图示
网友:ne
文章列表
2024-03-22 02:34:02

Netty 从4.1.52版本开始,其内存分配算法,从jemalloc3 切换到了 jemalloc4。本文给出该算法涉及的核心数据结构图示:

想要看懂上图, 要点如下:
1. 小于等于16777216字节的空间,从chunk(一个16M的字节数组)中分配,chunk是一个包含2048个page的run。
2. 每次分配, 会从chunk切割得到一个能容纳请求大小且最接近请求大小的run。
3. run是一个或多个page的集合,一个page是8Kb。
4. 空闲的run,其句柄信息会被放入优先队列数组runsAvail的槽位中。 比如:
- handle1,handle2分别代表的run1和run2,长度是2个page,会被放到runsAvail第1个槽位
- handle3代表的run3,长度是4个page,会被放到runsAvail第3个槽位
- 最小的run包含一个page,索引是0,存储在runsAvail[0],最大的run是2048个page,存储在runsAvail[39]。
5. 可以根据handle计算run在chunk中的物理位置,比如起始偏移量和截止偏移量。 起始、截至偏移量会被放入runsAvailMap代表的映射结构中,value是handle本身
6. handle是一个64bit的长整型数字。该数字编码了run的起始位置和page的数量。详解结构如下图所示:
