Esp*_*pen 17 java garbage-collection
我是一名进入Java世界的C++程序员.我无法摆脱不得不让Java垃圾收集器进行清理的坏感觉.
例如,这段代码将如何在Java中运行?
public void myFunction() {
myObject object = new myObject();
object.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
当myFunction()退出时,是否会删除局部变量对象?
在退出之前是否必须将对象设置为null,或者它是否超出范围并被GC删除?或者,在最坏的情况下,它会像在C++中那样泄漏吗?
Jon*_*eet 28
它将在不再使用后的某个时刻被垃圾收集.我相信Java的当前实现它实际上会持续到方法结束,而.NET中的垃圾收集器更具侵略性.(我不知道即使在Java中是否有任何保证.通常,您只希望本地变量在调试时保持超出其最后可能的读数.)
但不,您不需要将变量设置为null,这样做会损害可读性.
方法退出后,对象不太可能立即收集垃圾; 这取决于GC运行的时间......当然,如果其他任何东西保留在对象的引用上,它可能无法进行垃圾收集.不要忘记变量的值只是一个引用,而不是对象本身.(这可能需要一段时间才能习惯来自C++.)