大家好,又见面了,我是你们的朋友全栈君。
虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。
以下是Golang GC算法的里程碑:
- v1.1 STW
- v1.3 Mark STW, Sweep 并行
- v1.5 三色标记法
- v1.8 hybrid write barrier
经典的GC算法有三种:引用计数(reference counting)
、标记-清扫(mark & sweep)
、复制收集(Copy and Collection)
。
Golang的GC算法主要是基于标记-清扫(mark and sweep)
算法,并在此基础上做了改进。因此,在此主要介绍一下标记-清扫(mark and sweep)算法,关于引用计数(reference counting)和复制收集(copy and collection)可自行百度。
标记-清扫(Mark And Sweep)算法
此算法主要有两个主要的步骤:
- 标记(Mark phase)
- 清除(Sweep phase)
第一步,找出可达的对象,然后做上标记。
第二步,回收未标记的对象。
操作非常简单,但是有一点需要额外注意:mark and sweep算法在执行的时候,需要程序暂停!即stop the world
。
也就是说,这段时间程序会卡在哪儿。故中文翻译成卡顿
。
我们来看一下图解:
开始标记
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151093.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...