java内部类的内存泄漏原因

原因分析

1、匿名内部类没有被引用的话,匿名内部类的对象用完的话就有回收的机会。

2、如果内部类只是在外部类中引用,当外部类不再引用时,外部类和内部类可以通过GC回收。

内部类引用被外部类以外的其他类引用时,内部类和外部类不能被GC回收,即使外部类不被引用,内部类也有指向外部类的引用)。

实例

publicclassClassOuter{

Objectobject=newObject(){
publicvoidfinalize(){
System.out.println("innerFreetheoccupiedmemory...");
}
};

publicvoidfinalize(){
System.out.println("OuterFreetheoccupiedmemory...");
}
}

publicclassTestInnerClass{
publicstaticvoidmain(String[]args){
try{
Test();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}

privatestaticvoidTest()throwsInterruptedException{
System.out.println("Startofprogram.");

ClassOuterouter=newClassOuter();
Objectobject=outer.object;
outer=null;

System.out.println("ExecuteGC");
System.gc();

Thread.sleep(3000);
System.out.println("Endofprogram.");
}
}

以上就是java内部类的内存泄漏原因,希望对大家有所帮助。更多Java学习指路:Java基础

原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容