Das Bezugszählen

In der Informatik ist das Bezugszählen eine Technik, die Zahl von Verweisungen, Zeigestöcken zu versorgen, oder behandelt zu einer Quelle wie ein Gegenstand, Block des Gedächtnisses, des Speicherplatzes oder der anderen Quelle. Es kann sich auch mehr spezifisch zu einem Müll-Sammlungsalgorithmus beziehen, der diese verwendet, zählt Verweisung bis Deallocate-Gegenstände, in denen nicht mehr Verweise angebracht wird.

Verwenden Sie in der Müll-Sammlung

Als ein Müll-Sammlungsalgorithmus, Bezugszählen-Spuren, für jeden Gegenstand, eine Zählung der Zahl von Verweisungen darauf gehalten durch andere Gegenstände. Wenn eine Bezugszählung eines Gegenstands Null erreicht, ist der Gegenstand unzugänglich geworden, und kann zerstört werden.

Wenn ein Gegenstand zerstört wird, ließen irgendwelche Gegenstände, die durch diesen Gegenstand auch Verweise angebracht sind, ihre Bezugszählungen vermindern. Wegen dessen, eine einzelne Verweisung entfernend, kann zu einer Vielzahl von Gegenständen potenziell führen, die befreien werden. Eine allgemeine Modifizierung erlaubt Verweisung, die zählt, zusätzlich gemacht zu werden: Anstatt einen Gegenstand zu zerstören, sobald seine Bezugszählung Null wird, wird sie zu einer Liste von Verweise unangebrachten Gegenständen, und regelmäßig hinzugefügt (oder wie erforderlich) eine oder mehr Sachen von dieser Liste werden zerstört.

Einfache Bezugszählungen verlangen häufige Aktualisierungen. Wann auch immer eine Verweisung zerstört oder überschrieben wird, ist die Bezugszählung des Gegenstands, in dem sie Verweise anbringt, decremented, und wann auch immer einer geschaffen oder kopiert wird, wird die Bezugszählung des Gegenstands, in dem sie Verweise anbringt, erhöht.

Das Bezugszählen wird auch in der Platte Betriebssysteme und verteilte Systeme verwendet, wo volle nichtzusätzliche Nachforschungsmüll-Sammlung wegen der Größe des Gegenstand-Graphen und der langsamen Zugriffsgeschwindigkeit zu zeitaufwendig ist.

Vorteile und Nachteile

Der Hauptvorteil der Verweisung, die über die Nachforschung der Müll-Sammlung zählt, besteht darin, dass Gegenstände zurückgefordert werden, sobald in ihnen, und auf eine zusätzliche Mode ohne lange Pausen für Sammlungszyklen und mit der klar definierten Lebenszeit jedes Gegenstands nicht mehr Verweise angebracht werden kann. In Realtime Anwendungen oder Systeme mit dem beschränkten Gedächtnis, das ist wichtig, um Ansprechbarkeit aufrechtzuerhalten. Das Bezugszählen ist auch unter den einfachsten Formen der Müll-Sammlung, um durchzuführen. Es berücksichtigt auch wirksames Management von Nichtspeichermitteln wie Betriebssystemgegenstände, die häufig viel knapper sind als Gedächtnis (GC Systemgebrauch-finalizers dafür verfolgend, aber die verzögerte Reklamation kann Probleme verursachen). Belastete Bezugszählungen sind eine gute Lösung für den Müll, der ein verteiltes System sammelt.

Verfolgende Müll-Sammlungszyklen werden zu häufig ausgelöst, wenn der Satz von lebenden Gegenständen den grössten Teil des verfügbaren Gedächtnisses füllt; es verlangt, dass Extraraum effizient ist. Bezugszählen-Leistung verschlechtert sich als die Summe von freien Raumabnahmen nicht.

