Heim  >  Artikel  >  Java  >  Was ist die Ursache für den Speicherverlust der inneren Java-Klasse?

Was ist die Ursache für den Speicherverlust der inneren Java-Klasse?

WBOY
WBOYnach vorne
2023-04-21 23:40:171106Durchsuche

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen