为了账号安全,请及时绑定邮箱和手机立即绑定

Java内部类内存泄漏

Java内部类内存泄漏

慕姐4208626 2022-07-27 09:43:20
假设我有这样的代码:public class OuterClass{    InnerClass myInnerClass = new InnerClass();    public class InnerClass{    }}// somewhere I have created an OuterClass instance:OuterClass outerClass = new OuterClass();// do something// ...outerClass = null;问题:只设置outerClassnull来避免内存泄漏是否足够?InnerClass对 有参考OuterClass,OuterClass对 有参考InnerClass。因此,由于这两个对象都有对它们的引用,它们不能被垃圾回收!
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

如果没有其他人引用该myInnerClass实例,则不存在“泄漏”(首先,这是一个非常强大的词)。

只要任何活动对象仍然具有myInnerClass对该内部类实例的引用,就不能对其进行垃圾回收(毕竟,它仍然可以访问和使用)——并且该内部类实例也将保持其外部类实例处于活动状态(因为可以从内部实例间接访问)。

这与垃圾收集器的一般工作方式没有什么不同。它不会被引用循环抛弃。当无法再从“活根”到达时,它会可靠地收集整个循环。


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信