【问题标题】:Why does static inner class mitigate memory leak?为什么静态内部类可以减轻内存泄漏?
【发布时间】:2018-03-07 14:45:10
【问题描述】:

我正在阅读 Efficient Android Threading,上面写着

与其使用带有外部类引用的嵌套类,不如使用静态内部类,因为它们只引用全局类对象而不是实例对象。这只是缓解了泄漏,因为在线程执行时,静态内部类对其他实例对象的所有显式引用仍然有效。

但我不清楚为什么它会减轻泄漏。如果静态内部类中对其他实例对象的所有显式引用都是活动的,这不是与上述解释相反的内存泄漏原因吗?

【问题讨论】:

    标签: memory-leaks


    【解决方案1】:

    非静态内部类会泄漏内存,因为它有对其外部类的隐式引用。假设您有一个实例持有对内部类对象的引用,这意味着它是活动的,而这个内部类对象持有对其外部类对象的隐式引用,这也意味着外部类对象是活动的,但它可能不会用于事实。所以对于外部类对象,由于来自内部类的引用,不会被垃圾回收器清除掉,导致内存泄漏。

    您可以从这个答案中找到更多详细信息:When exactly is it leak safe to use (anonymous) inner classes?

    【讨论】:

    • 我已经明白你在说什么了。不清楚的部分是句子“因为在线程执行时,静态内部类对其他实例对象的所有显式引用仍然有效。”这句话是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多