【问题标题】:How using static inner class avoids memory leakage?使用静态内部类如何避免内存泄漏?
【发布时间】:2015-09-01 23:01:46
【问题描述】:

我读过非静态内部类比静态内部类会造成更多的内存泄漏。非静态类会产生它自己的对象实例以及它的输出类作为对它的引用,这很好。

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

请帮助理解静态内部类与非静态/匿名内部类内存泄漏。

【问题讨论】:

  • 这听起来很混乱。静态内部类和非静态内部类之间唯一真正的区别是非静态具有对外部类的包含实例的隐式引用。
  • 不存在静态内部类。静态嵌套类本质上只是一个组织问题,没有显着的状态耦合。
  • 引用您的来源,以便人们可以查看真实性并获取更多详细信息。
  • 请参考本帖中的答案stackoverflow.com/questions/10864853/…

标签: java memory-leaks inner-classes


【解决方案1】:

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

但是如何避免创建其外部类的实例对象呢? 不回避,还是可以创建外部类的对象

不同的是,由于静态类不保持对外部类的引用,所以外部类的对象不能被内部类对象保持活动状态。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2012-10-22
    • 2018-04-08
    相关资源
    最近更新 更多