Golang内存分配

news2024/11/16 7:39:00


Go内存分配语雀笔记整理

    • Golang内存模型设计理念思考
    • 核心代码阅读
      • mspan
      • mcache
      • mcentral中心缓存
      • mheap
      • 分配过程

Golang内存模型设计理念思考

golang内存分配基于TCmalloc模型,它核心在于:空间换时间,一次缓存,多次复用;
为何要有这种缓存机制?如果golang每次分配内存都向操作系统申请,需要切换到内核态发起系统调用,(权级切换时的开销是很大的)代价太高;所以一次缓存,多次复用(类似GMP的设计思想尽可能不切到内核态)

堆mheap这种数据结构就是一次缓存得到的那部分。 在操作系统视角中,mheap就是用户进程缓存的内存,在golang视角中,mheap就是内存的源头
mheap作为进程中的内存来源,全局唯一,具有全局锁,如果mheap直接分配,那么存取性能是非常可怕的,为了提高分配效率,就要实现锁的粒度更细、甚至无锁,goalng借鉴操作系统的多级缓存模型(L1,L2,L3,RAM,磁盘),设计了一种3层缓存模型:mheap、 mcentral、 mchace(GMP中的P相当于一个CPU,而mache就是P本地私有的内存,它冗余了各种等级的mspan,P本地私有不涉及并发行为,所以不需要加锁);

image.png

核心代码阅读

mspan

mspan是最小的内存管理单元,它跟golang设定的对象等级制度紧密关联;mspan结构体的核心字段:相同等级的mspan构成一条双向链表,所以mspan有前后指针; mspan管理整数倍的连续地址的页,所以有管理的内存起始地址,以及连续的页数; mspan的等级意味着它管理的块的大小,所以有一个标志等级的变量(1~67、以及0级处理大对象,等级用unit8来表示,高7位标识等级,最低位标识noscan信息,noscan用于标记当前mspan的内存需不需要在GC的时候进一步扫描,如果对象不包含指针,说明对象没有引用其他对象,那么垃圾回收的时候就不需要进一步扫描了。这样可以提高扫描效率); 分配内存时分配的其实是对应的槽位,所以有一个位图用来记录槽位,比如要分配31B的obj,那么就会向上到等级为32的mspan中根据它的位图找空闲的槽位(这是内部碎片的来源)。这个位图bitmap在后续的垃圾回收中也会使用到。 它的快速查找空闲槽用到了CTZ64算法
image.pngimage.png
image.png

mspan详解:既然相同size class的mspan节点聚集构成一条双向链表,所以mspan节点有next,pre指针,另外一个mspan管理的内存大小从startaddr开始,往后npages个page。当要分配obj的时候,会去alloccache记录的bitmap中去找为1的obj。 alloccache记录的bitmap就是记录obj的槽位
image.png
image.png

源码中核心的点: next、pre指针; startaddr; npages;alloccache(bitmap);spanclass(等级);freeindex(记录bitmap在某位之前的obj都被占用过了,加速找bitmap中Obj为1的槽位)
另外spanclass 是一个uint8 整数,高7位标识1~67+隐藏0级(处理更大对象) 共68个等级,最低位标识noscan信息。noscan标志是用来标记垃圾回收的时候需不需要扫描的标志位。
如果对象不包含指针,说明对象没有引用其他对象,那么垃圾回收的时候就不需要进一步扫描了。这样可以提高扫描效率

mcache

mcache是P的本地私有内存,在单个P内部是没有并发的,所以没有锁; 核心字段: alloc, mcache冗余了一些mspan,具体来说的话是两种,一种noscan类型的无需重复扫描,一种scan类型的。 另外mcache结构体中还有微型对象分配器(<16B)tinyalloc。
image.png
image.png

mcentral中心缓存

mcentral是相同等级mspan构成的两条链表,一条有空间,一条满空间,每个mcentral有一把锁,但是锁的粒度相比mheap更细;所以核心字段的话就是两条链表,一把锁,一个等级;

image.png
image.png

mheap

进程内全局唯一,访问加全局锁(因此对mheap的存取性能是非常可怕的),对于go上层来说mheap是操作系统虚拟内存的抽象,是go进程内部的内存之源,由于向操作系统申请内存这个操作很重,所以mheap一般一次申请比较大(64M)
mheap以8KB的页为最小内存单元,负责将连续的页组装成mspan,使用位图bitmap记录所有页的使用情况,为1说明页已经被mspan组装(不是被使用,组装了不一定使用了)(组装的时候找连续空闲页时为了加速,使用到了空闲页基数树索引辅助) 用heapArena聚合页记录页跟mspan的映射关系(GC的时候根据对象地址找到页是很简单的,但是mspan的记录对象使用情况的bitmap也需要更新,所以需要heapArena记录页跟mspan的映射关系,用来更新mspan的bitmap)。

