ese*_*sen 5 java recursion garbage-collection
我知道在常规循环的每次迭代中,对象变得无法访问并标记为垃圾收集.那么递归调用呢?就像是:
public void doWork() {
Object a = new Object();
....some work with a...
this.sleep(60000);
doWork();
}
Run Code Online (Sandbox Code Playgroud)
一旦第二次递归开始,第一次递归中的对象(即"a")是否标记为垃圾收集,或者是否需要将其显式标记为null,因为外部函数由于递归而永远不会完成.
在每次递归调用期间,局部变量(此处为引用“a”)被推入堆栈。局部变量是GC根。在第二次递归调用期间,新引用被推入堆栈。但是,第一个引用仍然存在,因此该对象仍然可以访问,因此无法被垃圾收集。
因此,如果您希望第一个创建的对象被标记为垃圾回收(当函数尚未完成时),您应该显式地将“a”设置为 null。
这是了解 GC 的有用链接:http ://javabook.compuware.com/content/memory/how-garbage-collection-works.aspx