我正在学习ruby的标记和扫描垃圾收集方法。我在这里和那里碰到了几个线程(并且this article通过一个我不能再发现的SO线程),但它们似乎适用于旧版本的ruby并且它们中的信息并不总是一致的。 (事实上,我的印象是它主要是引用计数。)
对于任何对ruby 1.9.2内部人员有所了解的人来说,是否会知道如何处理棘手的背引用和循环引用? (理想情况下,有一些关于如何实际实施的细节/指示。)
答案 0 :(得分:4)
标记和扫描GC,就像通常标记为垃圾收集保存引用计数的几乎所有算法一样,处理循环引用就好了。这与具体实现无关。无论Ruby 1.9使用的实际GC如何,它都不会遇到循环问题。这是标记和扫描收集器方法的草图,但请确保其他收集方案也处理循环引用。
你看,一个“从外部”可以访问的引用圈不会导致无限递归(我们不会多次访问给定对象的引用)和一个无法访问的引用圈isn' t标记为可达,因此在标记后自由释放(每个元素独立)。