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