原因分析
1、匿名內部類別沒有被引用的話,匿名內部類別的物件用完的話就有回收的機會。
2、如果內部類別只是在外部類別中引用,當外部類別不再引用時,外部類別和內部類別可以透過GC回收。
內部類別引用被外部類別以外的其他類別引用時,內部類別和外部類別不能被GC回收,即使外部類別不被引用,內部類別也有指向外部類別的引用)。
實例
public class ClassOuter { Object object = new Object() { public void finalize() { System.out.println("inner Free the occupied memory..."); } }; public void finalize() { System.out.println("Outer Free the occupied memory..."); } } public class TestInnerClass { public static void main(String[] args) { try { Test(); } catch (InterruptedException e) { e.printStackTrace(); } } private static void Test() throws InterruptedException { System.out.println("Start of program."); ClassOuter outer = new ClassOuter(); Object object = outer.object; outer = null; System.out.println("Execute GC"); System.gc(); Thread.sleep(3000); System.out.println("End of program."); } }
以上是Java內部類別記憶體洩漏的原因是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!