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

news2024/11/13 20:00:50
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的结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/440578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

消息队列的选型

目录 消息队列的比较: kafka的架构: kafka为什么可以做到这么高的吞吐量: kafka分区类型: 请看下篇文章:生产者 ACK的配置 消息队列的比较: 消息队列的产品有很多中比如:React MQ 、Kafka等。 为什么…

一文速学数模-季节性时序预测SARIMA模型详解+Python实现

目录 前言 一、季节时间序列模型概述 二、SARIMA模型定义 三.SARIMA模型算法原理 1.季节差分:消除季节单位根 2.ARIMA模型 1.自回归(AR) 2.差分(I) 3.移动平均(MA) 4.ARIMA 四.SARIMA模型Python实现 1.数据预处理 季节性分析 ADF检验 序列平稳化 2.模…

C语言学习分享(第四次)------分支和循环语句

分支和循环语句 1. 前言2. 什么是语句?3. 分支语句(选择结构)3.1 if语句3.11 代码块{}的作用3.12 悬空else3.13 练习 3.2 switch语句3.21 在switch语句中的 break3.22 switch语句中的default子句3.23 练习 4. 循环语句4.1 while循环4.11 while循环中的break4.12 while循环中的…

DNS服务器配置与使用【CentOS】

从本质上说,DNS是一个分布数据库,是一个树形结构(不是网状)——层次结构 DNS查找过程就是 回溯的过程(递归、迭代) www.xxx.edu.cn(属于四层结构) 查询DNS:域名到IP地址的…

Mysql 学习(五)InnDB 存储引擎-B+树索引的使用

基础知识 了解了表索引的底层是B树结构,我们也要学会如何将这个结构的优势发挥出来,我们先来回顾上一节的重点,也就是总结一下B树的特点索引对应的是一棵B树,而B树对应的很多层,每一层存储的数据对应的是下一层节点的…

使用VS2022打包C#项目生成setup文件并部署

首先安装工具 新建Setup项目 先将\bin\Debug下的生成文件添加到里面 添加文件夹将我们需要的文件放入 添加项目输出 在用户桌面添加快捷方式 简单的安装 其实右键项目》生成,然后就在debug这个目录下 下一步下一步就可以了 安装好桌面就有了 添加卸载…

如何把较大的word文档压缩变小,3个高效处理法

在日常工作和学习中,我们经常使用word文档来创建和编辑文件。由于Word文档提供了创建专业和精美文档的便捷工具,并且能够节省用户大量的时间,因此是用户使用频率最高的文字处理程序之一。然而,一些较大的Word文档会占用大量存储空…

【JAVA程序设计】(C00129)基于Springboot+Vue前后端分离的在线考试管理系统

基于SpringbootVue前后端分离的在线考试管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 基于Springbootvue开发的前后端分离的学生考试系统为三个角色:系统管理员、教师、学生 管理员角色包含以下功能: 题库管理、试题管理、考试管理、阅…

太阳能电池IV测试软件的主要功能,太阳能电池特性测试

太阳能电池测试软件是一种专门用于测试太阳能电池的软件。太阳能电池是一种能够将太阳能转化为电能的装置,它的性能直接影响到太阳能电池发电系统的效率和稳定性。因此,太阳能电池测试软件的开发和使用对于太阳能电池行业的发展具有非常重要的意义。 一、…

[ARM+Linux] 基于全志h616外设开发笔记

修改用户密码 配置网络 nmcli dev wifi 命令扫描周围WIFI热点 nmcli dev wifi connect xxx password xxx 命令连接WiFi 查看ip地址的指令: ifconfig ip addr show wlan0 SSH登录 这是企业开发调试必用方式,比串口来说不用接线,前提是接入网络…

手把手带你了解《线程池》

文章目录 线程池的概念池的目的线程池的优势为什么从池子里拿线程更高效?构造方法参数讲解线程拒绝策略模拟实现线程池一个线程池设置多少线程合适? 线程池的概念 线程池:提前把线程准备好,创建线程不是直接从系统申请&#xff0…

【linux】——日志分析

文章目录 1. 日志文件1.1 日志文件的分类1.2 日志文件保存位置1.2.1 内核及系统日志1.2.2 日志消息的级别1.2.3 日志记录的一般格式1.2.4 用户日志分析 程序日志分析日志管理策略 远程收集日志 1. 日志文件 1.1 日志文件的分类 ● 日志文件是用于记录Linux系统中各种运行消息的…

Flutter PC桌面端 控制应用尺寸是否允许放大缩小

一、需求 桌面端中,登录、注册、找回密码页面不允许用户手动放大缩小,主页面允许 二、插件 window_manager 使用教程请参照这篇博客:Flutter桌面端开发——window_manager插件的使用 题外话: 之前使用的是bitsdojo_window插件…

202303-第四周-山川软件产品资讯

山川软件愿为您提供最优质的服务。 您的每一个疑问都会被认真对待,您的每一个建议都将都会仔细思考。 我们希望人人都能分析大数据,人人都能搭建应用。 因此我们将不断完善DEMO、文档、以及视频,期望能在最大程度上快速帮助用户快速解决问…

3、Typescript中补充的六个类型

1、元组 元组可以看做是数组的拓展,它表示已知元素数量和类型的数组。确切地说,是已知数组中每一个位置上的元素的 类型,来看例子: let tuple: [string, number, boolean]; tuple ["a", 2, false]; tuple [2, "…

FPGA | 延迟模型

实际逻辑元器件和它们之间的传输路径都会存在延迟。因此,必须检查设计中的延迟是否满足实际电路的时序约束要求。可以用时序仿真的方法来检查时序(timing),即在仿真时向元件或路径中加入和实际相符的延迟信息,并进行相…

4.34、组播(多播)

4.34、多播 1.组播(多播)的介绍①组播地址②如何设置组播(组播的使用) 2.代码编写①服务端②客户端 1.组播(多播)的介绍 单播地址标识单个 IP 接口,广播地址标识某个子网的所有 IP 接口,多播地址标识一组 IP 接口。单播和广播是寻…

ThreadPoolExecutor原理剖析

1.前言 1.1 为什么要使用线程池? 线程池主要为了解决两个问题 一是当执行大量异步任务时,线程池能够提供较好的性能,避免了重复创建和销毁线程带来的开销二是线程池提供了一种资源限制和管理的手段,比如限制线程个数&#xff0…

【蓝桥杯】最难算法没有之一· 动态规划真的这么好理解?(引入)

欢迎回到:遇见蓝桥遇见你,不负代码不负卿! 目录 一、何为动态规划DP 二、记忆化搜索 典例1.斐波那契数列 方法一:暴力递归 方法二:记忆化搜索 变形题 典例2:爬楼梯(青蛙跳台阶&#xf…

海睿思分享 | 低而不LOW的低代码开发

低代码(Low-Code) 是指输出最少的代码,快速完成软件系统开发,进而实现降低开发成本的成效。 Low-Code 中的“Low”与网络热词“LOW”同音同字,前者通常理解为低成本或少量的代码输出,后者是对低认知已见问…