简介
本文介绍Java内部类持有外部类导致内存泄露的原因以及其解决方案。
为什么内部类持有外部类会导致内存泄露?
非静态内部类会持有外部类,如果有地方引用了这个非静态内部类,会导致外部类也被引用,垃圾回收时无法回收这个外部类(即使外部类已经没有其他地方在使用了)。
解决方案
- 不要让其他的地方持有这个非静态内部类的引用,直接在这个非静态内部类执行业务。
- 将非静态内部类改为静态内部类。
- 内部类改为静态的之后,它所引用的对象或属性也必须是静态的,所以静态内部类无法获得外部对象的引用,只能从 JVM 的 Method Area(方法区)获取到static类型的引用。
相关网址
匿名内部类的内存泄露:Java–匿名内部类持有外部类导致内存泄露的原因和解决方案 – 自学精灵
为什么要持有外部类
此内容仅限VIP查看,请先登录
请先
!