我对垃圾回收的工作方式很感兴趣。我已经阅读了一些关于标记-清除、停止-复制、分代GC等工作原理的内容...我想尝试实现其中的一些并比较它们的行为。有什么好的方法可以开始自己的实验吗?最好是用C、Java或Python来实现(虽然后两者本身就带有垃圾回收,所以似乎很难使用它们...)
我对垃圾回收的工作方式很感兴趣。我已经阅读了一些关于标记-清除、停止-复制、分代GC等工作原理的内容...我想尝试实现其中的一些并比较它们的行为。有什么好的方法可以开始自己的实验吗?最好是用C、Java或Python来实现(虽然后两者本身就带有垃圾回收,所以似乎很难使用它们...)
我自己没有玩过,但在使用C/C++时经常被提到的是Hans Boehm's。
现在,.NET运行时和Java运行时都是开源的,因此如果您想玩弄当前支持的编程语言,可以尝试对运行时进行实验。但是,如果你想自己做这件事,你可能需要创建自己的运行时,并使用它自己的语言。
实现你自己的JVM。不需要花哨的功能,只需基础知识。有很多程序/编译器/语言可以生成JVM代码,所以你有足够的材料进行测试。
玩起来很有趣,但垃圾回收是黑魔法。不仅让它工作,还要让它与最新的虚拟机一样高效地工作。
我们谈论的是多阶段和魔法,使分配速度更接近于堆栈分配而不是 malloc。
整个伊甸园概念非常棒。
你可能想阅读一些关于所使用技术的白皮书。
这里有一篇文章,似乎有一个很好的概述(只是从快速谷歌/扫描中)。
malloc
和free
来管理旧代),并通过重置指针在O(1)中扫描整个幼年代(这就是为什么当高比例的值短命时速度如此快)。 - J DSlava Pestov 是开发 Factor 编程语言 的人,他写了很多关于垃圾回收器实现的文章。你可以通过这个链接找到相关的文章:
http://factor-language.blogspot.com/search?q=garbage+collection
具体来说,从2006年9月24日星期日的帖子开始。