为啥静态内部类可以减轻内存泄漏?
Posted
技术标签:
【中文标题】为啥静态内部类可以减轻内存泄漏?【英文标题】:Why does static inner class mitigate memory leak?为什么静态内部类可以减轻内存泄漏? 【发布时间】:2018-03-07 14:45:10 【问题描述】:我正在阅读 Efficient android Threading,上面写着
与其使用带有外部类引用的嵌套类,不如使用静态内部类,因为它们只引用全局类对象而不是实例对象。这只是缓解了泄漏,因为在线程执行时,静态内部类对其他实例对象的所有显式引用仍然有效。
但我不清楚为什么它会减轻泄漏。如果静态内部类中对其他实例对象的所有显式引用都是活动的,这不是与上述解释相反的内存泄漏原因吗?
【问题讨论】:
【参考方案1】:非静态内部类会泄漏内存,因为它有对其外部类的隐式引用。假设您有一个实例持有对内部类对象的引用,这意味着它是活动的,而这个内部类对象持有对其外部类对象的隐式引用,这也意味着外部类对象是活动的,但它可能不会用于事实。所以对于外部类对象,由于来自内部类的引用,不会被垃圾回收器清除掉,导致内存泄漏。
您可以从这个答案中找到更多详细信息:When exactly is it leak safe to use (anonymous) inner classes?
【讨论】:
我已经明白你在说什么了。不清楚的部分是句子“因为在线程执行时,静态内部类对其他实例对象的所有显式引用仍然有效。”这句话是什么意思?以上是关于为啥静态内部类可以减轻内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章