Bezugszählungen sind auch nützliche Information, um als Eingang an anderen Laufzeitoptimierungen zu verwenden. Zum Beispiel können Systeme, die schwer von unveränderlichen Gegenständen wie viele funktionelle Programmiersprachen abhängen, eine Leistungsfähigkeitsstrafe wegen häufiger Kopien ertragen. Jedoch, wenn wir wissen, dass ein Gegenstand nur eine Verweisung hat (wie die meisten in vielen Systemen tun), und diese Verweisung zur gleichen Zeit verloren wird, dass ein ähnlicher neuer Gegenstand geschaffen wird (weil in der Schnur Behauptung anhängen), können wir die Operation durch eine Veränderung auf dem ursprünglichen Gegenstand ersetzen.

Verweisung, die in der naiven Form zählt, hat zwei Hauptnachteile über die Nachforschungsmüll-Sammlung, von denen beide zusätzliche Mechanismen verlangen sich zu bessern:

  • Die häufigen Aktualisierungen, die es einschließt, sind eine Quelle der Wirkungslosigkeit. Während die Nachforschung von Müllmännern Leistungsfähigkeit streng über die Zusammenhang-Schaltung und Linienschulden des geheimen Lagers zusammenpressen kann, versammeln sie sich relativ selten, während das Zugreifen auf Gegenstände ständig getan wird. Außerdem weniger wichtig verlangt das Bezugszählen jeden speichergeführten Gegenstand, Raum für eine Bezugszählung vorzubestellen. In der Nachforschung von Müllmännern wird diese Information implizit in den Verweisungen versorgt, die sich auf diesen Gegenstand beziehen, Raum sparend, obwohl die Nachforschung von Müllmännern, besonders zusätzlichen, zusätzlichen Raum zu anderen Zwecken verlangen kann.
  • Der naive Algorithmus, der oben beschrieben ist, kann ein Gegenstand nicht behandeln, der sich direkt oder indirekt auf sich bezieht. Ein Mechanismus, der sich rein auf Bezugszählungen verlässt, wird zyklische Ketten von Gegenständen für das Auswischen nie denken, da, wie man versichert, ihre Bezugszählung Nichtnull bleibt. Methoden, um sich mit diesem Problem zu befassen, bestehen, aber können auch die Gemeinkosten und Kompliziertheit des Bezugszählens - andererseits vergrößern, diese Methoden müssen nur auf Daten angewandt werden, die Zyklen, häufig eine kleine Teilmenge aller Daten bilden könnten. Eine solche Methode ist der Gebrauch von schwachen Verweisungen.

Graph-Interpretation

Wenn, sich mit Müll-Sammlungsschemas befassend, es häufig nützlich ist, an den Bezugsgraphen zu denken, der ein geleiteter Graph ist, wo die Scheitelpunkte Gegenstände sind und es einen Rand von einem Gegenstand zu einem Gegenstand B gibt, wenn A eine Verweisung auf B hält. Wir haben auch einen speziellen Scheitelpunkt oder Scheitelpunkte, die die lokalen Variablen und Verweisungen vertreten, die durch das Laufzeitsystem gehalten sind, und keine Ränder gehen jemals zu diesen Knoten, obwohl Ränder von ihnen bis andere Knoten gehen können.

In diesem Zusammenhang ist die einfache Bezugszählung eines Gegenstands der im Grad von seinem Scheitelpunkt. Das Löschen eines Scheitelpunkts ist dem Sammeln eines Gegenstands ähnlich. Es kann nur getan werden, wenn der Scheitelpunkt keine eingehenden Ränder hat, so betrifft es den-Grad keiner anderen Scheitelpunkte, aber es kann die im Grad von anderen Scheitelpunkten betreffen, ihre entsprechenden Gegenstände veranlassend, ebenso gesammelt zu werden.

Der verbundene Bestandteil, der den speziellen Scheitelpunkt enthält, enthält die Gegenstände, die nicht gesammelt werden können, während andere verbundene Bestandteile des Graphen nur Müll enthalten. Durch die Natur des Bezugszählens muss jeder dieser Müll-Bestandteile mindestens einen Zyklus enthalten.

Sich mit Wirkungslosigkeit von Aktualisierungen befassend

