牡丹菏泽网站建设,什么是网络营销促销,三合一网站建设官网,徐州在线网Java 内存泄漏原因 长生命周期的对象持有短生命周期对象的引用#xff1a;例如#xff0c;静态集合不断添加对象而不清理 private static final Listbyte[] cache new ArrayList();void add() {cache.add(new byte[1024 * 1024]); }未正确关闭资源#x…Java 内存泄漏原因长生命周期的对象持有短生命周期对象的引用例如静态集合不断添加对象而不清理privatestaticfinalListbyte[]cachenewArrayList();voidadd(){cache.add(newbyte[1024*1024]);}未正确关闭资源例如数据库连接、文件流、网络连接未关闭FileInputStreamfileInputStreamnull;try{fileInputStreamnewFileInputStream(target.txt);}catch(IOExceptione){e.printStackTrace();}内部类持有外部类引用非静态内部类持有外部类实例若内部类生命周期更长会导致外部类无法释放publicclassOuter{privateStringvalueOuter;classInner{voidprint(){System.out.println(value);}Overrideprotectedvoidfinalize()throwsThrowable{System.out.println(Inner 对象被回收);super.finalize();}}Overrideprotectedvoidfinalize()throwsThrowable{System.out.println(Outer 对象被回收);super.finalize();}}publicclassTest{publicstaticvoidmain(String[]args){OuterouternewOuter();Outer.Innerinnerouter.newInner();inner.print();System.out.println(----- outer 被设置为 null);outernull;System.gc();try{Thread.sleep(10*1000);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(----- inner 被设置为 null);innernull;System.gc();try{Thread.sleep(10*1000);}catch(InterruptedExceptione){e.printStackTrace();}}}# 输出结果 Outer ----- outer 被设置为 null ----- inner 被设置为 null Inner 对象被回收 Outer 对象被回收不合理的作用域将局部变量提升为静态变量意外延长对象生命周期监听器或回调未注销注册了监听器或回调但是缺少移除方法ThreadLocal 使用不当例如线程池的线程复用时ThreadLocal 未及时调用 remove 方法导致数据残留