原因分析
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 中国語 Web サイトの他の関連記事を参照してください。