Netty Jemalloc4算法-核心数据结构图示

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

Jemalloc4算法关键数据结构图示

想要看懂上图, 要点如下:

1. 小于等于16777216字节的空间,从chunk(一个16M的字节数组)中分配,chunk是一个包含2048个page的run。

2. 每次分配, 会从chunk切割得到一个能容纳请求大小且最接近请求大小的run。

3. run是一个或多个page的集合,一个page是8Kb。

4. 空闲的run,其句柄信息会被放入优先队列数组runsAvail的槽位中。 比如:

  1. handle1,handle2分别代表的run1和run2,长度是2个page,会被放到runsAvail第1个槽位
  2. handle3代表的run3,长度是4个page,会被放到runsAvail第3个槽位
  3. 最小的run包含一个page,索引是0,存储在runsAvail[0],最大的run是2048个page,存储在runsAvail[39]。

5. 可以根据handle计算run在chunk中的物理位置,比如起始偏移量和截止偏移量。 起始、截至偏移量会被放入runsAvailMap代表的映射结构中,value是handle本身

6. handle是一个64bit的长整型数字。该数字编码了run的起始位置和page的数量。详解结构如下图所示:

handle的结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值