Referenz Zählung
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

ReferenzZählung (engl. Abk: "refcount") ist die wohl einfachste Form der GarbageCollection.

Sie basiert sie darauf, dass sich an jedem verwalteten Objekt ein Zähler befindet, der beim Einrichten eines Verweises auf dieses Objekt erhöht und beim Löschen eines Verweises verringert wird. Fällt der Zähler auf 0, kann das Objekt selbst und alle in ihm enthaltenen Verweise gelöscht werden.

Das Dateisystem von Unix benutzt traditionell diese Form der SpeicherVerwaltung, um beim Löschen der letzten Referenz auf eine Datei den Plattenplatz freizugeben.

Vorteile
Nachteile
Fazit
Für nicht-zyklische Strukturen aus nicht trivialen Objekten ist dieser Algorithmus oft das Mittel der Wahl. Der oben unter Nachteile aufgezählte Overhead fällt dann nicht weiter ins Gewicht.


Siehe die (automatische) Speicherverwaltungs Referenz auf http://www.xanalys.com/software_tools/mm/glossary/r.html#reference.counting

Der Link ist anscheinend defekt -- RalfEbert

Da die ReferenzZählung keinerlei Unterstützung seitens der Sprache oder Systembibliothek benötigt, wird sie sehr oft in einfachen Systemen verwendet. In C++ zB typischerweise in Klassen (sog. Smart Pointers). Das alte Microsoft OLE unterstützte nur ReferenzZählung, das mit dem neuen Design (.NET) auch bessere automatische Speicherverwaltungsmechanismen unterstützen wird. (Hoffentlich, --ReiniUrban)


Es gibt Verfahren, die die ReferenzZählung dahingehend ergänzen, dass diese solche Zyklen erkennen und ebenfalls freigeben können. Ein solches Verfahren wurde z.B. in der GarbageCollection der Programmiersprache Python [SprachePython] ab der Version 2.0 implementiert. Hierbei handelt es sich um ein innovatives Verfahren (siehe http://arctrix.com/nas/python/gc/).


Auch Perl beeinhaltet einen zusätzlichen GarbageCollection Zyklus um Objekte vor dem Shutdown aufzuräumen. Für Perl 6 (noch nicht fertig gestellt) ist ein komplettes Neudesign geplant, um eine auf GarbageCollection umsteigen zu könneni, die auch Zyklen erfasst.

Manche Dialekte der SpracheSmalltalk beinhalten ein dramatisch verbessertes Konzept, die verzögerte Referenzzählung. ( http://www.xanalys.com/software_tools/mm/glossary/d.html#deferred.reference.counting) [Broken!] Dabei werden nur globale Heap- Objekte, aber keine lokalen Stack-Variablen gezählt. Zyklische Datenstrukturen können mit diesem Verfahren alleine trotzdem nicht bereinigt werden. Ein weiteres Konzept sind "Schwache Referenzen" (Weak References). Diese werden vom Garbage-Collector ignoriert, ein Feature, was ursprünglich als Bestandteil des Garbage-Collectors selbst benötigt wurde, mittlerweile aber auch für andere Augaben verwendbar ist (siehe VisualWorks Version 7.2). Mehr zur Speicherverwaltung von SpracheSmalltalk siehe GarbageCollection.


SpracheLava bietet dem Programmierer die Unterscheidung von Vorwärts- und Rückwärts-Pointern an (denen intern zwei verschiedene Referenzzähler entsprechen). Bei sinnvoller Benutzung dieser Unterscheidung kann dadurch das Zyklenproblem vermieden werden.

Siehe http://lavape.sourceforge.net/doc/html/PointersRefCounts.htm.


Diskussion

Ha, das ist ja wie die Hardlinks in Unix-Dateisystemen. :-)--hs

Nicht ganz: Im UnixDateisystem sind zusätzliche HardLinks nur auf Dateien, aber nicht auf Verzeichnisse erlaubt. Dadurch ist sichergestellt, dass ein UnixDateisystem immer ein GerichteterAzyklischerGraph? (kurz GAG) bleibt. Die Links auf das aktuelle Verzeichnis (.) und das übergeordnete Verzeichnis (..) werden in der Software gesondert behandelt. --PeterFunk


KategorieProgrammierung KategorieResourcen
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 28. April 2005 16:24 (diff))
Suchbegriff: gesucht wird
im Titel
im Text