我正在研究GC实现,我目前正在寻找基础知识和良好的开源GC示例。
有没有好的和简单的世代GC实施?第二个最好的事情是良好的资源和指导方针!
谢谢!
答案 0 :(得分:6)
我写了Qish垃圾收集器(不再维护了,但随便问一下)。它是C的免费复制世代GC(具有一些编码样式限制)。
GCC MELT [meta-]插件(免费,GPLv3许可),提供高级语言MELT,以扩展GCC编译器,还具有高于现有Ggc
的复制世代GC GCC的垃圾收集器。查看gcc/melt-runtime.c
使用分代复制GC,在C中生成应用程序代码非常有用。见my DSL2011 paper on MELT
随意问我更多,我喜欢谈论我的GC-s。
当然,阅读Garbage Collection Handbook: The Art of Automatic Memory Management (琼斯,霍斯金,莫斯)[ISBN-13:978-1420082791]是必须的
(2017年补充)
还可以查看Ravenbrook's Memory Pool System,它可以用于代际GC。
另请参阅Ocaml的运行时,它具有良好的(单线程)代际GC。
PS。调试分代复制GC很痛苦。
答案 1 :(得分:5)
您可以查看JVM here提供的各种GC实现。
Memory Management white paper概述了JVM中实现的不同垃圾收集器。它从2006年开始,因此它缺少新的G1收集器细节,但它是一个很好的起点。
答案 2 :(得分:4)
Ovm framework是开源的,它提供了一个框架,允许选择有关实时系统垃圾收集的几个功能。
根据网站
包括允许从新选择的Minuteman RTGC框架 支持的RTGC功能:基于时间的调度(周期性,松弛性和 hybrid - 两者的结合),增量堆栈扫描, 复制或布鲁克斯障碍,增量对象复制,arraylets, 内存使用情况,以及GC暂停分析和跟踪。
虽然特定领域,但它可能是您研究的良好起点。
我希望这会有所帮助。
答案 3 :(得分:3)
V8 project(Chrome和Android中使用的Javascript引擎)是开源的,并且具有简单的分代垃圾收集器。
你可以browse the source code online。特别是,看看heap.cc(堆和清除算法的实现),spaces.cc(低级堆东西)和mark-compact.cc(完全垃圾收集器)。
答案 4 :(得分:3)
Parrot VM也使用generational garbage collector。
答案 5 :(得分:2)
虽然它不是用C语言编写的,但是JikesRVM JVM包含几个GC实现,包括几个世代的实现,我认为它很容易理解。
答案 6 :(得分:1)
Boehm Garbage Collector通常用于C和C ++项目。