Middle
Erzählen Sie mir von den Methoden der Müllsammlung (Garbage Collector).
sobes.tech KI
Antwort von AI
Methoden der Müllsammlung:
- Referenzzählung (Reference Counting): Jedes Objekt hält einen Zähler für die Referenzen auf sich. Wenn der Zähler null erreicht, gilt das Objekt als Müll und wird gelöscht.
- Vorteile: Einfach, blockiert die Hauptausführung nicht lange.
- Nachteile: Kann zyklische Referenzen nicht erkennen; benötigt zusätzlichen Speicherplatz für den Zähler in jedem Objekt.
- Tracing Garbage Collectors (Nachverfolgende Müllsammler): Beginnen mit einer Menge von "Wurzel"-Objekten (z.B. aktive Variablen, Aufrufstapel) und durchlaufen rekursiv alle von diesen Wurzeln erreichbaren Objekte. Nicht erreichbare Objekte gelten als Müll.
- Hauptstrategien des Traceings:
- Mark and Sweep (Markieren und Aufräumen):
- Markieren (Mark): Durchlauf des Objektnetzwerks, alle erreichbaren Objekte werden markiert.
- Aufräumen (Sweep): Zweiter Durchlauf, bei dem alle nicht markierten Objekte gelöscht werden.
- Nachteile: Fragmentierung des Speichers.
- Mark and Compact (Markieren und Kompaktieren):
- Markieren (Mark): Wie bei Mark and Sweep.
- Kompaktieren (Compact): Verschiebt lebende Objekte, um sie zusammenhängend anzuordnen und Fragmentierung zu vermeiden.
- Nachteile: Komplexer, kann eine Programmunterbrechung erfordern.
- Copying (Kopieren): Teilt den Speicher in zwei Bereiche (Halbräume). Bei jeder Müllsammlung werden lebende Objekte aus einem Bereich in den anderen kopiert. Der alte Bereich wird dann vollständig gelöscht.
- Vorteile: Keine Fragmentierung, schnelle Speicherzuweisung nach der Sammlung.
- Nachteile: Benötigt doppelt so viel Speicher wie aktiv genutzt wird.
- Mark and Sweep (Markieren und Aufräumen):
- Hauptstrategien des Traceings:
- Generational Garbage Collection (Generationsbasierte Müllsammlung): Basierend auf der Annahme, dass die meisten Objekte nicht lange leben. Der Speicher wird in Generationen (jung, alt) unterteilt. Neue Objekte werden in der jungen Generation platziert. Überleben sie mehrere Sammlungen, wandern sie in die alte Generation. Die Sammlung in der jungen Generation erfolgt häufiger.
- Vorteile: Effizient, da der Großteil der Arbeit in der jungen Generation mit wenig Daten erfolgt.
- Nachteile: Erfordert das Verfolgen von Referenzen von alten zu jungen Generationen (z.B. Karten, andere Mechanismen).
Beispiele für Sprachen und ihre GC:
- Python: Referenzzählung (mit zyklischer Sammlung für zyklische Referenzen).
- Java, C#: Generational, Mark and Sweep, Mark and Compact, Copying (je nach Version und Einstellungen der JVM/.NET unterschiedliche Varianten und Kombinationen).
- Go: Concurrent, non-generational, Mark and Sweep mit Optimierungen.