专栏首页学而时习之go源码剖析2 内存分配2 初始化
原创

go源码剖析2 内存分配2 初始化

初始化时的虚拟地址空间:

因为内存分期和垃圾回收算法都依赖要连续的地址, 所以在初始化阶段, 预先保留了很大的一段虚拟地址空间.

保留地址空间, 并不会分配内存.

三个区域:

上述的虚拟的地址空间被划分成了三个区域:

页所属span指针数组

GC标记位图

用户内存分配区域

spans 512M

bitmap 32GB

arena 512GB

简单的说, 就是用三个数组组成了一个高性能内存管理结构

  1. 使用arena地址向操作系统申请内存, 其大小决定了可分配用户内存的上限.
  2. 位图bitmap 为每个对象提供4bit标记位, 用于保存指针, GC标记等信息.
  3. 创建span的时候, 按页填充对应spans空间. 在回收object时, 只需将其地址按页对齐后就可以找到所属的span, 分配器还用此访相邻的span, 做合并操作

该章节未完成.有部分还没搞懂, 学习后再补充.

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL基础篇6 mysql的行锁

    eg : 事务 A 更新了一行,而这时候事务 B 也要更新同一行,则必须等事务 A 的操作完成后才能进行更新

    历久尝新
  • go源码剖析2 内存分配1 概述

    注意: 内存分配器只管理内存块, 不关心内存中对象的状态, 也不会主动的回收内存, 回收是在回收器完成清理操作后, 触发内存分配器的回收操组;

    历久尝新
  • MySQL基础篇1 mysql的基础架构

    支持innodb, myisam, memory, MySQL5.5.5 以后默认innodb,不同存储引擎的表数据存取方式也不同

    历久尝新
  • 资源 | AI、神经网络、机器学习、深度学习以及大数据学习备忘单

    ? 以下是关于神经网络、机器学习、深度学习以及大数据学习的备忘单,其中部分内容和此前发布的《资源 | 值得收藏的 27 个机器学习的小抄》有所重复,大家可以两...

    AI科技大本营
  • Mybatis框架复习大纲【面试+提高】

    Mybatis框架复习大纲【面试+提高】 1.MyBatis面试题汇总 1.1 JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的? ① 数据库链...

    奋斗蒙
  • win10 uwp 标题栏 扩展标题栏修改颜色透明标题栏 系统状态栏

    我们应用最上方的是标题栏,对于手机,最上方是状态栏。 我们可以自定义标题栏,和不显示标题栏。

    林德熙
  • 精华 | 超全的速查资料 【历史最全】

    本文涵盖了神经网络结构、机器学习、TensorFlow、Pandas、Numpy、Python、Scikit-Learn、Scipy等的基本概念与使用方法。

    昱良
  • AI速查表:神经网络、机器学习、深度学习与数据科学一览

    用户1737318
  • jquery 实现分页 前端分页

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or...

    用户5760343
  • 干货收藏:AI、深度学习、神经网络、大数据备忘录(附资料)

    导读:本文涵盖了神经网络结构、机器学习、TensorFlow、Pandas、Numpy、Python、Scikit-Learn、Scipy等的基本概念与使用方法...

    华章科技

扫码关注云+社区

领取腾讯云代金券