Java匿名类和垃圾收集器

7
假设某个类不可达,但是由该类生成的其他匿名类是可达的。第一个类可以被垃圾收集器移除吗?
例如:

class Outer {
  public Object getInner() {
    return new Object() {};
  }
}

...

Outer outer = new Outer();
Object inner = outer.getInner();

// Could the "outer" instance be removed here considering that "inner" is using below?

在你的代码中,你正在调用Outer类中的一个方法。那里可能会有什么无法到达的地方? - Marcelo
1个回答

8
不,这种情况下外部实例仍然可以被访问,因为每个非静态内部类都有一个对其外部类实例的隐式引用。

区别在于我的示例中的匿名类没有明确地使用其对外部类的引用(无论是内部还是外部)。因此,我认为实际上外部类是不可访问的。 - Ilya Lakhin
5
它仍然具有该引用。JVM无法知道此引用永远不会被使用。如果您从未使用此外部引用,则该类应为静态内部类或顶级类。 - JB Nizet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接