Einer der offensichtlichsten Vorteile von AVA ist der Speichermanagementmechanismus. Sie müssen nur einfach Objekte erstellen, Javas Müllwiederherstellungsmechanismus ist für die Zuordnung und Freigabe des Speichers verantwortlich. Die Situation ist jedoch nicht so einfach wie vorgestellt, da in Java -Anwendungen häufig Speicherlecks auftreten.
Dieses Tutorial zeigt, was Speicherleck ist, warum es Speicherlecks gibt und wie ein Speicherleckage vorliegt.
Was ist Speicherleckage?
Definition: Wenn Objekte nicht mehr in Anwendungen verwendet werden, sondern weil sie an anderer Stelle zitiert werden, kann das Recycling von Müll nicht entfernt werden (dies führt zu unangemessener Speicher, was zu Überlauf des Speicherüberlaufs führt).
Um diese Definition zu verstehen, müssen wir den Zustand des Objekts im Gedächtnis verstehen. Die folgende Abbildung zeigt diejenigen, die nicht verwendet werden, und diese werden nicht zitiert.
Aus der Abbildung können wir das Referenzobjekt und das unvorbereitete Objekt (Bereich) sehen. Kein zitiertes Objekt darf durch den Müllrecyclingmechanismus recycelt werden, und das Referenzobjekt kann nicht durch den Müllwiederherstellungsmechanismus recycelt werden. Natürlich wird das Ziel nicht verwendet, da es keine anderen Objekte gibt, die es zitieren. Es werden jedoch nicht alle Objekte nicht zitiert. Einige nicht verwendete Objekte werden noch anderswo zitiert! Dies ist die Ursache für Speicherleckage.
Warum tritt Speicherleckage auf?
Kommen wir zu diesem Beispiel unten, um zu sehen, warum das Speicherleck auftritt. Im folgenden Beispiel verweist das A -Objekt das B -Objekt. Der Lebenszyklus von A (T1-T4) ist viel länger als der Lebenszyklus (T2-T3) von B. Wenn B in der Anwendung nicht mehr verwendet wird, hält A immer noch die Referenz auf B. Auf diese Weise kann der Müllwiederherstellungsmechanismus B nicht aus dem Speicher entfernen. Dies führt wahrscheinlich zu Speicherspillover, denn wenn viele andere Objekte wie a sind, gibt es viele Objekte, die nicht im Speicher recycelt werden können, was viel Speicherplatz verbraucht.
Es ist auch möglich, dass B eine große Anzahl von Verweise auf andere Objekte enthält. Diese von B verwiesenen Objekte werden nicht recycelt. Alle diese nicht verwendeten Objekte verbrauchen wertvolle Speicherplatz.
Wie kann man Speicherlecks verhindern?
Das Folgende finden Sie einige schnelle Fähigkeiten, um Speicherleckage zu verhindern:
1. Achten Sie auf die Sammelklasse wie HashMap, ArrayList usw., da sie häufig Speicherlecks auftreten. Wenn sie als statische Objekte deklariert werden, ist ihr Lebenszyklus so lang wie der Lebenszyklus der Anwendung.
2. Achten Sie auf den Vorfallmonitor und den Rückruf. Wenn eine Klasse bei einem Hörer registriert ist, aber wenn die Kategorie nicht mehr verwendet wird, wird das Überwachungsgerät möglicherweise nicht abgebrochen und Speicherlecks können auftreten.
3. "Wenn eine Klasse seinen eigenen Speicher verwaltet, sollten Programmierer auf Speicherleckage aufmerksam sein."