...Die GC war nie dazu gedacht, Ressourcen zu verwalten; sie wurde entwickelt, um die Speicherzuweisung zu verwalten ... Im speziellen Fall von Datenbankverbindungen geht es um andere Ressourcen als nur um Speicher... (Scott Dorman)
Der OP hat keine bestimmte Plattform angegeben, obwohl die meisten Antworten .net-spezifisch sind und darauf hinweisen, dass GC hauptsächlich zur Vermeidung von Speicherlecks dient, aber Erweiterungen wie using
Ausdrücke und IDisposable
kann sehr hilfreich sein.
Andere Plattformen bieten andere Lösungen. In C++ gibt es beispielsweise keine (eingebaute) Garbage Collection, aber einige Formen von gemeinsam genutzten Zeigern können bei der Speicherverwaltung helfen, und der RAII-Stil der Codierung kann bei der Verwaltung anderer Arten von Ressourcen äußerst hilfreich sein.
In cPython werden zwei verschiedene Garbage-Collection-Systeme verwendet. Eine Implementierung, die Verweise zählt, ruft sofort Destruktoren auf, wenn der letzte Verweis gelöscht wird. Für gewöhnliche "Stack"-Objekte bedeutet dies, dass sie sofort aufgeräumt werden, so wie es bei C++ RAII-Objekten geschieht. Der Nachteil ist, dass bei einem Referenzzyklus der Kollektor für die Referenzzählung das Objekt nie entsorgt. Daher haben sie einen sekundären, nicht-deterministischen Garbage Collector, der wie Java- und .NET-Kollektoren funktioniert. Wie .NET mit seinen using-Anweisungen versucht auch cPython, die häufigsten Fälle zu behandeln.
Um also auf die Frage des Autors zu antworten: Nicht-deterministische Garbage Collection vereinfacht die Speicherverwaltung, sie kann auch für andere Ressourcen verwendet werden, solange die Rechtzeitigkeit keine Rolle spielt, und ein anderer Mechanismus (wie sorgfältige Programmierung, referenzzählende GC, eine using-Anweisung oder echte RAII-Objekte) wird benötigt, wenn die rechtzeitige Freigabe anderer Ressourcen erforderlich ist.