我对Java垃圾收集有一些疑问。
下面是一些测试类的代码
public class ChildMaker{
public Child createChild(){
Child c = new Child();
return c;
}
}
我正在进行的实际测试
public class TestChildMaker{
public getChild(){
ChildMaker maker = new ChildMaker();
Child c = maker.createChild();
....
}
}
我想知道ChildMaker
实例是否可以被垃圾收集。可以吗?
答案 0 :(得分:2)
Java垃圾收集器非常复杂,并且喜欢相当自主地工作。你不能强迫它垃圾收集任何东西,你只能告诉它什么时候可以垃圾收集。
任何引用仍保存在程序中的对象(严格地说:通过任何仍然可以运行的线程)都不能被垃圾回收。还有别的。
我认为你问的是ChildMaker
实例是否可以被垃圾收集,而Child
仍被引用。严格地说,您提供的代码中不存在这样的位置。答案是肯定的;如果ChildMaker
未被引用,那么即使仍然引用了Child
,也可以对其进行垃圾回收,因为Child
没有对ChildMaker
的引用。
答案 1 :(得分:1)
答案取决于发生的事情
public getChild(){
ChildMaker maker = new ChildMaker();
Child c = maker.createChild();
.... // here <--------
}
如果重用变量maker
,则它引用的对象是可访问的,因此不能进行垃圾回收。如果未重用maker
,则该对象不再可访问,因此可以进行垃圾回收。
可到达对象是任何可以访问的任何对象 从任何实时线程继续计算。