Garbage Collection, wenn endgültige Variablen in anonymen Klassen verwendet werden

8

Wenn ich einen Code ähnlich dem folgenden habe:

%Vor%

Wann sollte Müll gesammelt werden, wenn überhaupt? Nur wenn die Aufgabe gesammelt wurde, oder wird sie für immer in Erinnerung bleiben, weil sie endgültig ist?

    
Colby 31.05.2012, 21:41
quelle

4 Antworten

7

o könnte Garbage Collection erhalten, sobald sie nicht mehr erreichbar ist, egal ob sie endgültig ist oder nicht. Natürlich, solange execute läuft, wenn es auf o zugreifen muss, wird GC verhindert.

Wenn execute ausgeführt wird und angenommen wird, dass Sie keine Referenzen auf o gespeichert haben (z. B. in einer Sammlung), wird dies als bereit für die Garbage Collection gekennzeichnet.

    
assylias 31.05.2012, 21:45
quelle
5

Wenn die anonyme Klasseninstanz für die Garbage Collection infrage kommt, wird, wenn sich nichts anderes auf das Objekt bezieht, auf das o beim Aufruf der Methode Bezug genommen hat, dieses Objekt für die Garbage Collection geeignet.

Endgültige Variablen, die die Garbage Collection verhindern, haben nichts besonderes zu bieten.

    
Jon Skeet 31.05.2012 21:45
quelle
2

Es besteht keine Beziehung zwischen final Schlüsselwort und der Lebensdauer der Variablen.

Es wird Müll gesammelt werden, wenn nicht mehr benötigt wird, und da es ein Parameter ist, kann dies außerhalb der Methode passieren (wenn es keine Referenz außerhalb gibt).

Das Schlüsselwort final ist nur eine Einschränkung für den Compiler, die jede weitere Änderung des Verweises o nach dem Aufruf der Funktion verbietet.

    
Jack 31.05.2012 21:45
quelle
2

'final' hat keinen Einfluss auf GC. Das Objekt wird für die Erfassung verfügbar, wenn es nicht mehr erreichbar ist. In diesem Fall gibt es mindestens drei Referenzen, von denen jeder das stoppen kann: der 'final' Parameter, der verschwindet, wenn die Methode zurückkehrt; die Referenz des Anrufers; und die Kopie der letzten Variablen in der anonymen Klasseninstanz.

    
EJP 31.05.2012 21:47
quelle

Tags und Links