什么“时间精确”的垃圾收集算法确实存在?

时间:2013-06-05 18:41:54

标签: language-agnostic garbage-collection

哪些垃圾收集算法可以识别垃圾对象一旦它们变成垃圾

我唯一想到的是每次引用计数递减到非零值时引用计数和添加的循环搜索。

还有其他有趣的收集算法可以实现吗? (请注意,我只是要求好奇心;我知道所有这些收藏家的效率可能都非常低效)

2 个答案:

答案 0 :(得分:0)

虽然不是垃圾收集算法,但转义分析允许推理对象的生命周期。因此,如果效率是一个问题,对象应该收集,而不是在“明显”的情况下收集,它可以很方便。基本思想是对程序执行静态分析(在编译时或在为VM编译时在加载时)并确定新创建的对象是否可以转义它创建的例程(因此分析的名称) 。如果对象没有传递到其他任何地方,没有存储在全局内存中,也没有从给定的例程返回,等等,它可以在从这个例程返回之前释放,甚至更早,在它最后一次使用的地方。

可以在堆栈而不是堆中分配不超过相关方法调用的对象,以便在编译时将它们从垃圾回收周期中删除,从而降低对常规GC的压力。

答案 1 :(得分:-4)

这种机制称为“堆管理”,而不是垃圾收集。

根据定义,垃圾收集与堆管理分离。这是因为在某些环境/应用程序中,跳过执行“自由”操作并跟踪正在使用的内容会更有效。相反,每隔一段时间,就在前面,收集所有未引用的节点并将它们放回到免费列表中。

==附录==

我正在试图用垃圾收集来纠正堆管理的术语。 Wikipedia article同意我的用法,以及我在大学学到的东西,尽管那是几十年前的事。 Lisp和Snobol等语言发明了垃圾收集的需求。诸如C之类的语言不提供如此繁重的运行时环境;而是依靠程序员来管理未使用的内存和资源位的清理。