首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何实现垃圾收集器?

如何实现垃圾收集器?
EN

Stack Overflow用户
提问于 2011-07-29 06:28:40
回答 7查看 26.5K关注 0票数 66

关于如何实现垃圾收集,有没有人能给我一个好的参考资料?我正在制作一种类似lisp的解释型语言。它目前使用引用计数,但在释放循环依赖对象时当然会失败。

我一直在读标记和扫描,三色标记,移动和不移动,增量和停止世界,但是……我不知道在保持每个对象的内存开销最小的情况下,将对象整齐地划分为多个集合的最佳方法,也不知道如何增量地做事情。

我读过一些使用循环引用检测的引用计数语言,我可以使用它。我知道我可以使用像Boehm这样的免费收集器,但我想自己学习如何做。

我将感谢任何在线材料的某种形式的教程或帮助的人没有经验的主题,像我。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-08-01 23:05:00

按照delnan的建议,我从一个非常天真的停止世界的三色标记和扫描算法开始。我设法将对象保留在集合中,方法是使它们成为链表节点,但它确实向每个对象添加了大量数据(虚拟指针、两个指向节点的指针、一个用于保存颜色的枚举)。它运行完美,在valgrind上没有内存损失:)从这里我可以尝试添加一个可回收的免费列表,或者一些检测何时方便停止世界的东西,或者一个增量方法,或者一个特殊的分配器来避免碎片,或者其他东西。如果你能告诉我在哪里可以找到关于如何做这些事情或做什么的信息或建议(我不知道你是否能对一个已回答的问题发表评论),我将非常感谢。同时我会检查Lua的GC。

票数 9
EN

Stack Overflow用户

发布于 2011-07-29 07:15:41

请查看以下页面。它有很多链接。http://lua-users.org/wiki/GarbageCollection

票数 10
EN

Stack Overflow用户

发布于 2011-08-02 01:34:53

我已经在大约400SLOC中用C语言实现了一个Cheney-style copying garbage collector。我为一种静态类型的语言这样做,令我惊讶的是,更难的部分实际上是传递信息,哪些是指针,哪些不是。在动态类型的语言中,这可能会更容易,因为你必须已经使用了某种形式的标记方案。

关于垃圾收集的标准书籍还有一个新版本即将面世:"The Garbage Collection Handbook: The Art of Automatic Memory Management" by Jones, Hosking, Moss。(亚马逊英国网站上写着2011年8月19日。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6866531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档