前言
去年一年就出了一篇博客,整体上来说还是太忙了,又是赶项目又是忙出书的事情,趁着农历还没新年,忙里偷闲整一篇新的XD。本次想讨论的内容是分代GC(garbage collection,意为垃圾回收机制),关于GC相关的文章,之前在Lua解释器构建系列中已经出过一篇,不过那个是增进式GC(感兴趣的读者可以点击这个链接:构建Lua解释器Part2:Garbage Collection基础架构),本文想要讨论的则是分代GC。
虽然本文写作的动机是在笔者阅读完Lua 5.4的GC源码之后,出于巩固知识的目的写的,但是笔者还是希望从更高的层次去讨论GC算法本身,因此会略去诸多Lua虚拟机相关的实现细节。本文将从GC的作用开始论述,介绍GC机制中常见的组成部件。首先通过简单的标记清除算法来引入GC的概念,然后逐步引入分步执行GC的概念和算法,最后以Lua 5.4所使用的分代GC算法为例,介绍工业级语言虚拟机是如何进行分代GC运作的。
为了方便论述,本文不会完全遵循源码中的所有细节,旨在更好的解释分代GC这种机制,希望能让读者对分代GC有个比较深刻的理解,最后由于本人水平有限,如有不正确的地方,欢迎大家批评指正,笔者在此感激不尽。读者也可以加入笔者创建的Q群,QQ号为:185017593。