diff --git a/eBook/chapter2/02.3.1.md b/eBook/chapter2/02.3.1.md index 1e4a099..66f5319 100644 --- a/eBook/chapter2/02.3.1.md +++ b/eBook/chapter2/02.3.1.md @@ -23,7 +23,8 @@ go垃圾回收器的操作都是基于**三色算法**,这一章节主要来 堆可以看成许多连接对象的图,如下所示,展示了单独一个垃圾回收的过程。 -![image](https://tva1.sinaimg.cn/large/0082zybpgy1gc1gxig1k3j30v20u0gtq.jpg) + +![image](https://raw.githubusercontent.com/hantmac/Mastering_Go_ZH_CN/master/images/chapter2/02.3-1.jpg) 因此,我们有三种不同颜色:黑色、白色和灰色。当算法开始的时候,所有对象标记为白色。随着算法继续进行,白色对象移到了其它两种颜色集合的一种里面。最后留在白色集合里面的对象会在将来某个时间点被清理掉。 @@ -39,7 +40,7 @@ go垃圾回收也可以应用于其它变量例如**channel**!当垃圾回收 Go允许你通过在你的Go代码里放一个```runtime.GC()```的声明来手动去开启一次垃圾回收。但是,要记住一点,```runtime.GC()```会阻塞调用器,并且它可能会阻塞整个程序,尤其是如果你想运行一个非常繁忙的而且有很多对象的go程序。这种情况发生,主要是因为你不能在其他任何事都在频繁变化的时候去处理垃圾回收,因为这种情况不会给垃圾回收器机会,去清楚地确定白色、黑色和灰色集合里的成员。这种垃圾回收状态也被称作是**垃圾回收安全点(garbage collection safe-point)**。 -你可以在https://github.com/golang/go/blob/master/src/runtime/mgc.go 里找到垃圾回收器相关的高级go代码。你可以学习这个如果你想了解更多关于垃圾回收操作的东西。 -###### *go团队一直在优化垃圾回收器,主要是通过降低垃圾回收器所需要处理三种集合上数据的扫描次数来让它更快。但是尽管进行各种优化,其背后算法的整体原理还是一样的。* +你可以在[这里](https://github.com/golang/go/blob/master/src/runtime/mgc.go)找到垃圾回收器相关的高级go代码。你可以学习这个如果你想了解更多关于垃圾回收操作的东西。 +###### *go团队一直在优化垃圾回收器,主要是通过降低垃圾回收器所需要处理三种集合上数据的扫描次数来让它更快。但是尽管进行各种优化,其背后算法的整体原理还是一样的。*