【发布时间】:2015-01-04 12:22:31
【问题描述】:
class ClassA {
ClassB mem1 = new ClassB();
ClassB mem2 = new ClassB();
}
class ClassB {
}
public class Sample {
public static void main(String[] args) {
ClassA obj1 = new ClassA();
ClassB obj2 = obj1.mem1;
obj1 = null;
obj2 = null;
}
}
在上面的程序中,在obj1 = null这一行之后会发生什么?
obj1 是否已准备好进行垃圾回收,即使它的一个成员对象仍在被引用?
【问题讨论】:
-
它们无法再访问了。
-
它有资格获得 GC
-
obj1 已准备好进行 GC,但 obj2 通过 main 中的第二个引用保持活动状态。
-
obj1可以被 GC - 但obj2 == mem1不能被 GC。 Java 只是一个大的参考图——你可以剪掉图的一部分,但可以在其他地方引用节点。您可以将其视为由根节点(天花板)的引用(字符串)悬挂的权重。当您null引用时,您会剪断字符串。如果没有更多的绳子支撑重物,那么它就会掉到地板上 (GC)。
标签: java