Garbage Collection und Speicherverwaltung
Die Speicherverwaltung regelt, wie Programme Speicher zuweisen und zurückfordern; die Garbage Collection automatisiert die Rückforderung, indem sie nicht mehr erreichbare Objekte identifiziert und freigibt.
Definition
Speicherverwaltung ist die Zuweisung und Rückforderung des Speichers eines Programms; Garbage Collection ist die automatische Rückforderung, die den von Objekten belegten Speicher freigibt, die das Programm nicht mehr erreichen kann, wodurch der Programmierer von der expliziten Freigabe entlastet wird.
Scope
Dieses Thema behandelt die automatische und manuelle Speicherverwaltung für Sprachlaufzeiten: Referenzzählung, Mark-and-Sweep, Kopieren und Generationen-Sammlung; Verfolgung der Erreichbarkeit; und die Kompromisse zwischen Durchsatz, Pausenzeit und Speicher-Overhead. Es befasst sich mit gleichzeitigen und inkrementellen Kollektoren und der Beziehung zwischen Sammelstrategie und Sprachdesign.
Core questions
- Wie bestimmt ein Kollektor, welche Objekte noch benötigt werden?
- Welche Kompromisse bestehen zwischen Durchsatz, Latenz und Speicherbedarf?
- Warum verbessert die Trennung von Objekten nach Alter (Generationen-Sammlung) die Effizienz?
- Wie kann die Sammlung lange Pausen in interaktiven oder Echtzeitsystemen vermeiden?
Key theories
- Tracing Garbage Collection
- McCarthy führte die automatische Garbage Collection für Lisp ein und etablierte die Idee, Speicher durch Verfolgung der vom Programm aus erreichbaren Objekte zurückzugewinnen.
- Generationen-Sammlung
- Lieberman und Hewitt beobachteten, dass die meisten Objekte jung sterben, und schlugen vor, jüngere Generationen häufiger zu sammeln, was die Sammelkosten in der Praxis drastisch reduziert (die Generationen-Hypothese).
- Taxonomie der Sammeltechniken
- Wilson und das Garbage Collection Handbook organisieren den Designraum von Referenzzählungs-, Mark-Sweep-, Kopier-, inkrementellen und gleichzeitigen Kollektoren sowie deren Leistungs-Kompromisse.
Clinical relevance
Die automatische Speicherverwaltung eliminiert ganze Klassen von Fehlern wie baumelnde Zeiger (dangling pointers) und Speicherlecks (memory leaks), weshalb die meisten höheren Programmiersprachen auf Garbage Collection setzen. Die Wahl des Kollektors beeinflusst die Anwendungs-Latenz und den Durchsatz erheblich, insbesondere bei interaktiven und Serversystemen.
History
McCarthy führte die Garbage Collection 1960 mit Lisp ein. Kopierende Sammlungen (Cheney) und Referenzzählungen folgten, und Liebermans und Hewitts Generationen-Kollektor von 1983 nutzte Objektlebensdauern aus. Die folgenden Jahrzehnte brachten inkrementelle, gleichzeitige und regionenbasierte Kollektoren hervor, die umfassend in Wilsons Werk von 1992 und dem Garbage Collection Handbook von 2011 behandelt werden.
Debates
- Automatische Sammlung versus manuelle oder eigentumsbasierte Verwaltung
- Designer diskutieren die Garbage Collection, die sicher und bequem ist, aber Pausen und Overhead verursachen kann, gegenüber der manuellen oder eigentumsbasierten Verwaltung, die vorhersehbare Leistung und einen geringeren Speicherbedarf auf Kosten der Programmierlast und des Risikos bietet.
Key figures
- John McCarthy
- Henry Lieberman
- Carl Hewitt
- Richard Jones
- Paul Wilson
Related topics
Seminal works
- mccarthy1960
- lieberman1983
- wilson1992
- jones2011
Frequently asked questions
- Wie weiß ein Garbage Collector, welche Objekte freigegeben werden sollen?
- Ein Tracing-Kollektor beginnt bei bekannten Wurzeln, wie Stack-Variablen und globalen Variablen, und folgt Referenzen, um alle erreichbaren Objekte zu markieren; alles, was nicht erreicht wird, ist unerreichbar und kann zurückgefordert werden.
- Warum ist die Generationen-Garbage Collection effektiv?
- Da die meisten Objekte kurz nach der Zuweisung unerreichbar werden, fordert das häufige Sammeln der jungen Generation den größten Teil des Mülls kostengünstig zurück, während ältere, langlebige Objekte weitaus seltener gescannt werden.