我一直在尝试编程语言设计,并且已经到了需要实现垃圾收集系统的程度.现在我想到的第一件事是引用计数,但这不会处理引用循环.我在搜索算法时遇到的大多数页面都是关于调整现有语言(例如Java)中的垃圾收集器的参考.当我找到任何描述特定算法的内容时,我没有得到足够的实现细节.例如,大多数描述都包括"当你的程序内存运行不足时...",这在4 GB系统上很快就不会发生,并且有很多交换.所以我正在寻找的是一些具有良好实现细节的教程,例如如何调整何时启动垃圾收集器(即,在X次内存分配之后收集,或每隔Y分钟等).
为了更详细地介绍我正在尝试做的事情,我开始编写类似于Postscript的基于堆栈的解释器,我的下一次尝试可能是基于Lisp方言之一的S表达式语言.我正在直接实施C.我的目标是自我教育,并将各个阶段记录为"如何设计和编写解释器"教程.
至于我到目前为止所做的,我编写了一个简单的解释器,它实现了一种C风格的命令式语言,它由堆栈机器式VM进行解析和处理(参见lang2e.sourceforge.net).但是这种语言在输入任何函数时都没有分配新内存,并且没有任何指针数据类型,因此当时并不需要任何类型的高级内存管理.对于我的下一个项目,我想从非指针类型对象(整数,字符串等)的引用计数开始,然后在单独的内存池中跟踪任何指针类型对象(可以生成循环引用) .然后,每当池比上一个垃圾收集周期结束时增长超过X个分配单元时,再次启动收集器.
我的要求是它不是太低效,而且易于实现和清楚地记录(记住,我想把它发展成纸或书,供其他人遵循).我目前在前面获得的算法是三色标记,但看起来像分代收集器会好一些,但更难记录和理解.所以我正在寻找一些明确的参考资料(最好是在线提供),其中包含足够的实施细节以帮助我入门.