Java匿名类和垃圾收集器

Ily*_*hin 7 java garbage-collection jvm anonymous-class

让我们假设某些类是不可访问的,但是该类生成的另一个匿名类是可访问的.可以通过垃圾收集器删除第一个吗?

例:


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?
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 8

不,在这种情况下外部实例仍然可以访问,因为每个非静态内部类都对其外部类实例具有隐式rerefence.

  • 它仍然有参考.并且JVM无法知道永远不会使用此引用.如果您从不使用此外部引用,则该类应该是静态内部类或顶级类. (5认同)