首页 > 系统相关 >【转载】golang内存分配

【转载】golang内存分配

时间:2024-09-05 16:03:40浏览次数:5  
标签:slot span 扩展 golang 内存 heap go 转载

 

同时 Go 对于 GC 后回收的内存页, 并不是马上归还给操作系统, 而是会延迟归还, 用于满足未来的内存需求.

 


 

在 1.10 以前 go 的堆地址空间是线性连续扩展的, 比如在 1.10(linux amd64)中, 最大可扩展到 512GB. 因为 go 在 gc 的时候会根据拿到的指针地址来判断是否位于 go 的 heap 的, 以及找到其对应的 span, 其判断机制需要 gc heap 是连续的. 但是连续扩展有个问题, cgo 中的代码(尤其是 32 位系统上)可能会占用未来会用于 go heap 的内存. 这样在扩展 go heap 时, mmap 出现不连续的地址, 导致运行时 throw.

在 1.11 中, 改用了稀疏索引的方式来管理整体的内存. 可以超过 512G 内存, 也可以允许内存空间扩展时不连续.在全局的 mheap struct 中有个 arenas 二阶数组, 在 linux amd64 上,一阶只有一个 slot, 二阶有 4M 个 slot, 每个 slot 指向一个 heapArena 结构, 每个 heapArena 结构可以管理 64M 内存, 所以在新的版本中, go 可以管理 4M*64M=256TB 内存, 即目前 64 位机器中 48bit 的寻址总线全部 256TB 内存.

 


 

go 的内存分配类似于 tcmalloc, 采用了 span 机制来减少内存碎片. 每个 span 管理 8KB 整数倍的内存, 用于分配一定范围的内存需求.

标签:slot,span,扩展,golang,内存,heap,go,转载
From: https://www.cnblogs.com/Jcloud/p/18398650

相关文章

  • MySQL内存优化指南:深入配置与性能提升
    在数据库管理中,内存的使用和优化是提升数据库性能的关键因素之一。MySQL作为一种流行的关系型数据库管理系统,提供了多种配置选项来优化内存使用,从而提高数据库的响应速度和处理能力。本文将详细介绍如何在MySQL中配置和优化内存使用,包括内存参数的配置、内存使用的监控以及......
  • 转载:国产麒麟、统信系统在线编辑word并拆分成多个子文件
            在实际的开发过程中,有时会遇到希望提取Word文档中部分内容保存为子文件的需求,PageOffice支持提取Word文档数据区域中的内容为一个Word文件流,在服务器端创建PageOffice的WordReader命名空间中的WordDocument对象并获取到DataRegion对象,再调用DataRegion对象的Fil......
  • NET程序内存泄漏处理技巧/调试内存泄漏教程
    NET程序内存泄漏处理技巧/调试内存泄漏教程什么是Dump(dmp)文件?Dump是计算机技术中的重要概念,用于将内存中的数据转储到外部存储设备中,以便在出现故障时进行排查和分析。Dump文件又叫内存转储文件或者叫内存快照文件。用于存储程序运行时的状态信息的文件,这些文件通常包含了程序运......
  • xtensa架构--指令汇总(加载指令/存储指令/跳转和调用指令/条件分支指/移动指令令/算术
    目录一xtensa架构指令汇总二  加载指令1. l32i 指令示例2. l8i 指令示例3. l16i 指令示例4. ld 指令示例5总结三存储指令3.1 存储指令概述3.2存储指令详述S8I(RR8):8位存储(8位偏移)S16I(RR8):16位存储(8位移位偏移)S32I(RR8):32位存储(8位......
  • 【转载】P1399 [NOI2013] 快餐店 题解
    作者%%%%%%NightTide%%%%%%题目大意求一棵基环树的重心。即一个点,使得树上到其距离最长的点到其的距离最短。注意,这个点不一定是一个节点,可以在树上的任意位置。输出树上到其距离最长的点到其的距离。或者说求基环树最短的直径?(大雾解题思路显然,这颗基环树的直径只有两......
  • 网站提示“PHP配置错误:如内存限制、执行时间限制等问题”错误如何解决
    当您遇到“PHP配置错误”,如内存限制、执行时间限制等问题时,这通常意味着您的PHP脚本超过了PHP.ini配置文件中设定的某些限制。这类问题可能导致脚本执行中断或产生错误。以下是一些解决这些问题的方法:常见的PHP配置错误内存限制(memory_limit):当PHP脚本消耗的内存超过memory_l......
  • 【转载】【深度学习服务器组装】【DIY土豪級別電腦】1.5TB記憶體192核心384線程雙路EP
    视频地址:https://www.youtube.com/watch?v=_VMvGuVGI1M......
  • Linux内核如何通过内存回收和压缩机制来管理物理内存
    大家好,今天给大家介绍Linux内核如何通过内存回收和压缩机制来管理物理内存,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。Linux内核通过一系列复杂的内存回收和压缩机制来有效管理物理内存,确保系统能够在不同负载......
  • redis内存碎片
    一、什么是内存碎片redis数据删除后,所占用内存不会马上换给操作系统,而是交给内存分配管理器,所以对操作系统来说redis仍然占用着这些内存。这里有个风险点是:redis释放的内存有可能是不联系的,这种不连续的内存很可能无法再次使用,最终造成了内存的浪费。二、如何判断有内存碎片可......
  • linux C++基于共享内存的同步机制
    无缘进程间同步,本来打算使用有名信号量进行同步,但是有名信号量的初始化会受进程启动顺序影响,故使用共享内存进行封装,封装后的使用方法类似二值信号量,代码如下:1#include<sys/ipc.h>//ipc:inter-processcommunication进程通信2#include<sys/shm.h>//shm:shareme......