《Netty》从零开始学netty源码(五十)之PoolArena的内存分配

news2024/10/5 17:59:27

目录

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

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

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

我是三横兰,那个三横的兰
请添加图片描述

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

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

相关文章

【C++ 学习 ②】- 类和对象(上)

目录 一、 面向对象的基本理念 1.1 - 什么是对象? 1.2 - 类和对象 1.3 - 面向对象的五条原则 1.4 - 面向过程 vs 面向对象 二、C 中的结构体 三、类的定义 3.1 - 类的两种定义方式 3.2 - 成员变量的命名规范 四、类的访问限定符和封装 4.1 - 访问限定符 …

SPFA + 链式前向星建图【附Java模板】

SPFA算法是什么?它能解决什么样的问题? 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 数据结构与算法专栏的文章图文并茂🦕生动形象🦖简…

P3029 [USACO11NOV]Cow Lineup S 双指针 单调队列

“五一”小长假来了趟上海,在倒数第二天终于有时间做了一会儿题目,A了之后过来写一篇题解 【问题描述】 农民约翰雇一个专业摄影师给他的部分牛拍照。由于约翰的牛有好多品种,他喜欢他的照片包含每个品种的至少一头牛。 约翰的牛都站在一条沿…

[MAUI]模仿iOS应用多任务切换卡片滑动的交互实现

文章目录 原理创建布局创建分布函数创建动效创建绑定数据细节调整首张卡片的处理为卡片添加裁剪跳转到最后一张卡片 项目地址 看了上一篇博文的评论,大家对MAUI还是比较感兴趣的,非常感谢大家的关注,这个专栏我争取周更😉。 App之…

华为OD机试真题(Java),数组拼接(100%通过+复盘思路)

一、题目描述 现在有多组整数数组,需要将它们合并成一个新的数组。 合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。 二、输入描述 第一…

【Python入门篇】——PyCharm的基础使用

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句…

Mysql Sharding-JDBC读写分离

0 课程视频 深入Sharding-JDBC分库分表从入门到精通【黑马程序员】_哔哩哔哩_bilibili 1 基本概念 1.1应用逻辑 1.1.1 msyql 多库 多表 多服务器 1.1.2 通过Sharding-JDBC jar包->增强JDBC 访问多数据源 -> 自动处理成一个数据源 1.1.3 使用数据的人 -> 使用Sh…

Python+Yolov5墙体裂缝识别

程序示例精选 PythonYolov5墙体裂缝识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonYolov5墙体裂缝识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c…

C++类的默认成员函数

文章目录 默认函数构造函数和析构函数构造函数析构函数 拷贝构造函数运算符重载赋值运算符重载赋值运算符重载和构造函数 默认函数 什么是默认函数&#xff1f; 默认函数就是当你使用这个类对象时,这个类会自动调用的函数C中有六个默认成员函数,并且作用各不相同,下面我们来一…

2 ROS2话题通讯基础

2 ROS2话题通讯基础 2.1 ROS2话题通讯介绍2.2 ROS2常用的消息类型介绍2.2.1 std_msgs消息类型2.2.2 geometry_msgs消息类型 2.3 使用C/C创建基础消息类型的话题通讯2.3.1 创建C/C发布话题信息的功能包并配置VSCode环境2.3.2 编写ROS2发布话题节点CPP文件2.3.3 配置C/C发布话题功…

数据结构学习记录——堆的插入(堆的结构类型定义、最大堆的创建、堆的插入:堆的插入的三种情况、哨兵元素)

目录 堆的结构类型定义 最大堆的创建 堆的插入 堆的插入的三种情况 代码实现 哨兵元素 堆的结构类型定义 #define ElementType int typedef struct HNode* Heap; /* 堆的类型定义 */ struct HNode {ElementType* Data; /* 存储元素的数组 */int Size; /* 堆中…

『python爬虫』08. 数据解析之bs4解析(保姆级图文)

目录 1. 安装bs4模块find()findall() 2. 爬取信息测试总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 1. 安装bs4模块 pip install bs4 pip install-i https://pypi.tuna.tsinghua.edu.cn/simplebs4如果遇到报…

[网络原理] HTTP协议

要珍惜时间呀 文章目录 1. HTTP协议概念2. HTTP协议格式2.URL3. GET与POST方法3.1 GET方法3.2 POST方法3.3 GET与POST的区别 1. HTTP协议概念 HTTP协议是应用层协议,TCP/IP协议为传输层协议,负责传输数据.而HTTP协议相当于对传输的数据据怎样处理和使用进行说明. 每次,我们访问…

Mininet+Ryu安装教程

最近要做一个Mininet的网络环境&#xff0c;网络设备由Mininet来模拟&#xff0c;SDN控制器用Ryu来做&#xff0c;为了避免每次重新做再去翻查资料&#xff0c;我在这里系统地整理一遍 硬件需求 我在 VMWare Workstation 16 Player虚拟机上运行的Ubuntu 22.04.1 硬件需求内存…

供应链 | 需求不确定情况下的物料需求规划: 基于随机优化的研究

作者&#xff1a;Simon Thevenin, Yossiri Adulyasak, Jean-Francois Cordeau​ 引用&#xff1a;Thevenin S, Adulyasak Y, Cordeau J F. Material requirements planning under demand uncertainty using stochastic optimization[J]. Production and Operations Management,…

react的项目实战 2

入口文件引入了app这个组件 app这个组件又引入了header这个组件。 然后外面引入这个组件 进行页面的显示 它不会影响到其他页面的组件的样式。 ​​​​​​​

面试必备:接口自动化测试精选面试题大全

目录 一、 请问你是如何做接口测试的&#xff1f; 二、接口测试如何设计测试用例&#xff1f; 三、接口测试执行中需要比对数据库吗&#xff1f; 四、接口测试质量评估标准是什么&#xff1f; 五、接口产生的垃圾数据如何清理 六、其他接口要先获取接口信息&#xff0c;如…

利用wenda实现本地多模态数据的知识获取和推理

近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;技术取得了令人瞩目的进展&#xff0c;为自然语言处理领域带来了巨大的变革&#xff0c;但是大多数LLM都面临着领域适应性的问题&#xff0c;因为它们使用的数据都是公开的数据&#xff0c;在国内&#xff0c;有很多…

Day960.架构现代化-微服务 -遗留系统现代化实战

架构现代化-微服务 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于架构现代化-微服务的内容。 在自治气泡模式的基础上&#xff0c;通过事件拦截来实现数据同步&#xff0c;给气泡和遗留系统之间又加上 API 访问这个通信渠道。 这时的自治气泡就和真正的微服务差不…

Rust - 变量与数据的交互方式(move)

变量与数据的交互方式 - 移动 Rust 中的多个变量可以采用一种比较独特的方式和同一个数据进行交互&#xff0c;如下代码所示&#xff0c;将变量x的值赋给y&#xff1a; fn main() {let x 1;let y x; }我们大概可以推论出上述代码的原理&#xff1a;将1这个整数绑定给x变量&…