kei*_*ter 16 compiler-construction algorithm garbage-collection
我正在为静态类型的面向对象语言编写编译器.目前我正在研究垃圾收集算法.我想知道是否有一个收藏家:
编辑:为了澄清,我想知道是否有一个可实现的算法可以做到这一点,而不是有一个现成的收集器.
有一个实际上没有实验的垃圾收集算法实际上满足了您的所有要求:简单的自动引用计数.总的来说,引用计数确实没有获得足够的信用作为一种可行的选择,但实际上它在很多情况下都能很好地工作,从来没有任何大批量的延迟,并且不需要复杂的魔法.
一个问题仍然是清理循环引用,你至少可以这样做很少; 关心速度的应用程序开发人员可以在需要对象消失时明确地打破循环.
一个引人注目的引用计数功能是它比其他形式的垃圾收集更加直流友好.如果您正在运行循环,每次循环都会分配一些小的临时对象,那么引用GC(或显式内存管理)当然可以每次重用相同的内存,从而避免不必要的缓存刷新.任何其他类型的GC只会定期释放对象,从而导致更大的内存占用,从而导致速度变慢.
重度计数对于大量多线程系统来说效率不高,因为每次触摸引用计数时都需要获取锁.但是如果你无论如何都要设计一种新语言,你可以做的就是提高整个语言的性能和可靠性:防止几乎所有对象在线程之间共享.即.明确分享.如果这样做,您将知道哪些对象与未共享,因此在递增/递减引用计数时哪些对象需要被锁定,哪些对象可以解锁.当没有任何锁定时,refcounting性能可以非常好.
(我宁愿将此作为评论,但我没有足够的代表。)
如果您正在寻找算法而不是代码,我肯定会看一下学术文章。我偶然发现了 OOPSLA 2003 的会议记录,我立即想起了你的问题 --- 他们有两次关于垃圾收集的会议:
http://www.oopsla.org/oopsla2003/files/pap-session-garbage-collection-1.html
http://www.oopsla.org/oopsla2003/files/pap-session-garbage-collection-2.html
开始研究的这些“大爆炸”时刻的优点是,您可以使用谷歌学术搜索任何看起来有希望的文章,并通过查找标题然后单击来查看是否有更多最新的后续文章在“引用者”链接上,例如:
http://scholar.google.com/scholar?cites=11437015034573374705&as_sdt=2005&sciodt=0,5&hl=en
(由于您的要求如此之多,因此您可能需要亲吻许多青蛙才能找到您的即时收藏家。)