GO语言的内存分配和垃圾回收

目录

1,内存分配方式

1.1,线性分配器

1.2,空闲链表分配器

1.3,线程缓存分配

2,go语言内存分配策略

3,go语言的垃圾回收

3.1,标记部分

3.2,清除部分

3.3,三色清除

3.4,混合屏障

3.4,增量和并发

3.4.1,增量收集

3.4.2,并发收集

3.5,GC的时机


程序中的数据和变量都会被分配到程序所在的虚拟内存中,内存空间包含两个重要区域:栈区(Stack)和堆区(Heap)。程序需要内存的时候,内存分配器会从堆中初始化内存然后返回给程序。

1,内存分配方式

1.1,线性分配器

维护一个指向已用内存位置的指针,随着内存的慢慢分配,指针也在缓慢的移动,即指针的一边是已经使用过的内存,另外一边是未使用内存。这种方式的确定是如果某些已经使用的内存得到释放,无法再次使用。

1.2,空闲链表分配器

内部会维护类似链表的数据结构,标记哪块内存被使用,哪块内存没有被使用,申请内存的时候,查看链表,寻找未使用的内存进行分配。由于是链表,分配的时候需要遍历链表,效率比较低。

1.3,线程缓存分配

使用多级缓存将对象根据大小分类,并按照类实施不同的分配策略。例如,内存分成两大块,第一大块使用空闲链表分配,第二大块使用线程缓存分配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geegtb

只希望写的东西能够帮助到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值