Das Erhöhen und decrementing Verweisung zählt jedes Mal, wenn eine Verweisung geschaffen oder zerstört wird, kann Leistung bedeutsam behindern. Nicht nur nehmen die Operationen Zeit in Anspruch, aber sie beschädigen Leistung des geheimen Lagers und können zu Rohrleitungsluftblasen führen. Sogar Read-Only-Operationen wie das Rechnen der Länge einer Liste verlangen, dass eine Vielzahl dessen liest und für Bezugsaktualisierungen mit dem naiven Bezugszählen schreibt.

Eine einfache Technik ist für den Bearbeiter, um mehrere nahe gelegene Bezugsaktualisierungen in eine zu verbinden. Das ist für Verweisungen besonders wirksam, die geschaffen und schnell zerstört werden. Sorge muss jedoch genommen werden, um die vereinigte Aktualisierung an der richtigen Position zu stellen, so dass ein Frühfreier vermieden wird.

Die Deutsch-Bobrow Methode des Bezugszählens häuft auf der Tatsache Kapital an, dass die meisten Bezugsaktualisierungen der Zählung tatsächlich durch in lokalen Variablen versorgte Verweisungen erzeugt werden. Es ignoriert diese Verweisungen, nur Verweisungen in Datenstrukturen aufzählend, aber vor einem Gegenstand mit der Verweisung zählen Null kann gelöscht werden, das System muss mit einem Ansehen des Stapels und der Register nachprüfen, dass keine andere Verweisung darauf noch besteht.

Eine andere von Henry Baker ausgedachte Technik ist mit aufgeschobener Zunahme verbunden, in der Verweisungen werden die in lokalen Variablen versorgt erhöhen die entsprechende Bezugszählung nicht sofort, aber schieben stattdessen das auf, bis es notwendig ist. Wenn solch eine Verweisung schnell zerstört wird, dann gibt es kein Bedürfnis, den Schalter zu aktualisieren. Das beseitigt eine Vielzahl von mit kurzlebigen Verweisungen vereinigten Aktualisierungen. Jedoch, wenn solch eine Verweisung in eine Datenstruktur kopiert wird, dann muss die aufgeschobene Zunahme damals durchgeführt werden. Es ist auch kritisch, die aufgeschobene Zunahme durchzuführen, bevor die Zählung des Gegenstands auf Null fällt, auf einen Frühfreien hinauslaufend.

Eine dramatische Abnahme in den Gemeinkosten auf Gegenaktualisierungen wurde von Levanoni und Petrank erhalten. Sie führen die verschmelzende Aktualisierungsmethode ein, die viele der überflüssigen Bezugsaktualisierungen der Zählung verschmelzt. Denken Sie einen Zeigestock, der in einem gegebenen Zwischenraum der Ausführung mehrere Male aktualisiert wird. Es spitzt zuerst auf einen Gegenstand O1, dann auf einen Gegenstand O2 und so weiter bis am Ende des Zwischenraums an, auf dem es zu einem Gegenstand hinweist. Ein Bezugszählen-Algorithmus würde normalerweise Fernsteuerung (O1) - Fernsteuerung (O2) ++, Fernsteuerung (O2) - Fernsteuerung (O3) ++, Fernsteuerung (O3)-..., Fernsteuerung (Auf) ++ durchführen. Aber die meisten dieser Aktualisierungen sind überflüssig. Um die Bezugszählung zu haben, richtig hat am Ende des Zwischenraums bewertet es ist genug, Fernsteuerung (O1) - und Fernsteuerung (Auf) ++ durchzuführen. Der Rest der Aktualisierungen ist überflüssig. Levanoni und Petrank zeigen, wie man solche Aktualisierung verwendet, die in einem Bezugszählen-Sammler verschmelzt. Es stellt sich heraus, dass, wenn man Aktualisierung verwendet, die mit einer passenden Behandlung von neuen Gegenständen, verschmelzt, mehr als 99 % Gegen-Aktualisierungen für typisch Java Abrisspunkte beseitigt. Außerdem wird das Bedürfnis nach Atomoperationen während Zeigestock-Aktualisierungen auf parallelen Verarbeitern beseitigt. Schließlich präsentieren sie einen erhöhten Algorithmus, der gleichzeitig mit Mehrgewindeanwendungen laufen kann, die nur feine Synchronisation verwenden. Die Details erscheinen in der Zeitung, sehen Papier.

