Skip to content

Commit

Permalink
Update 5、Golang三色标记+混合写屏障GC模式全分析.md
Browse files Browse the repository at this point in the history
  • Loading branch information
aceld authored May 13, 2022
1 parent 61a0720 commit 62f8ac8
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions 5、Golang三色标记+混合写屏障GC模式全分析.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,23 @@



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

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

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

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

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

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

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

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

Expand Down

0 comments on commit 62f8ac8

Please sign in to comment.