Zum Inhalt springen

Garbage Collection in JavaScript verstehen

Einführung in die Garbage Collection

Die Garbage Collection verwaltet den Speicher in JavaScript automatisch. Sie hilft, Speicher zu sparen, indem sie Daten entfernt, die nicht mehr benötigt werden. Zu wissen, wie die Garbage Collection funktioniert, ist sehr wichtig, um JavaScript-Programme effizienter laufen zu lassen und den Speicher sinnvoll zu nutzen.

Grundlagen der Garbage Collection

Die Speicherverwaltung in JavaScript wird hauptsächlich durch die Garbage Collection abgewickelt, die im Hintergrund arbeitet. Das Hauptziel besteht darin, Datenobjekte im Arbeitsspeicher der Anwendung zu finden, die nicht mehr zugänglich oder benötigt werden, und diesen Speicher freizugeben.

Erreichbarkeit als Kriterium

Das Hauptkonzept hinter der Garbage Collection in JavaScript ist die Erreichbarkeit. Ein Objekt gilt als erreichbar, wenn es auf irgendeine Weise zugänglich oder nutzbar ist, d. h., es gibt einen Weg, es beginnend von der Wurzel (globale Objekte) über eine Reihe von Referenzen zu erreichen.

Beispiel: Grundlegende Erreichbarkeit


Output appears here after Run.

Erklärung: Anfangs ist das Objekt mit der Eigenschaft name: "John" über die Variable user erreichbar. Nachdem die Referenz auf eine andere Variable admin kopiert und user auf null gesetzt wurde, bleibt das Objekt über admin erreichbar und wird daher nicht vom Garbage Collector entfernt.

So funktioniert die Garbage Collection

Die Garbage Collection in JavaScript verwendet hauptsächlich den Mark-and-Sweep-Algorithmus. Dieser Algorithmus reduziert die Definition „ein Objekt wird nicht mehr benötigt" auf „ein Objekt ist nicht erreichbar".

Mark-and-Sweep-Algorithmus

  1. Markierungsphase: Der Garbage Collector markiert alle Wurzelobjekte und alle Objekte, auf die sie verweisen, dann alle Objekte, auf die diese verweisen, und so weiter. Ausgehend von den Wurzeln findet der Collector alle erreichbaren Objekte und markiert sie.
  2. Bereinigungsphase: Alle Objekte, die nicht als erreichbar markiert sind, gelten als Müll. Der von ihnen belegte Speicher wird freigegeben.

Beispiel: Mark-and-Sweep-Prozess


Output appears here after Run.

Erklärung: Obwohl obj1 und obj2 eine zyklische Referenz bilden, wird ihre Erreichbarkeit von allen Wurzeln aufgehoben, indem beide auf null gesetzt werden. Beide Objekte werden für die Garbage Collection freigegeben, was zeigt, wie der Mark-and-Sweep-Algorithmus sogar komplexe Referenzszenarien verarbeitet.

Best Practices für das Speichermanagement

Um die Garbage Collection zu optimieren und den Speicher in JavaScript effektiv zu verwalten, befolgen Sie diese Best Practices:

1. Globale Variablen begrenzen

Das Begrenzen globaler Variablen ist entscheidend, da sie so lange im Speicher verbleiben, wie die Anwendung läuft, was zu ineffizienter Speichernutzung und potenziellen Speicherlecks führen kann.

Beispiel: Vermeiden globaler Variablen


Output appears here after Run.

In diesem Beispiel ist globalUser eine globale Variable, da sie außerhalb einer Funktion deklariert wurde. Sie bleibt während der gesamten Lebensdauer der Anwendung zugänglich und im Speicher, was potenziell zu Ineffizienzen beim Speicherverbrauch führen kann.

2. Lokale Variablen verwenden

Die Verwendung lokaler Variablen hilft, den Speicher effektiv zu verwalten, da sie auf den Funktionsbereich beschränkt sind und nach Abschluss der Funktionsausführung für die Garbage Collection freigegeben werden.


Output appears here after Run.

In diesem Beispiel wird localGreeting innerhalb der Funktion createUserGreeting definiert, wodurch sie eine lokale Variable wird. Sie existiert nur während der Ausführung dieser Funktion. Sobald die Funktion ausgeführt wurde, verlässt localGreeting ihren Gültigkeitsbereich, was bedeutet, dass sie nicht mehr zugänglich ist und aus dem Speicher entfernt werden kann.

3. Event-Listener verwalten

Entfernen Sie immer Event-Listener, wenn sie nicht mehr benötigt werden, um Speicherlecks im Zusammenhang mit DOM-Elementen zu vermeiden.

Beispiel: Entfernen von Event-Listenern


javascript
<button id="myButton">Click me</button>
<script>
  const button = document.getElementById('myButton');
  function alertClick() {
    alert("Button clicked!");
    button.removeEventListener('click', alertClick); // Remove listener after first click
  }
  button.addEventListener('click', alertClick);
</script>

Der Code erstellt eine Schaltfläche mit der Aufschrift „Click me". Wenn Sie darauf klicken, erscheint einmalig die Meldung „Button clicked!". Danach zeigt die Schaltfläche die Meldung bei weiteren Klicks nicht mehr an. Dies stellt sicher, dass die Schaltfläche nur einmal funktioniert.

Fazit

Die Garbage Collection in JavaScript spielt eine entscheidende Rolle bei der automatischen Speicherverwaltung. Durch das Verständnis der Erreichbarkeit, des Mark-and-Sweep-Algorithmus und die Einhaltung von Best Practices für das Management von Referenzen können Entwickler sicherstellen, dass ihre Anwendungen effizient und leistungsstark sind und häufige Fallstricke wie Speicherlecks vermieden werden. Dieses Wissen ist für jeden Entwickler unerlässlich, der seine JavaScript-Anwendungen für bessere Leistung und Zuverlässigkeit optimieren möchte.

Praxis

Welche Merkmale oder Funktionen hat die Garbage Collection in JavaScript basierend auf den im Artikel genannten Informationen?

Finden Sie das nützlich?

Dual-run-Vorschau — vergleichen Sie mit den Symfony-Routen live.