Java 如何使用静态内部类避免内存泄漏?

Java 如何使用静态内部类避免内存泄漏?,java,memory-leaks,inner-classes,Java,Memory Leaks,Inner Classes,我已经读到非静态内部类比静态内部类会产生更多的内存泄漏。非静态类将生成自身的对象实例以及作为引用的out类,这是很好的 所以静态内部类可以避免多个对象实例,因为它将创建单个类级别的对象,而不是实例级别的对象。但它如何避免创建外部类实例的对象呢 Plz有助于理解静态内部类与非静态/匿名内部类内存泄漏 静态/非静态内部类有点复杂,在另一个问题(注释中的链接)中有详细解释。我将尝试在这里回答您的问题 但它如何避免创建外部类实例的对象呢? 它并没有避免,您仍然可以创建外部类的对象 区别在于,由于静态类不

我已经读到非静态内部类比静态内部类会产生更多的内存泄漏。非静态类将生成自身的对象实例以及作为引用的out类,这是很好的

所以静态内部类可以避免多个对象实例,因为它将创建单个类级别的对象,而不是实例级别的对象。但它如何避免创建外部类实例的对象呢


Plz有助于理解静态内部类与非静态/匿名内部类内存泄漏

静态/非静态内部类有点复杂,在另一个问题(注释中的链接)中有详细解释。我将尝试在这里回答您的问题

但它如何避免创建外部类实例的对象呢? 它并没有避免,您仍然可以创建外部类的对象

区别在于,由于静态类不保持对外部类的引用,外部类的对象不能由内部类对象保持活动


而在非静态的情况下,将有一个对外部类的引用,直到您有对内部类对象的活动引用(比如O1),外部类对象(由O1引用)也不会被垃圾收集(即使您可能没有任何外部类对象的活动引用)。

这听起来很混乱。静态和非静态内部类之间唯一的真正区别在于,非静态类对外部类的包含实例有一个隐式引用。没有静态内部类这样的东西。静态嵌套类本质上只是一个组织问题,没有明显的状态耦合。请引用您的源代码,以便人们可以查看真实性并获得更多详细信息。请参阅此线程中的答案