Entfernen Sie einen Variablenspeicher

8

Hallo, ich habe drei Array-Variablen von a[dynamic], b[dynamic], c[dynamic] . Sie können jede Größe haben, jetzt möchte ich die Variable zerstören, sagen Sie a. Ich bin mir sicher, dass ich die Variable nicht mehr verwenden werde. Jede Idee und Anregung sind willkommen.

    
special 10.05.2012, 15:03
quelle

3 Antworten

16

Sie können dem Garbage Collector mitteilen, dass ein Array freigegeben werden kann, indem Sie ihm null zuweisen:

%Vor%

Es gibt jedoch einige Dinge zu beachten:

  • Dies befreit den Raum nicht. Stattdessen wird das Array dazu befähigt , vom Garbage Collector freigegeben zu werden. Der GC mag es nicht schaffen, ihn für eine lange Zeit zu befreien.

  • Tatsächlich ist das Array nur für die Garbage Collection geeignet, wenn es nicht erreichbar ist. Wenn Sie einer anderen (noch aktiven) Variablen oder einem erreichbaren Objekt einen Verweis auf das Array zugewiesen haben, wird der GC diesen nicht zurückfordern.

  • In realen Java-Anwendungen ist dies selten sinnvoll. Es ist üblich, einfach zuzulassen, dass die Variablen im normalen Verlauf der Berechnung nicht in den Geltungsbereich fallen. 1 . Sie würden nur null eine Variable (oder ein Objektfeld oder ein Array-Element) so definieren, dass die Variable nicht für lange Zeit aus dem Geltungsbereich verschwindet und sich auf ein großes Array / Objekt oder Netzwerk bezieht.

1 - Jede vernünftige JVM-Implementierung weiß, dass lokale Variablen den Geltungsbereich verlassen, wenn eine Methode beendet wird. Ob die JVM Bereiche mit einer feineren Granularität verfolgt, ist implementierungsspezifisch, und (ehrlich gesagt) weiß ich nicht, wie JVM dies in der Praxis handhaben.

Beachten Sie, dass fast alles technisch den JLS-Anforderungen entspricht ... vorausgesetzt, der GC löscht keine erreichbaren (dh nicht müllähnlichen) Objekte. Dazu gehört eine hypothetische JVM, die macht überhaupt keine Müllabfuhr!

    
Stephen C 10.05.2012, 15:08
quelle
2

Stephen C hat Ihre Frage zwar beantwortet, aber für nicht-primitive Typen möchten Sie auch sicherstellen, dass alle Objekte in Ihrem Array als null markiert sind, wenn Sie sie nicht brauchen. Dadurch wird sichergestellt, dass Sie keinen Speicherleck haben.

Etwas wie:

%Vor%

Dann mache deine Array-Referenz null

%Vor%     
mprabhat 10.05.2012 15:20
quelle
0

Um alle Elemente aus der ArrayListe zu entfernen

arrayList.removeAll(arrayList);

    
Roscian Frank 15.09.2017 13:11
quelle

Tags und Links