GC对象的资格

时间:2013-08-20 12:48:13

标签: java garbage-collection

如果对象A引用了对象B而对象B引用了对象A并且它们没有任何其他实时引用,那么它们是否有资格获得GC?

2 个答案:

答案 0 :(得分:3)

是。如果对象不是可访问,则可能发生Java中对象的垃圾收集。它不受循环引用的影响。

java.lang.ref的包文档提供了可达性的一个定义:

  

从最强到最弱,不同的可达性水平反映了物体的生命周期。它们在操作上定义如下:

     
      
  • 如果某个线程可以在不遍历任何引用对象的情况下到达某个对象,则可以强烈访问该对象。新创建的对象可由创建它的线程强烈访问。   如果一个对象不能很容易到达,但可以通过遍历软引用来访问它。
  •   
  • 如果一个对象既不强也不可轻易到达,但是可以通过遍历弱引用来到达,则该对象是弱可达的。当清除对弱可达对象的弱引用时,该对象就有资格进行最终确定。
  •   
  • 如果一个物体既不是强烈的,柔和的,也不是微弱的可触及的,那么它就是幻影可达的,它已经完成,并且一些幻象参考指的是它。
  •   
  • 最后,如果无法通过上述任何方式访问某个对象,则无法访问该对象,因此有资格进行回收。
  •   

答案 1 :(得分:0)

Java的GC认为对象是“垃圾”,如果它们无法通过从垃圾收集根开始的链到达,那么将收集这些对象。尽管物体可以指向彼此形成一个循环,但如果它们从根部切断,它们仍然是垃圾。