Blackburns jenseitiges Bezugszählen und McKinleys verbindet aufgeschobene Verweisung, die mit einem Kopieren-Kinderzimmer zählt, bemerkend, dass die Mehrheit von Zeigestock-Veränderungen in jungen Gegenständen vorkommt. Dieser Algorithmus erreicht Durchfluss, der mit dem schnellsten generational das Kopieren von Sammlern mit den niedrigen begrenzten Pause-Zeiten des Bezugszählens vergleichbar ist.

Mehr Arbeit an der sich verbessernden Leistung von Bezugszählen-Sammlern kann im Ph von Paz gefunden werden. D These. Insbesondere er verteidigt den Gebrauch volljährige orientierte Sammler und das Vorholen.

Sich mit Bezugszyklen befassend

Es gibt eine Vielfalt von Weisen, das Problem des Ermittelns und Sammelns von Bezugszyklen zu behandeln. Man ist das ein System kann Bezugszyklen ausführlich verbieten. In einigen Systemen wie filesystems ist das eine allgemeine Lösung. Ein anderes Beispiel ist das Kakao-Fachwerk, das empfiehlt, Bezugszyklen durch das Verwenden "starker" (aufgezählter) Verweisungen für Verweisungen "des Elternteils zum Kind" und "schwache" (nichtaufgezählte) Verweisungen für "das Kind zum Elternteil" references.http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-1044135-BCICCFAE zu vermeiden, werden Zyklen auch manchmal in Systemen mit kurzen Leben und einem kleinen Betrag des zyklischen Mülls besonders ignoriert, als das System mit einer Methodik entwickelt wurde, zyklische Datenstrukturen, wo auch immer möglich, normalerweise auf Kosten der Leistungsfähigkeit zu vermeiden.

Eine andere Lösung ist, einen Nachforschungsmüllmann regelmäßig zu verwenden, um Zyklen zurückzufordern. Da Zyklen normalerweise einen relativ kleinen Betrag des zurückgeforderten Raums einsetzen, können die Sammlungszyklen viel weiter einzeln unter Drogeneinfluss sein als mit einem gewöhnlichen Nachforschungsmüllmann.

Bacon beschreibt einen Algorithmus der Zyklus-Sammlung für Bezugszählen-Systeme mit einigen Ähnlichkeiten zur Nachforschung von Systemen einschließlich derselben theoretischen Zeitgrenzen, aber das nutzt die Bezugsinformation der Zählung aus, um viel schneller und mit weniger Schaden des geheimen Lagers zu laufen. Es basiert auf der Beobachtung, dass ein Gegenstand in einem Zyklus nicht erscheinen kann, bis seine Bezugszählung decremented zu einem Nichtnullwert ist. Alle Gegenstände, zu denen das vorkommt, werden auf eine Wurzelliste gestellt, und dann regelmäßig durchsucht das Programm die Gegenstände, die von den Wurzeln für Zyklen erreichbar sind. Es weiß, dass es einen Zyklus gefunden hat, wenn decrementing alle Bezugszählungen auf einem Zyklus von Verweisungen ihnen allen unten zur Null bringt. Eine erhöhte Version dieses Algorithmus durch Paz und al.

ist im Stande, gleichzeitig mit anderen Operationen zu laufen und seine Leistungsfähigkeit durch das Verwenden der verschmelzenden Aktualisierungsmethode von Levanoni und Petrank zu verbessern. Sieh das Papier für mehr.

Varianten des Bezugszählens

Obwohl es möglich ist, einfache Bezugszählungen in einer Vielfalt von Wegen zu vermehren, häufig kann eine bessere Lösung durch das Durchführen der Verweisung gefunden werden, die auf eine im Wesentlichen verschiedene Weise zählt. Hier beschreiben wir einige der Varianten auf dem Bezugszählen und ihren Vorteilen und den Nachteilen.

