我知道在常规循环的每次迭代中,对象都会变得无法访问并标记为垃圾回收。那么递归调用呢?就像是:
public void doWork() {
Object a = new Object();
....some work with a...
this.sleep(60000);
doWork();
}
一旦第二个递归开始,第一个递归中的对象(即“a”)是否被标记为垃圾回收,或者是否需要显式地将其标记为 null,因为外部函数由于递归而永远不会完成。
在每次递归调用期间,局部变量(此处为引用“a”)被推入堆栈。局部变量是GC根。在第二次递归调用期间,新引用被推入堆栈。但是,第一个引用仍然存在,因此该对象仍然可以访问,因此无法被垃圾收集。
因此,如果您希望第一个创建的对象被标记为垃圾回收(当函数尚未完成时),您应该显式地将“a”设置为 null。
这是了解 GC 的有用链接:http://javabook.compuware.com/content/memory/how-garbage-collection-works.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)