如果我有一个持久的对象 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 的引用。
如果我有一个持久的对象 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 的引用。
B 和 C 可以在请求后立即进行垃圾收集。没有任何东西提到他们。
如果无法到达 B 和 C(但它们会到达其他对象),它们将像往常一样被收集。
是的,它们可以被收集。如果 A 持有对它们的引用,那么只要 A 仍然可以访问,它们就不会被收集。
是他们会。只要可以从根可访问对象(基本上是当前活动调用中的局部变量,加上全局变量)可以访问它们,垃圾收集就会使对象保持活动状态。
如果A
不包含对B
andC
对象的引用,那么它不能让它们保持活动状态;和对象A
引用的事实B
无关紧要。C