局部变量的垃圾回收

我是一名进入Java世界的C ++程序员。而且我不能摆脱必须让Java垃圾收集器进行清理的不良感觉。

例如,此代码在Java中的行为如何?

public void myFunction() {

myObject object = new myObject();

object.doSomething();

}

当myFunction()退出时,是否将删除局部变量对象?

我是否必须在退出之前将object设置为null,否则它将超出范围并被GC删除?或者,在最坏的情况下,它会像在C ++中那样泄漏吗?

回答:

不再使用后 ,将 在某个时候 将其收集

垃圾。我相信在Java的当前实现中,它实际上将一直保留到方法结束时,而.NET中的垃圾收集器则更具侵略性。(即使在Java中,我也不知道是否有任何保证。通常,您只

希望 在调试时将局部变量保留到其上次可能读取的范围之外。)

但是,不,您不需要将变量设置为null,否则会损害可读性。

方法退出后,对象不太可能 立即

进行垃圾回收;这取决于GC的运行时间……而且,当然,如果有任何其他保留该对象的引用,则该对象可能仍不适合进行垃圾收集。不要忘记变量的值只是一个引用,而不是对象本身。(这可能需要一段时间才能习惯于C

++。)

以上是 局部变量的垃圾回收 的全部内容, 来源链接: utcz.com/qa/407624.html

回到顶部