究竟什么是可用于垃圾收集的对象?

Chr*_*ght 10 java garbage-collection

我正在与我的应用程序争夺内存问题,并试图了解垃圾收集.如果我有以下代码:

public void someMethod() {
   MyObject myObject = new MyObject();
   myObject.doSomething();  //last use of myObject in this scope
   doAnotherThing();
   andEvenMoreThings();
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,myObject垃圾收集可用myObject.doSomething()于此对象的最后一次使用,还是在它完成someMethod()范围之后?即垃圾收集足够聪明,虽然局部变量仍在范围内,但其余代码不会使用它?

小智 4

“超出范围的地方”

public void someMethod() {
   MyObject myObject = new MyObject();
   myObject.doSomething();  //last use of myObject in this scope
   myObject = null; //Now available for gc
   doAnotherThing();
   andEvenMoreThings();
}
Run Code Online (Sandbox Code Playgroud)

  • 当然,这只是为了突出显示方法内符合条件的情况。 (2认同)