6

哪些垃圾收集算法可以在垃圾对象变成垃圾后立即识别它们

我想到的唯一一件事是每次引用计数减少到非零值时,都会增加循环搜索的引用计数。

还有其他有趣的收集算法可以实现吗?(请注意,我只是出于好奇而询问;我知道所有此类收集器的效率都可能非常低下)

4

2 回答 2

0

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

存活时间不超过相关方法调用的对象可以分配在堆栈上而不是堆中,因此可以在编译时将它们从垃圾收集周期中删除,从而降低一般 GC 的压力。

于 2014-02-13T06:28:19.083 回答
-4

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

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

== 附录 ==

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

于 2013-06-05T18:49:04.397 回答