我正在与我的应用程序的内存问题作斗争,并试图让我的头围绕垃圾收集。如果我有下面的代码:究竟是什么时候可用于垃圾收集的对象?
public void someMethod() {
MyObject myObject = new MyObject();
myObject.doSomething(); //last use of myObject in this scope
doAnotherThing();
andEvenMoreThings();
}
所以我的问题是,将myObject
可用于垃圾收集myObject.doSomething()
这是一次使用这种对象,或someMethod()
完成后后,它散发出来的范围是什么?即是否足够聪明地看到垃圾收集,尽管局部变量仍在范围之内,其余代码将不会使用它?
我想你在错误的上下文中使用'dereferenced'。 – isah
仅仅因为垃圾收集器认为它没有被使用并不代表它会马上选择释放它 - 你不应该编写依赖于不可预知事件行为的代码;)如果你有内存问题那么你可能会错误地引用一些东西:( – deanWombourne
嗯,谢谢isah,我认为你是对的,我会更新标题的问题 –