博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GO内存模型
阅读量:4098 次
发布时间:2019-05-25

本文共 806 字,大约阅读时间需要 2 分钟。

文章目录

前言

今年找工作发现go语言非常火爆,所以也找个机会学习下go语言。首先学习他的内存模型。发现他不同于JAVA的内存模型。GO是基于操作系统实现的。GO是利用操作系统的虚拟内存的概念,在GO当中,他可以直接在虚拟内存2^64 空间大小分配内存,几乎无限大。

GO比JAVA牛逼的地方在于他处理高并发非常简单,有个关键字go就行。go比java在内存管理上牛逼的地方,在于他减少内存拷贝。在go内存模型上,他没有年轻代和老年代的概念。所有的数据存放在某个span的格子当中。

一、go的内存模型图

在这里插入图片描述

分别介绍下Go内存中spans bitmap arena这三个主要的概念

1.1 arena

这个区域内存相当于java中堆内存。go根据我们存放对象的大小,分成67类span分别存储,比如说我需要存放的一个对象大小为1k,那么go会把这个1k对象放到第一个span的某个空闲的格子当中。如果我需要存放的对象的大小为2k,那么go会把这个2k对象放到第二个span的某个空闲的格子当中。

1.2 bitmap

主要有两个作用,

第一记录某个span的格子是否存在对象如(1011),那么go经过计算知道第二个位置可以在放一个对象
第二记录某个sapn的格子对象是否扫描gc后可以被回收如(1101),那么go经过计算知道第三个位置的对象需要被回收,那么go会把第一步当中1011改成1001,那么第三个位置就可以继续存放新对象了。

1.3 spans

spans作用主要有四个

第一个找到对应span在arena的内存地址。
第二个知道span存放的对象类型,是67种的哪一种。
第三个知道这个span对象对应的bitmap,从而知道span中哪些格子是空可以继续放对象
第四个知道span的下一个span的地址是多少,因为有可能某个span存放不下,这个时候go会继续开辟存放相同格子大小的span存放。

转载地址:http://yurii.baihongyu.com/

你可能感兴趣的文章
Java基础篇(一)
查看>>
数据库
查看>>
mysql update与group by
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python猜拳游戏
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
python九九乘法表(详解)
查看>>
ESP8266 WIFI数传 Pixhaw折腾笔记
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
MongDB学习之路(二)基本指令
查看>>
MongoDB学习之路(三)复制集
查看>>
VMware安装centos6.8常见问题
查看>>
安装git在Linux环境配置
查看>>
【java面试】面向对象三大特性:封装、继承、多态
查看>>
【java面试】equals()与“==”的使用
查看>>
【java面试】静态变量、static关键字及其用法
查看>>