golang-运行时-内存管理

内存分配器

运行时的内存分配器使用类似TCMalloc 的分配策略将对象根据大小分类, 并设计多层级的组件提高内存分配器的性能.

分配方法:
  • 线性分配器
  • 空闲链表分配器
分级分配(线程缓存分配)

使用多级缓存将对象根据大小分类,并按照类别实施不同的分配策略

Go 语言的内存分配器会根据申请分配的内存大小选择不同的处理逻辑,运行时根据对象的大小将对象分成微对象、小对象和大对象三种

  • 微对象: (0, 16B)
  • 小对象: [16B, 32KB]
  • 大对象: (32KB, +∞)
多级缓存
  • 线程缓存
  • 中心缓存
  • 页堆(直接分配大对象)
虚拟内存布局
  • 线性内存
  • 稀疏内存(现在使用的, 运行时使用二维的 runtime.heapArena 数组管理所有的内存)
内存管理组件
  • 内存管理组件
    • Go 语言内存管理的基本单元 runtime.mspan, 串联后构成一个双向链表
    • 在线程缓存和中心缓存中使用.
  • 线程缓存
    • 与线程中的P绑定, 持有 68 * 2 个 runtime.mspan
    • 会向中心缓存获取内存管理单元
  • 中心缓存
    • runtime.mcentral, 访问其的内存管理单元需要使用互斥锁
    • 会像堆中申请新内存
  • 页堆(runtime.mheap)
    • 全局变量, 二维矩阵
    • 该结构体包含
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值