mono 的Sgen
mono 最开始使用的是 Boehm-Demers-Wiser Conservative Garbage Collector ,作为默认的垃圾收集器也是这个。
后来mono有了自己的 Simple Generational GC , 就是 Sgen. 从邮件列表中的一些测试结果来看,这个Sgen的时间效率已经和Boehm非常接近,内存方面更加优秀。
文档地址:http://www.mono-project.com/Compacting_GC , 注意:sgen一直在开发,其内容可能和现在的不同。
之前看了一下,总结一下:
- 分为两代
- 大对象特殊处理,默认大于64KB作为大对象
- 小对象采用get_internal_mem/free_internal_mem 进行内存分配处理,大对象实用OS的malloc/free
- major collection 的时候采用 mark/sweep
- 收集进行时是 “stop the world”
- 保守扫描对象
- 老一代指向新一代的情况只有下面两种,所以都进行了跟踪:
- 程序执行中,一个字段进行了赋值
- 在复制(代移动)过程中,这个对象指向了一个新一代中的对象
参考 : http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)