R大在在介绍CMS时提到了write barrier写屏蔽的概念,是来干啥的
由于并发 mark-and-sweep 中 mark 阶段和 mutator 是并发的,以并发三色 mark 为例,有可能一块已经被 mark 成黑色的内存中的引用又被 mutator 修改指向了一块白色内存,write barrier 的功能就是处理类似这种情况,将新指向的白色内存 mark 为灰色。如果没有 write barrier,那块新指向的白色的内存就被视为垃圾了(如果没有其他指向它的引用)。
【R大在在介绍CMS时提到了write barrier写屏蔽的概念,是来干啥的】 但是即使具备了 write barrier,mark 阶段仍然需要 stop-the-world 两次,第一次是 mark 初始化阶段,需要 stop-the-world 来将 root set 入队以及开启 write barrier,第二次是 mark termination 阶段,因为如果让 mutator 一直运行可能 mark 阶段永远无法结束(一直产生新的灰色内存导致需要一直去 mark)。
read barrier 解决的问题跟 write barrier 不一样,在 mark-and-sweep 中是不需要 read barrier 的,因为 GC 本身不会去移动内存。但是对于 mark-compact 或者 copying,因为 GC 要移动内存、修改引用,如果不用 read barrier 去跟踪读的情况,就需要等 GC 完全移动结束之后才能允许 mutator 去读,否则可能读到错误的(未移动完成的)引用。如果有了 read barrier,只要保证在 read barrier 时将要读的内存的引用移动完成即可,无需等待其他内存引用移动完成,等于是把内存引用移动这个过程平摊开了。
只熟悉 Go 的 GC,Go 的 GC 里没 read barrier,有可能理解有误,请 @RednaxelaFX 指正。
■网友
首先移动对象的时候mutator还要并发读的话,肯定单独写屏障是不行的。
其次个人理解标记清理收集器本身就不大需要读屏障,所以就变成了一个先有鸡(标记清理)还是先有蛋(写屏障)的问题(呆)
推荐阅读
- 现在在线学习视频有很多了,为啥大部分人还是喜欢下载下来观看
- 知乎上关于人生经验的介绍是否可能对青少年造成潜在危害
- 中国移动采购共享服务中心,有人了解这个中心的情况么,可以介绍一下吗
- 光明网|兰州:不介绍新学员 就不让你练车 ?驾校:确实存在管理漏洞,会监督教练处理退费问题
- 有谁知道关于 厂子里的一些信息 或介绍一些只有进了厂子才能知道的经历
- 介绍款合适女生玩的网游
- 肝脏|养肝就是养命,本文介绍中医的养肝方法,肝不好的人,不妨学学
- 我现在在学c语言,然后以后的工作目标是腾讯网易这些游戏公司,我是通信专业,请问我接下来再该学些啥呢
- 大学|一文读懂,赶紧收藏!2021高考必备!大学专业解读与大学专业就业方向介绍
- 陆毅|《一秒钟》豆瓣评分多少?张艺谋《一秒钟》剧情简介主演介绍