Das belastete Bezugszählen

Im belasteten Bezugszählen teilen wir jede Verweisung ein Gewicht zu, und jeder Gegenstand verfolgt nicht die Zahl von Verweisungen, die sich darauf, aber dem Gesamtgewicht der Verweisungen beziehen, die sich darauf beziehen. Die anfängliche Verweisung auf einen neuerschaffenen Gegenstand hat ein großes Gewicht, solcher als 2. Wann auch immer diese Verweisung kopiert wird, geht die Hälfte des Gewichts zur neuen Verweisung, und die Hälfte des Gewichts bleibt bei der alten Verweisung. Weil sich das Gesamtgewicht nicht ändert, braucht die Bezugszählung des Gegenstands nicht aktualisiert zu werden.

Das Zerstören einer Verweisung Verminderung das Gesamtgewicht durch das Gewicht dieser Verweisung. Wenn das Gesamtgewicht Null wird, sind alle Verweisungen zerstört worden. Wenn ein Versuch gemacht wird, eine Verweisung mit einem Gewicht 1 zu kopieren, müssen wir mehr Gewicht "bekommen", indem wir zum Gesamtgewicht beitragen und dann dieses neue Gewicht zu unserer Verweisung hinzufügen, und ihn dann spalten.

Das Eigentum, zu nicht müssen, auf eine Bezugszählung zugreifen, wenn eine Verweisung kopiert wird, ist besonders nützlich, wenn die Bezugszählung des Gegenstands zum Zugang zum Beispiel teuer ist, weil es in einem anderen Prozess, auf der Platte, oder sogar über ein Netz ist. Es kann auch helfen, Parallelität durch das Vermeiden zu vergrößern, dass viele Fäden, die eine Verweisung schließen, zählen, um es zu vergrößern. So ist das belastete Bezugszählen in Parallele, Mehrprozess, Datenbank oder verteilten Anwendungen am nützlichsten.

Das primäre Problem mit dem einfachen belasteten Bezugszählen besteht darin, dass das Zerstören einer Verweisung noch das Zugreifen auf die Bezugszählung verlangt, und wenn viele Verweisungen zerstört werden, kann das dieselben Engpässe verursachen, die wir uns bemühen zu vermeiden. Einige Anpassungen des belasteten Bezugszählens bemühen sich, das zu vermeiden, indem sie versucht wird, Gewicht zurück von einer sterbenden Verweisung bis diejenige zu geben, die noch aktiv ist.

Das belastete Bezugszählen wurde von Bevan, in der Zeitung Verteilte Müll-Sammlung mit dem Bezugszählen und Watson, in der Zeitung Ein effizientes Müll-Sammlungsschema für parallele Computerarchitekturen, beide 1987 unabhängig ausgedacht.

Das indirekte Bezugszählen

Im indirekten Bezugszählen ist es notwendig, das nachzugehen, bei wem die Verweisung erhalten wurde. Das bedeutet, dass zwei Verweisungen zum Gegenstand behalten werden: Ein direkter, der für Beschwörungen verwendet wird; und ein indirekter, der einen Teil eines Verbreitungsbaums, solcher als im Dijkstra-Scholten Algorithmus bildet, der einem Müllmann erlaubt, tote Gegenstände zu identifizieren. Diese Annäherung hindert einen Gegenstand, vorzeitig verworfen zu werden.

Beispiele des Gebrauches

COM

Component Object Model (COM) des Microsofts macht durchdringenden Gebrauch des Bezugszählens. Tatsächlich, die drei Methoden, dass alle COM-Gegenstände (in der IUnknown-Schnittstelle) der ganzen Zunahme oder Verminderung die Bezugszählung zur Verfügung stellen müssen. Auf viel von Windows Shell und viele Windows-Anwendungen (einschließlich FRAU Internet Explorer, MS Office und unzähliger Drittprodukte) wird auf COM gebaut, die Lebensfähigkeit der Verweisung demonstrierend, die in groß angelegten Systemen zählt.

