关于go:Go垃圾回收系列一标记清除算法

5次阅读

共计 781 个字符,预计需要花费 2 分钟才能阅读完成。

垃圾回收 (Garbage Collection,简称 GC) 是编程语言中提供的主动的内存管理机制,主动开释不须要的内存对象,让出存储器资源。GC 过程中无需程序员手动执行。GC 机制在古代很多编程语言都反对,GC 能力的性能与优劣也是不同语言之间对比度指标之一。

Golang 在 GC 的演进过程中也经验了很屡次改革

  • Go1.3 之前采纳一般的标记 - 革除算法
  • Go1.5 引入了三色标记法和屏障技术
  • Go1.8 引入混合写屏障技术

本篇咱们就依照工夫线,从最开始的标记革除算法开始。

Go V1.3 之前的标记 - 革除 (mark and sweep) 算法

此算法次要有两个次要的步骤:

  • 标记(Mark phase)
  • 革除(Sweep phase)

具体步骤

第一步,暂停程序业务逻辑, 分类出可达和不可达的对象,而后做上标记。

第二步, 开始标记,程序找出它所有可达的对象,并做上标记。

第三步, 标记完了之后,而后开始革除未标记的对象。

第四步, 进行暂停,让程序持续跑。而后循环反复这个过程,直到 process 程序生命周期完结。

STW(stop the world)

操作非常简单,然而有一点须要额定留神:mark and sweep 算法在执行的时候,须要程序暂停!即 STW(stop the world),STW 的过程中,CPU 不执行用户代码,全副用于垃圾回收,这个过程的影响很大,所以 STW 也是一些回收机制最大的难题和心愿优化的点。所以在执行第三步的这段时间,程序会暂定进行任何工作,卡在那期待回收执行结束。

标记革除法的毛病

标记革除算法明了,过程显明罗唆,然而也有十分重大的问题。

● STW,stop the world;让程序暂停,程序呈现卡顿 (重要问题);
● 标记须要扫描整个 heap;
● 革除数据会产生 heap 碎片。

无论怎么优化,Go V1.3 都面临这个一个重要问题,就是 mark-and-sweep 算法会暂停整个程序。

如何解决?(三色标记法)

正文完
 0