我对垃圾收集的工作原理很感兴趣。我已经阅读了一些工作,如标记和清除、停止和复制、分代 GC 等......我想尝试实现其中的一些并比较它们的行为。什么是开始尝试我自己的好方法?理想情况下是 C、Java 或 Python 中的东西(尽管最后两个本身是垃圾收集的,所以似乎很难使用它们......)
7 回答
我自己从来没有玩过它,但总是提到与 C/C++ 一起使用的是Hans Boehm 的.
.NET 运行时和 Java 运行时现在是开源的,因此如果您想使用当前支持的编程语言,可以自行试验运行时。但是,如果您想自己执行此操作,您可能必须创建自己的运行时,它有自己的语言。
实现自己的 JVM。没有什么花哨的,只是基本的。有很多程序/编译器/语言可以生成 JVM 代码,因此您有大量材料可供测试。
玩起来很有趣,但垃圾收集是一门黑暗的艺术。不是让它工作,而是让它以最新 VM 的效率工作。
我们谈论的是多阶段和魔法,它使分配速度比 malloc 更接近堆栈分配。
整个伊甸园概念震撼人心。
您可能想阅读一些有关所使用技术的白皮书。
这是一篇似乎有很好概述的文章(仅来自快速谷歌/扫描)
开发Factor 编程语言的Slava Pestov写了许多关于他实现垃圾收集器的帖子。你可以通过这个链接找到关于它的帖子:
http://factor-language.blogspot.com/search?q=garbage+collection
特别是从 2006 年 9 月 24 日星期日的帖子开始。
MMTk包含大量高性能垃圾收集器。这包括:
- 复制收藏家
- 追踪收集器
- 引用计数收集器
它也有:
- 阻止世界收藏家
- 并发收集器
Since it is a research platform it has some advance collectors such as the generation reference counting collector.