Eine primäre Motivation für die Verweisung, die in COM zählt, soll Zwischenfunktionsfähigkeit über verschiedene Programmiersprachen und Laufzeitsysteme ermöglichen. Ein Kunde muss nur wissen, wie man Gegenstand-Methoden anruft, um Gegenstand-Lebenszyklus zu führen; so wird der Kunde von beliebigem Speicherverteiler die Durchführung des COM-Gegenstand-Gebrauches völlig abstrahiert. Als ein typisches Beispiel ist ein Grundlegendes Sehprogramm mit einem COM-Gegenstand Agnostiker dazu, ob dieser Gegenstand zugeteilt wurde (und später deallocated sein muss) durch einen C ++ Verteiler oder ein anderer Grundlegender Sehbestandteil.

Jedoch hat diese Unterstützung für die Heterogenität Hauptkosten: Es verlangt richtiges Bezugsmanagement der Zählung durch alle beteiligten Parteien. Während höhere Programmiersprachen wie Grundlegender Visueller Bezugszählungen automatisch, C/C ++ führen, werden Programmierer der Zunahme und den Verminderungsbezugszählungen in der passenden Zeit anvertraut. C ++ können Programme und sollten vermeiden, dass die Aufgabe der Betriebsverweisung manuell durch das Verwenden kluger Zeigestöcke zählt. Programmfehler, die durch die falsche Verweisung verursacht sind, die in COM Systemen zählt, sind notorisch hart, sich besonders aufzulösen, weil der Fehler in einem undurchsichtigen Drittbestandteil vorkommen kann.

Microsoft hat Verweisung aufgegeben, die für die Nachforschung der Müll-Sammlung für das.NET Fachwerk zählt.

Kakao

Das Kakao-Fachwerk des Apfels (und verwandtes Fachwerk, wie Kernfundament) verwenden das manuelle Bezugszählen viel wie COM. Jedoch, bezüglich Mac OS X v10.5, hat Kakao, wenn verwendet, mit Objektiven-C 2.0 auch automatische Müll-Sammlung. Das Kakao-Berührungsfachwerk des Apfels, das auf seinen EIN/AUSGABE-STEUERSYSTEM-Geräten verwendet ist, verwendet auch das manuelle Bezugszählen, und unterstützt automatische Müll-Sammlung nicht, obwohl das automatische Bezugszählen im EIN/AUSGABE-STEUERSYSTEM 5 und Mac OS X 10.7 hinzugefügt wurde.

Delphi

Eine Sprache, die Verweisung verwendet, die Müll-Sammlung wert ist, ist Delphi. Delphi ist nicht völlig Müll hat Sprache gesammelt, auf der benutzerbestimmte Typen noch manuell zugeteilt werden müssen und deallocated. Es stellt wirklich automatische Sammlung, jedoch, für einige eingebaute Typen, wie Schnuren, dynamische Reihe und Schnittstellen für die Bequemlichkeit des Gebrauches zur Verfügung und die allgemeine Datenbankfunktionalität zu vereinfachen. Es ist bis zum Programmierer, um zu entscheiden, ob man die eingebauten Typen verwendet oder nicht; Programmierer von Delphi haben ganzen Zugang zum auf niedriger Stufe Speichermanagement wie in C/C ++. So können alle potenziellen Kosten des Bezugszählens von Delphi, wenn gewünscht, leicht überlistet werden.

