Skip to content

Commit 62f8ac8

Browse files
authored
Update 5、Golang三色标记+混合写屏障GC模式全分析.md
1 parent 61a0720 commit 62f8ac8

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

5、Golang三色标记+混合写屏障GC模式全分析.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,23 @@
2828

2929

3030

31-
**第一步**,暂停程序业务逻辑, 找出不可达的对象,然后做上标记。第二步,回收标记好的对象
31+
**第一步**第一步,暂停程序业务逻辑,分类出可达和不可达的对象,然后做上标记
3232

33-
操作非常简单,但是有一点需要额外注意:mark and sweep算法在执行的时候,需要程序暂停!即 `STW(stop the world)`。也就是说,这段时间程序会卡在哪儿。
3433
![](images/44-GC1.png)
34+
图中表示是程序与对象的可达关系,目前程序的可达对象有对象1-2-3,对象4-7等五个对象。
3535

3636
**第二步**, 开始标记,程序找出它所有可达的对象,并做上标记。如下图所示:
3737
![](images/42-GC2.png)
38+
所以对象1-2-3、对象4-7等五个对象被做上标记。
3839

3940
**第三步**, 标记完了之后,然后开始清除未标记的对象. 结果如下.
4041
![](images/45-GC3.png)
4142

42-
**第四步**, 停止暂停,让程序继续跑。然后循环重复这个过程,直到process程序生命周期结束
43+
操作非常简单,但是有一点需要额外注意,Mark and Sweep算法在执行的时候,需要程序暂停,即 STW(Stop The World)。STW的过程中,CPU不执行用户代码,全部用于垃圾回收,这个过程的影响很大,所以STW也是一些回收机制最大的难题和希望优化的点。所以在执行第三步的这段时间,程序会暂定停止任何工作,卡在那等待回收执行完毕
4344

45+
**第四步**, 停止暂停,让程序继续跑。然后循环重复这个过程,直到process程序生命周期结束。
4446

47+
以上便是标记清除回收的算法。
4548

4649
### 二、标记-清扫(mark and sweep)的缺点
4750

0 commit comments

Comments
 (0)