分代GC源代码

时间:2011-11-24 02:41:41

标签: c compiler-construction resources garbage-collection

我正在研究GC实现,我目前正在寻找基础知识和良好的开源GC示例。

有没有好的和简单的世代GC实施?第二个最好的事情是良好的资源和指导方针!

谢谢!

7 个答案:

答案 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)

Java的HotSpot GC

您可以查看JVM here提供的各种GC实现。

Memory Management white paper概述了JVM中实现的不同垃圾收集器。它从2006年开始,因此它缺少新的G1收集器细节,但它是一个很好的起点。

Mon的SGen GC

Mono的新SGen也在github。查看sgen文件。

答案 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 ++项目。