원인 분석
1. 익명 내부 클래스를 참조하지 않는 경우 익명 내부 클래스의 개체를 모두 사용하면 재활용할 가능성이 있습니다.
2. 내부 클래스가 외부 클래스에서만 참조되는 경우 외부 클래스가 더 이상 참조되지 않으면 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!