Ursachenanalyse
1 Wenn auf die anonyme innere Klasse nicht verwiesen wird, besteht die Möglichkeit einer Wiederverwertung, wenn die Objekte der anonymen inneren Klasse aufgebraucht sind.
2. Wenn die innere Klasse nur in der äußeren Klasse referenziert wird und nicht mehr auf die äußere Klasse verwiesen wird, können die äußere Klasse und die innere Klasse über GC recycelt werden.
Wenn andere Klassen als die äußere Klasse auf die innere Klassenreferenz verweisen, können die innere Klasse und die äußere Klasse nicht von GC recycelt werden. Auch wenn die äußere Klasse nicht referenziert wird, hat die innere Klasse immer noch einen Verweis auf die äußere Klasse Klasse).
Instanzen
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."); } }
Das obige ist der detaillierte Inhalt vonWas ist die Ursache für den Speicherverlust der inneren Java-Klasse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!