一尘不染

局部变量的垃圾回收

java

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

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

public void myFunction() {
    myObject object = new myObject();
    object.doSomething();
}

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

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


阅读 385

收藏
2020-09-08

共1个答案

一尘不染

不再使用后 ,将 在某个时候 将其收集
垃圾。我相信在Java的当前实现中,它实际上将一直保留到方法结束时,而.NET中的垃圾收集器则更具侵略性。(即使在Java中,我也不知道是否有任何保证。通常,您只
希望 在调试时将局部变量保留到其上次可能读取的范围之外。)

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

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

2020-09-08