Garbage Collection (C# und Java im Vergleich)

Aktualisiert: November 2007

Viele Objekte in C und C++ erfordern es, dass der Programmierer nach der Deklaration die Zuordnung der entsprechenden Ressourcen vornimmt. Erst dann können die Objekte sicher verwendet werden. Die Freigabe dieser Ressourcen in den freien Speicherpool nach Verwendung der Objekte liegt ebenfalls in der Verantwortung des Programmierers. Wenn die Ressourcen nicht freigegeben werden, steht für den Code immer weniger Speicher zur Verfügung (sog. Speicherverlust), da immer mehr Ressourcen unnötig verbraucht werden. Auf der anderen Seite kann das vorzeitige Freigeben von Ressourcen zu Datenverlusten, der Beschädigung anderer Speicherbereiche und zu Nullzeigerausnahmen führen.

Sowohl in Java als auch in C# wird diesen Gefahren vorgebeugt, indem die Lebensdauer der Objekte einer Anwendung voneinander unabhängig verwaltet wird.

In Java sorgt die JVM (Java Virtual Machine) dafür, dass nicht verwendeter Arbeitsspeicher wieder freigeben wird. Dazu werden die Verweise auf zugeordnete Ressourcen überwacht. Sobald die JVM feststellt, dass der Verweis auf eine Ressource nicht mehr verwendet wird, wird die Ressource der Garbage Collection übergeben.

In C# wird die Garbage Collection von der Common Language Runtime (CLR) übernommen, die auf ähnliche Weise funktioniert wie die JVM. Der CLR-Garbage Collector überprüft in regelmäßigen Abständen den Speicherheap auf Objekte, die nicht mehr verwendet werden, und gibt die von diesen Objekten belegten Ressourcen frei.

Siehe auch

Konzepte

C#-Programmierhandbuch

Automatische Speicherverwaltung

Weitere Ressourcen

C#-Codebeispiele für Java-Entwickler