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.
Sie können dem Garbage Collector mitteilen, dass ein Array freigegeben werden kann, indem Sie ihm null
zuweisen:
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 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%Um alle Elemente aus der ArrayListe zu entfernen
arrayList.removeAll(arrayList);
Tags und Links java memory memory-management