2

如果我有一个持久的对象 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

4 回答 4

4

B 和 C 可以在请求后立即进行垃圾收集。没有任何东西提到他们。

于 2012-06-04T20:59:59.883 回答
2

如果无法到达 B 和 C(但它们会到达其他对象),它们将像往常一样被收集。

于 2012-06-04T20:59:56.013 回答
2

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

于 2012-06-04T21:00:13.267 回答
1

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

如果A不包含对BandC对象的引用,那么它不能让它们保持活动状态;和对象A引用事实B无关紧要。C

于 2012-06-04T21:06:11.437 回答