分配过程

tiny微对象(<16B )的话,走mcache的微型分配器;
(<32KB的对象)优先从mcache中找对应等级mspan中的空槽(无锁),如果mcache兜不住就向上去mcentral;
根据等级去mcentral中的有空闲链表中找到mspan填充mcache(有锁),如果兜不住,继续向上去mheap;
mheap组装mspan填充到mcentral,然后从mspan中取内存(有锁),如果还兜不住,说明进程中没有足够的内存了,此时mheap会向操作系统申请内存(以heapArena为单位64MB);
0级别的大对象(>32KB),直接到mheap中

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

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

相关文章

重大丨深中通道今通车!继港珠澳大桥后,三思再度点亮世界工程

6月30日下午3时&#xff0c;国家重大工程深中通道正式通车试运营&#xff0c;向世界再次展示中国智慧和基建实力。已承接过包括港珠澳大桥海底隧道在内2500多条隧道照明工程的上海三思电子工程有限公司&#xff0c;为这座超级工程提供了LED隧道照明、东西人工岛照明及显示、管理…

HAP官方力作:MEGA项目管理应用正式上线

开发背景 自2024年3月起&#xff0c;明道云推出了MEGA系列应用&#xff0c;基于MEGA Industrial的经营业务&#xff0c;逐步拓展至企业价值链的各个环节&#xff08;MEGA Industrial Co 是明道云预设的一家虚拟公司&#xff0c;主要面向工业制造行业客户&#xff0c;提供产线规…

node_modules/@umijs/runtime“ does not exist in container.

近日&#xff0c;在做pro ant react 项目时&#xff0c;遇到了如下这样的错误&#xff0c;开始通过vs code 的通义灵码折腾了一阵子&#xff0c;后面在csdn上一搜索&#xff0c;马上就找到答案了&#xff0c;特记录一下&#xff0c;后面再遇到这样的问题也就有迹可循了。 参考…

强对抗的 SquidLoader 针对中国企业发起攻击

研究人员近期发现了一种高对抗强度的 Loader&#xff0c;其通过钓鱼邮件附件传递给受害者。根据恶意软件所具备的引诱和规避行为&#xff0c;研究人员将其命名为 SquidLoader。SquidLoader 最早在 2024 年 4 月下旬被发现&#xff0c;但研究人员认为其至少已经活跃了一个月以上…

AE射频电源维修PE-II 10K中频电源维修

AE CESAR射频电源维修 PEII-10K镀膜电源&#xff1b;射频电源RF-5S&#xff1b;RFG3000&#xff1b;RFG3001等系列维修。 主要服务于太阳能光伏、PVD镀膜&#xff0c;半导体薄膜、离子注入、刻蚀&#xff0c;平板显示&#xff0c;光盘、光电子LED等制造工艺以及科研院校、技术研…

YOLO在目标检测与视频轨迹追踪中的应用

YOLO在目标检测与视频轨迹追踪中的应用 引言 在计算机视觉领域&#xff0c;目标检测与视频轨迹追踪是两个至关重要的研究方向。随着深度学习技术的飞速发展&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;的广泛应用&#xff0c;目标检测与视频轨迹追踪的性能得到…

2024年广东省食品安全管理员考试精选练习题库

76.已具有主体资格的企业申请食品流通可&#xff0c;该企业的&#xff08;&#xff09;为可申请人。 A.投资者 B.经营负责人 C.本身 答案&#xff1a;C 77.食用亚硝酸盐的销售只面向&#xff08;&#xff09;。 A.食品生产加工行业 B.餐饮业 C.食品流通单位 答案&…

Rakis: 免费基于 P2P 的去中心化的大模型

是一个开源的&#xff0c;完全在浏览器中运行的去中心化 AI 推理网络&#xff0c;用户无需服务器&#xff0c;打开即可通过点对点网络使用 Llama-3、Mistral、Gemma-2b 等最新开源模型。 你可以通过右上角的 Scale Worker &#xff0c;下载好模型后挂机就能作为节点加入到这个…

SpringSecurity6 | 基于数据库实现登录认证

SpringSecurity6 | 基于数据库认证 ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容: SpringSecurity6 | 基于数据库实现登…

基于机器学习的零售商品销售数据预测系统

