Es scheint, als hätten die Leute die manuelle Speicherverwaltung satt, also haben sie die Müllabfuhr erfunden, und das Leben war einigermaßen gut. Aber was ist mit allen anderen Ressourcentypen? Dateideskriptoren, Sockets oder sogar vom Benutzer erstellte Daten wie Datenbankverbindungen?
Das fühlt sich wie eine naive Frage an, aber ich kann keinen Ort finden, an dem jemand sie gestellt hat. Betrachten wir Dateideskriptoren. Angenommen, ein Programm weiß, dass es beim Start nur 4000 fds zur Verfügung haben darf. Wann immer es eine Operation ausführt, die einen Dateideskriptor öffnet, was wäre, wenn dies der Fall wäre
- Stellen Sie sicher, dass es nicht zu Ende geht.
- Wenn dies der Fall ist, lösen Sie den Garbage Collector aus, wodurch eine Menge Speicher freigegeben wird.
- Wenn ein Teil des freigegebenen Speichers Verweise auf Dateideskriptoren enthält, schließen Sie diese sofort. Es weiß, dass der Speicher zu einer Ressource gehört, da der mit dieser Ressource verknüpfte Speicher beim ersten Öffnen mangels eines besseren Begriffs in einer 'Dateideskriptor-Registrierung' registriert wurde.
- Öffnen Sie einen neuen Dateideskriptor, kopieren Sie ihn in einen neuen Speicher, registrieren Sie diesen Speicherort in der 'Dateideskriptor-Registrierung' und geben Sie ihn an den Benutzer zurück.
Die Ressource würde also nicht sofort freigegeben, sondern immer dann freigegeben, wenn der gc ausgeführt wurde, was zumindest kurz vor dem Auslaufen der Ressource umfasst, vorausgesetzt, sie wird nicht vollständig genutzt.
Und es scheint, dass dies für viele benutzerdefinierte Probleme bei der Bereinigung von Ressourcen ausreichen würde. Es ist mir gelungen, hier einen einzigen Kommentar zu finden, der darauf verweist, dass eine ähnliche Bereinigung in C ++ mit einem Thread durchgeführt wird, der einen Verweis auf eine Ressource enthält, und ihn bereinigt, wenn nur noch ein einziger Verweis übrig ist (aus dem Bereinigungsthread), aber ich kann ' Es gibt keine Beweise dafür, dass es sich um eine Bibliothek oder einen Teil einer vorhandenen Sprache handelt.