Java垃圾收集混乱

时间:2012-06-04 20:57:53

标签: java garbage-collection

如果我有一个持久的对象A和许多包含对A的引用的临时对象B,C,D等,只要A被某个东西引用,这些临时对象是否会被收集?

class A {} // (sits in web app session)

class B {
  private A a;
}

class C {
  private A a;
}

只有请求存在B和C,但包含对A的引用。

4 个答案:

答案 0 :(得分:4)

B和C可以在请求后立即进行垃圾回收。什么都没有提到它们。

答案 1 :(得分:2)

如果没有办法到达B和C(但是他们到达其他物体),他们将照常收集。

答案 2 :(得分:2)

是的,可以收集它们。如果A持有对它们的引用,那么只要A仍然可以访问它们就不会被收集。

答案 3 :(得分:1)

是的,他们会的。只要可以从根可访问对象(当前活动调用中的局部变量加上全局变量)访问它们,垃圾收集就会使对象保持活动状态。

如果A不包含对BC个对象的引用,则它无法使它们保持活动状态; A {/ 1}}引用B 引用C和{{1}}对象这一事实无关紧要。