go三色回收


本文摘自网络,作者,侵删。

[toc]

垃圾回收的知识很早之前就了解了,现在回过头在看,发现有了新的问题,新的理解

存在的问题

  1. 为什么必须三色,二色的话会有什么问题
  2. 插入写屏障为什么不行
  3. 为什么必须使用混合写屏障,删除写屏障为什么不行。

为什么必须三色

三色具体是指:

  • 黑色。已经扫描结束的对象
  • 灰色。待扫描的对象
  • 白色。未扫描的对象

具体实现中,我们遍历灰色对象,标记为黑色。并把指向的新对象标记为灰色。

但是如果是二色的话,那么就只有黑色和白色。

那么遍历的操作是不能暂停的。因为如果恢复的话,面对黑色对象我们不知道这个是已经扫描过的还是未扫描的。

参考

  1. https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-garbage-collector/
  2. https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md
  3. http://wiki.luajit.org/New-Garbage-Collector

本文来自:简书

感谢作者:lucasgao

查看原文:go三色回收

相关阅读 >>

手撸Golang 基本数据结构与算法 链表

如何读取yaml,json,ini等配置文件【Golang 入门系列九】

Golang中的int占几个字节

关于Golang里的future/promise

一周 Go world 新鲜事

关于处理电商系统订单状态的流转,分享下我的技术方案(附带源码)

Go命令行参数及标准输入输出介绍

有没有发现Go 1.17将允许切片转换为数组指针啦?

Golang main如何返回值

Go学习五·切片

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...