Einige der Gründe das Bezugszählen kann anderen Formen der Müll-Sammlung in Delphi bevorzugt worden sein, schließen ein:

  • Die allgemeinen Vorteile des Bezugszählens, wie schnelle Sammlung.
  • Zyklen entweder können nicht vorkommen oder kommen in der Praxis nicht vor, weil der ganze kleine Satz Müll-gesammelter eingebauter Typen nicht willkürlich nestable ist.
  • Die Gemeinkosten in der für das Bezugszählen erforderlichen Codegröße sind sehr klein (normalerweise einzelne LOCK INC oder SCHLOSS-Instruktion im DEZ, die atomicity in jeder Umgebung sichert), und kein getrennter Faden der Kontrolle für die Sammlung erforderlich ist, wie für einen Nachforschungsmüllmann erforderlich wäre.
  • Viele Beispiele des meistens verwendeten Müll-gesammelten Typs, der Schnur, haben eine kurze Lebenszeit, da sie normalerweise Zwischenwerte in der Schnur-Manipulation sind.
  • Die Bezugszählung einer Schnur wird vor dem Verändern einer Schnur überprüft. Das erlaubt Bezugsschnuren des Punkts der Klagebegründung 1, direkt verändert zu werden, während höhere Bezugsschnuren der Zählung vor der Veränderung kopiert werden. Das erlaubt dem allgemeinen Verhalten des alten Stils Schnuren von Pascal, bewahrt zu werden, während es die Kosten beseitigt, die Schnur auf jeder Anweisung zu kopieren.
  • Weil Müll-Sammlung nur auf eingebauten Typen getan wird, kann das Bezugszählen in die Bibliotheksroutinen effizient integriert werden, die verwendet sind, um jeden datatype zu manipulieren, das Behalten des oberirdischen, das erforderlich ist, um von der Verweisung zu aktualisieren, zählt niedrig. Außerdem ist viel von der Laufzeitbibliothek im handoptimized Monteur.

GObject

Das GObject objektorientierte Programmierfachwerk führt Verweisung durch, die auf seinen Grundtypen einschließlich schwacher Verweisungen zählt. Verweisung erhöhend und decrementing verwendet Atomoperationen wegen der Faden-Sicherheit. Ein bedeutender Betrag der Arbeit schriftlich bindings zu GObject aus höheren Programmiersprachen liegt in der Anpassung der GObject Verweisung, die zählt, um mit dem eigenen Speicherverwaltungssystem der Sprache zu arbeiten.

PHP

PHP verwendet einen Bezugszählen-Mechanismus für sein inneres variables Management. Seit PHP 5.3 führt es den Algorithmus von Bacon über erwähntem Papier durch. PHP erlaubt Ihnen sich zu drehen und von der Zyklus-Sammlung mit Benutzerniveau-Funktionen. Es erlaubt Ihnen auch, den Reinigen-Mechanismus manuell zu zwingen, geführt zu werden.

Pythonschlange

Pythonschlange verwendet auch das Bezugszählen und bietet Zyklus-Entdeckung ebenso an. Sieh das Verlängern und Einbetten des Pythonschlange-Dolmetschers.

Eichhörnchen

Eichhörnchen verwendet auch das Bezugszählen und bietet Zyklus-Entdeckung ebenso an.

Diese winzige Sprache ist außerhalb der Videospiel-Industrie relativ unbekannt; jedoch ist es ein konkretes Beispiel dessen, wie das Bezugszählen praktisch und (besonders in Echtzeitumgebungen) effizient sein kann.

Tcl

Tcl 8 Gebrauch-Verweisung, die Speichermanagement von Werten (Tcl Obj structs) wert ist. Da die Werte von Tcl unveränderlich sind, sind Bezugszyklen unmöglich sich zu formen, und kein Zyklus-Entdeckungsschema ist erforderlich. Operationen, die einen Wert durch eine modifizierte Kopie ersetzen würden, werden allgemein optimiert, um stattdessen das Original zu modifizieren, wenn seine Bezugszählung es anzeigt, um ungeteilt zu werden. Die Verweisungen werden an einem Datenstruktur-Niveau aufgezählt, so entstehen die Probleme mit sehr häufigen Aktualisierungen, die oben besprochen sind, nicht.

Platte Betriebssysteme

Viele Platte Betriebssysteme unterstützt eine Zählung der Zahl von Verweisungen auf jeden besonderen Block oder Datei. Wenn die Zählung zur Null fällt, kann die Datei sicher deallocated sein. Außerdem, während Verweisungen noch aus Verzeichnissen gemacht werden können, erlauben einige Unixes, dass Verweise anzubringen, allein durch lebende Prozesse gemacht werden kann, und es Dateien geben kann, die in der Dateisystemhierarchie nicht bestehen.

Links


Wandlungen / Wirkung des roten Auges
Impressum & Datenschutz