2012-03-02 90 views
7

让我们假设某个类是不可达的,但也有由可达的类生成另一个匿名类。第一个可以被垃圾收集器删除吗?的Java匿名类和垃圾收集

实施例:


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? 
+0

在你的代码呼吁从'Outer'类的方法。那里可能无法达到? – Marcelo 2012-03-02 09:39:34

回答

8

否,外实例仍然在这种情况下可达到,因为每个非静态内部类有一个隐式rerefence到其外类实例。

+0

不同的是,在我的例子匿名类不使用其参考外显式类(均未内部也不外部)。所以我认为实际上外面的类是不可达的。 – 2012-03-02 09:52:29

+4

它还有参考。而且JVM无法知道这个引用永远不会被使用。如果您从不使用此外部引用,则该类应该是静态内部类或顶级类。 – 2012-03-02 09:56:03

+0

现在变得清楚了。谢谢! – 2012-03-02 10:03:34