当前位置:网站首页>并发三色标记法
并发三色标记法
2022-06-12 16:36:00 【对酒当歌笑俗人】
STW的情况下,传统的递归标记算法肯定是没问题的。
但是对实时性高的程序来说,不能接受长时间的STW。
因此,需要对传统的递归标记做改进。通常是实现三色标记法或其改版算法。
三色标记法
三色标记法把对象分成黑白灰。黑色对象认为是计算过的活跃对象,不会被清理。
灰色对象认为是活跃对象,即将被标记成黑色。
白色对象是潜在的垃圾。标记结束后的白色对象会被清理。
流程
初始标记:STW,把GC ROOTS(所谓的GC ROOTS其实就是非堆区引用)直接指向的对象标记成灰色。打开写屏障(删除写或插入写)。 此阶段之后创建的对象堆上对象会变成黑色,防止重复扫描。
并发标记:垃圾收集线程和普通线程一起工作。垃圾收集线程开始标记对象。具体地,每次从灰色对象集取一个灰色对象变成黑色,并将其直接相连的对象变成灰色,加入灰色对象集。这里可以加入老的对象集,也可以加入一个全新的对象集,放到重新标记阶段处理。
重新标记:STW,关闭写屏障。如果有没处理完的对象,重新扫描进行处理。
垃圾回收:释放内存。
写屏障
读屏障和写屏障是处理内存重排序用的。在垃圾收集语境下,写屏障指的是在写操作过程中触发钩子函数。根据钩子函数不同,我们把写屏障简单的分为删除写屏障和插入写屏障。这两种写屏障都是为了满足三色不变性。
三色不变性
强三色不变性:黑色只能连黑色或灰色,不能连白色。
弱三色不变性:黑色可以连白色,但是这个白色要有其他灰色与其直接或间接相连。间接相连的话,路径上是白色。
屏障实现三色不变性
屏障不帮助三色标记法处理多标的情况,只处理漏标。
所谓漏标是:灰色对象指向某个白色对象,但是后来不再指向了。此时有一个黑色对象指向白色对象。因为黑色对象已经计算过了,所以不会再处理。灰色对象也不连接这个白色对象了。这种情况下会发生漏标,发生错误的释放。
分析上述场景可知,涉及两个写操作。即灰色对象删除引用,黑色对象增加引用。
删除写屏障在删除引用时触发,增加写屏障在增加引用时触发。处理方案都是一样的,把被影响的对象标记为灰色。
边栏推荐
- 33-【go】Golang sync.WaitGroup的用法—保证go协程执行完毕,主协程才退出
- 【BSP视频教程】BSP视频教程第17期:单片机bootloader专题,启动,跳转配置和调试下载的各种用法(2022-06-10)
- generate pivot data 1
- 3/6 线性系统的时域分析法(上)
- Learning notes of MySQL series by database and table
- Leetcode 2190. The number that appears most frequently in the array immediately after the key (yes, once)
- About component value transfer
- The C programming language (version 2) notes / 8 UNIX system interface / 8.1 file descriptor
- Project training of Shandong University rendering engine system (V)
- Exception assertion of assertj
猜你喜欢

Extract the new Chinese cross modal benchmark zero from 5billion pictures and texts, and Qihoo 360's new pre training framework surpasses many SOTAS

双写一致性问题
![[MySQL] Cartesian product - multi table query (detailed explanation)](/img/46/6a9a62b35eaa538232da1d738b3931.jpg)
[MySQL] Cartesian product - multi table query (detailed explanation)

canvas 高级功能(下)

Joint recruitment notice of ganfei research group of Wuhan University and xuzhenjiang research group of Nanchang University

ISCC-2022 部分wp

Recommend AI intelligent drawing repair software

Canvas advanced functions (Part 2)

Information outline recording tool: omnioutliner 5 Pro Chinese version

Leetcode 2190. 数组中紧跟 key 之后出现最频繁的数字(可以,一次过)
随机推荐
Why is your next computer a computer? Explore different remote operations
【摸鱼神器】UI库秒变LowCode工具——列表篇(一)设计与实现
[research] reading English papers -- the welfare of researchers in English poor
How to play the map with key as assertion
use. Net upgrade assistant upgrades the net core 3.1 project to NET 6
890. 查找和替换模式 / 剑指 Offer II 080. 含有 k 个元素的组合
generate pivot data 2
The C programming language (2nd Edition) notes / 7 input and output / 7.8 other functions
[fishing artifact] UI library second change lowcode tool -- List part (I) design and Implementation
Glove word embedding (IMDb film review emotion prediction project practice)
2080虚拟机登录命令
\Begin{algorithm} notes
generate pivot data 0
Golang recursively encrypts and decrypts all files under the specified folder
【DSP视频教程】DSP视频教程第8期:DSP库三角函数,C库三角函数和硬件三角函数的性能比较,以及与Matlab的精度比较(2022-06-04)
CAS乐观锁
PostgreSQL source code (53) plpgsql syntax parsing key processes and function analysis
Swin Transformer代码讲解
'virtue and art' in the field of recurrent+transformer video recovery
token与幂等性问题