Gc使用类型信息

时间:2011-01-17 14:26:58

标签: algorithm garbage-collection

有没有人知道GC算法利用类型信息来允许增量收集,优化收集,并行收集或其他一些不错的功能?

按类型信息,我的意思是真正的语义。让我举一个例子:假设我们有一个OO样式类,其中包含维护隐藏表示的列表的方法。当对象变得无法访问时,收集器可以在列表中运行,删除所有节点。由于封装,它知道它们现在都无法到达。它也知道不需要对指针进行常规扫描,因为它知道所有节点都是相同的类型。

显然,这是一个特殊情况,可以使用C ++中的析构函数轻松处理。真正的问题是,是否有办法分析程序中使用的类型,并指示收集器使用结果信息来获益。我猜你称之为类型的定向垃圾收集器

2 个答案:

答案 0 :(得分:5)

至少以某种方式利用容器进行垃圾收集的想法并不新鲜,尽管在Java中,您通常不能假设容器只包含对其中对象的引用,因此您的方法在该上下文中不起作用。

以下是一些参考资料。一个用于泄漏检测,另一个用于改进缓存局部性。

http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4814126 http://www.cs.umass.edu/~emery/pubs/06-06.pdf

您可能想访问Richard Jones的extensive garbage collection bibliography以获取更多参考资料,或者询问gc-list上的人。

答案 1 :(得分:0)

我认为它与特定算法没有任何关系。

当GC计算对象关系图时,如果编译器足以提取它,那么Collection对象唯一负责列表中这些元素的信息将隐式存在于图中。

无论选择哪种GC算法:信息更多地取决于编译器/运行时将如何提取此信息。

另外,我会避免使用GC的C和C ++。由于指针算术,别名和指向对象(数据成员或数组中的引用)的可能性,在这些语言中执行准确的垃圾收集非常困难。它们并没有为它制作。