方法运行完毕后,是否收集局部变量

Yic*_*nis 4 java variables garbage-collection

例如

public void doSomething() {
   Dog smallDog = new Dog();
   smallDog.bark();
}
Run Code Online (Sandbox Code Playgroud)

这个方法运行后会收集狗对象吗?

Aff*_*ffe 6

当方法返回时,它有资格被收集.垃圾收集实际发生的时候是未来的未知时间.

如果没有看到bark()的实现,就无法确定.

如果这是你的吠声:

public void bark() {
   BarkListeners.callBack(this);
}

public class BarkListeners {
  private static final List<Dog> barkers = new ArrayList<Dog>();

  public static void callBack(Dog dog) {
    barkers.add(dog);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后不,它不会被垃圾收集!

  • 还有一种可能性 - *它甚至不需要垃圾收集*.JIT可以执行转义分析,它会检查是否满足了多个前置条件(没有引用对象在本地上下文之外转义,它没有终结器,可能更多).如果满足这些前提条件,则可以在堆栈上分配对象=不需要GC. (3认同)