Garbage Collection (GC) ist ein zentraler Mechanismus moderner Speicherverwaltung in der Softwareentwicklung, dessen Hauptfunktion darin besteht, nicht mehr genutzten Speicher wieder freizugeben. Im Kontext der Softwareentwicklung ist Speichermanagement eine Schlüsselfunktion, da jede Anwendung bei ihrer Ausführung Speicherressourcen benötigt. Programme, die dynamisch Speicher allokieren – beispielsweise für neue Objekte –, müssen diesen Speicher irgendwann wieder freigeben, wenn die Objekte nicht mehr benötigt werden.
Ohne Garbage Collection liegt die Verantwortung für das Freigeben des Speichers in den Händen des Programmierers. Dies kann zu Fehlern führen, insbesondere zu sogenannten Speicherlecks (memory leaks), bei denen Programme Speicher belegen, der nicht mehr freigegeben wird, auch wenn er nicht mehr benötigt wird. Über die Zeit hinweg können diese Speicherlecks zu einem Mangel an verfügbaren Speicherressourcen führen und die Leistungsfähigkeit des Systems verschlechtern oder sogar zum Absturz von Anwendungen führen.
Die Garbage Collection automatisiert diesen Prozess, indem sie periodisch durch die im Speicher liegenden Objekte geht und prüft, welche davon nicht länger von der Anwendung erreicht werden können. Diese "unreachable" Objekte gelten als überflüssig und ihr Speicher wird vom GC-System zur Wiederverwendung freigegeben. Die Kriterien dafür, ob ein Objekt erreichbar ist, hängen von der jeweiligen Implementierung der Garbage Collection und der Programmsprache ab. Viele Programmiersprachen, die einen automatisierten GC anbieten – wie Java, C#, oder Python –, verfügen über eigene Algorithmen und Strategien zur Identifikation unbenutzter Objekte.
Garbage Collectors können unterschiedliche Ansätze verfolgen, um den Speicher zu verwalten, darunter:
Garbage Collection trägt wesentlich zur Stabilität und Effizienz von Softwareanwendungen bei. Jedoch ist sie nicht frei von Herausforderungen und Kompromissen, wie etwa die Pausenzeiten oder Verzögerungen (garbage collection pauses), die während der Freigabe von Speicher auftreten können. Entwickler müssen die Eigenschaften des GC-Systems und die Anforderungen ihrer Anwendungen sorgfältig abwägen, um die bestmögliche Leistungsfähigkeit zu gewährleisten.