大型循环引用和JVM垃圾收集器

时间:2012-02-17 13:47:07

标签: java algorithm garbage-collection jvm circular-reference

JVM能否找到大型循环引用并收集对象?是否有任何官方文件/链接说明相同?或者您对垃圾收集大型循环引用有任何好/坏经验。

更新链接:http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#997442

2 个答案:

答案 0 :(得分:12)

从简单的角度来看,JVM使用Tracing Garbage Collection,Mark-and-Sweep。循环引用不会干扰这种算法的正确行为,因为它从“基础”级别开始,并通过引用来查找那些可以从那里到达的元素。任何无法到达的都可以被收集/释放。

值得注意的是,JVM垃圾收集器通常比这更复杂,有许多优化可以使事情变得更快。话虽这么说,标记和扫描算法的一般属性适用于它。

答案 1 :(得分:3)

是。 JVM的垃圾收集器可以处理循环引用。

JVM使用的垃圾收集器不是引用计数垃圾收集器。相反,它通过跟踪仍然可访问的引用(所有线程的堆栈或静态引用上的引用)来查找垃圾。