内部类是轻量级的吗?

Wan*_*eck 8 java closures permgen inner-classes

内部类比普通类更轻量级,还是最终java像普通类一样编译内部类?

我知道在java类不都是非常轻巧自己,他们占据了PermGen的内存的一部分,所以我想知道这是否是最好用的类似于闭包功能的内部类,或者如果标准类也做得很好?

tem*_*def 19

内部类和匿名内部类都编译为.class文件.例如:

class Outer {
     class Inner {

     }

     Object function() {
          return new Object() {

          };
     }
}
Run Code Online (Sandbox Code Playgroud)

将生成三个.class文件Outer.class,Outer$Inner.classOuter$1.class.它们并不比其他类更"轻量级",并且(据我所知)从性能角度来看,使用one over other是没有优势的.当然,内部类,特别是匿名内部类在常规类更难编码的上下文中非常有用,但这是一个单独的问题.

  • +1.如果任何内部类都"更重",因为它们包含编译器创建的合成方法和字段,以便于它们对包含类的特殊可见性规则. (8认同)

Tim*_*der 7

内部类仍然是类,它们仍然必须由ClassLoader加载.如果有的话,情况正好相反.非静态内部类可以使父类不被垃圾收集,因为它具有对拥有它的类的引用.