日期:2014-05-20  浏览次数:20785 次

java内存泄露问题
有时候为了避免内存泄露,使用静态内部类来取代非静态内部类,为什么呢?

------解决方案--------------------
非静态内部类的对象默认包含了它的Container的引用,比如:
class A{
class B{

}
}

B的对象中默认有一个A的引用,垃圾回收的时候,如果处理不当,有可能导致A的对象不能被回收,导致内存泄漏。
------解决方案--------------------
你要一个静态内部类(题外话:static的不叫内部类,叫:nested class)实例的时候,你并不需要一个外部类的实例(Enclosing Instance),比如:
Java code

class T {
    static class Nested {
        void sayHello() {
            System.out.println("hello");
        }
    }
}

class C {
    public static void main(String... args) {  
        new T.Nested().sayHello(); //不需要外部类T的实例,这里T只是一个类Nested的限定名称的一部分
    } 
}

------解决方案--------------------
探讨

非静态内部类的对象默认包含了它的Container的引用,比如:
class A{
class B{

}
}

B的对象中默认有一个A的引用,垃圾回收的时候,如果处理不当,有可能导致A的对象不能被回收,导致内存泄漏。