1 项目介绍 1.1 研究目的和意义 在电子商务日益繁荣的今天&#xff0c;精准预测商品销售数据成为商家提升运营效率、优化库存管理以及制定营销策略的关键。为此&#xff0c;开发了一个基于深度学习的商品销售数据预测系统&#xff0c;该系统利用Python编程语言与Django框架&a…

数据结构与算法笔记:实战篇 - 剖析搜索引擎背后的经典数据结构和算法

概述 像百度、Google 这样的搜索引擎&#xff0c;在我们平时的工作、生活中&#xff0c;几乎天天用到。如果我们把搜索引擎也当做一个互联网产品的话&#xff0c;那它跟社交、电商这些类型的产品相比&#xff0c;有一个非常大的区别&#xff0c;那就是&#xff0c;它是一个技术…

内容分发网络(CDN)学习记录

目录 静态内容动态内容CDN工作原理CDN缓存 CDN关键技术1.内容路由功能2.内容分发技术&#xff1a;内容分发技术主要是PUSH和PULL3.内容存储技术4.内容管理技术 全局负载均衡基于DNS的GSLB基于HTTP重定向的GSLB基于IP欺骗的GSLB服务器群选择策略 静态内容 静态内容是不会因用户…

隐私计算实训营第二期第七课:XGB算法与SGB算法开发实践

隐私计算实训营第二期-第七课 第七课&#xff1a;XGB算法与SGB算法开发实践1 决策树模型1.1 决策树的训练和预测过程1.2 决策树的发展过程 2 GBDT模型2.1 Boosting核心思想2.2 GBDT原理 3 XGB模型3.1 XGB核心思想3.2 XGB优点 3 隐语纵向树模型3.1 数据纵向分割3.2 隐私保护的树…

学习笔记——动态路由——IS-IS中间系统到中间系统(背景)

一、IS-IS技术背景 1、前言 IS-IS最初是国际标准化组织ISO(the International Organization for Standardization)为它的无连接网络协议CLNP(ConnectionLess Network Protocol)设计的一种动态路由协议。 和OSPF一样&#xff0c;IS-IS也是一种基于链路状态并使用最短路径优先…

医疗器械FDA认证中,如何准备SBOM文件?

在医疗器械FDA认证过程中&#xff0c;准备SBOM&#xff08;软件物料清单&#xff09;文件是确保医疗器械软件部分符合FDA要求的关键步骤。以下是准备SBOM文件的清晰指南&#xff1a; 一、了解SBOM文件的目的和重要性 SBOM文件用于详细列出医疗器械所使用的所有软件组件、版本…

程序员节视频创意盛宴,邀您共赴创意之旅!

&#x1f31f; 程序员节专属创意大赛震撼启幕&#xff01; &#x1f389; 亲爱的程序员及编程爱好者们&#xff0c;是时候拿起你们的镜头&#xff0c;捕捉那些日常中闪光的编程瞬间&#xff0c;向世界展示代码编织的奇迹与无限创意了&#xff01;&#x1f4bb;✨ &#x1f3c…

惠海 H6900B 2.7V3.7V4.2V5V9V升12V24V48VLED升压恒流芯片IC

惠海H6900B LED升压恒流芯片IC是一款功能丰富的LED驱动解决方案&#xff0c;为高亮度LED灯串设计。以下是针对该产品的进一步分析和解释&#xff1a; 产品特点 高效率&#xff1a;高达95%以上的效率意味着在驱动LED时&#xff0c;只有很少的能量转化为热量&#xff0c;从而提…

【Kaggle】Telco Customer Churn 数据编码与模型训练

&#x1f4ac;在上一部分中&#xff0c;我们已经完成了对数据集背景解读、数据预处理与探索性分析。在数据背景解读中&#xff0c;我们介绍了数据集来源、电信用户流失分析的基本业务背景&#xff0c;并详细解释了每个字段的基本含义&#xff1b;在数据预处理过程中&#xff0c…

全国WMS厂商大盘点,哪家未来能杀出重围?

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 一、引言 随着物流行业的快速发展&#xff0c;仓储管理作为其重要的一环&#xff0c;正逐步受到越来越多企业的重视。当前&#xff0c;市…

可燃气体报警器检测标准对比:不同标准的优缺点分析

在工业生产及家庭生活中&#xff0c;可燃气体报警器发挥着至关重要的作用。它能够实时监测空气中可燃气体浓度&#xff0c;一旦超过安全阈值&#xff0c;便会发出警报&#xff0c;避免火灾和爆炸事故的发生。 接下来&#xff0c;佰德将重点探讨可燃气体报警器的检测标准&#…