我一直在尝试编程语言设计,并且现在需要实现一个垃圾回收系统。首先想到的是引用计数,但这无法处理引用循环。大多数搜索算法的页面都是关于调整现有语言中垃圾收集器的参考资料,例如Java。当我找到描述特定算法的内容时,通常没有足够的实现细节。例如,大多数描述包括“当程序内存不足时……”,这在具有充足交换空间的4 GB系统上不太可能发生。因此,我正在寻找一些教程,其中包含良好的实现细节,例如如何调整何时启动垃圾收集器(即在X个内存分配之后进行收集,或每Y分钟进行一次等)。
为了更详细地说明我正在尝试做什么,我开始编写类似于Postscript的基于堆栈的解释器,并且我的下一个尝试可能是基于Lisp方言之一的S表达式语言。我使用纯C进行实现。我的目标是自我学习,并记录各个阶段成为“如何设计和编写解释器”的教程。
至于我迄今为止所做的事情,我编写了一个简单的解释器,它实现了类似于C的命令式语言,该语言通过堆栈机器样式的虚拟机进行解析和处理(请参见lang2e.sourceforge.net)。但是,该语言在进入任何函数时不会分配新内存,并且没有任何指针数据类型,因此当时没有需要进行任何类型的高级内存管理。对于我的下一个项目,我考虑为非指针类型对象(整数、字符串等)使用引用计数,然后在单独的内存池中跟踪任何指针类型对象(可能会生成循环引用)。然后,每当池增长超过上一个垃圾回收周期结束时的X个分配单位时,再次启动收集器。
我的要求是它不要太低效,但易于实现并清晰地记录(请记住,我想将其开发成为供他人遵循的论文或书籍)。我目前正在使用三色标记算法,但似乎分代收集器会更好一些,但难以理解和记录。因此,我正在寻找一些清晰的参考资料(最好在线可用),其中包含足够的实现细节,以便让我入门。
为了更详细地说明我正在尝试做什么,我开始编写类似于Postscript的基于堆栈的解释器,并且我的下一个尝试可能是基于Lisp方言之一的S表达式语言。我使用纯C进行实现。我的目标是自我学习,并记录各个阶段成为“如何设计和编写解释器”的教程。
至于我迄今为止所做的事情,我编写了一个简单的解释器,它实现了类似于C的命令式语言,该语言通过堆栈机器样式的虚拟机进行解析和处理(请参见lang2e.sourceforge.net)。但是,该语言在进入任何函数时不会分配新内存,并且没有任何指针数据类型,因此当时没有需要进行任何类型的高级内存管理。对于我的下一个项目,我考虑为非指针类型对象(整数、字符串等)使用引用计数,然后在单独的内存池中跟踪任何指针类型对象(可能会生成循环引用)。然后,每当池增长超过上一个垃圾回收周期结束时的X个分配单位时,再次启动收集器。
我的要求是它不要太低效,但易于实现并清晰地记录(请记住,我想将其开发成为供他人遵循的论文或书籍)。我目前正在使用三色标记算法,但似乎分代收集器会更好一些,但难以理解和记录。因此,我正在寻找一些清晰的参考资料(最好在线可用),其中包含足够的实现细节,以便让我入门。