Schwache Verweisung

In der Computerprogrammierung ist eine schwache Verweisung eine Verweisung, die den Verweise angebrachten Gegenstand vor der Sammlung durch einen Müllmann nicht schützt; verschieden von einer starken Verweisung. Ein Gegenstand Verweise angebracht nur durch schwache Verweisungen wird unerreichbar (oder schwach erreichbar) betrachtet und kann so jederzeit gesammelt werden. Einige Müll-gesammelte Sprachen zeigen oder unterstützen verschiedene Niveaus von schwachen Verweisungen, wie Java, C#, Pythonschlange, Perl und Lispeln.

Müll-Sammlung

Müll-Sammlung wird verwendet, um unbenutzte Gegenstände aufzuräumen und so das Potenzial für die Speicherleckstelle- und Datenbestechung zu reduzieren. Es gibt zwei Haupttypen der Müll-Sammlung: die Nachforschung und das Bezugszählen. Verweisung, Schemas aufzählend, registriert die Zahl von Verweisungen auf einen gegebenen Gegenstand und sammelt den Gegenstand, wenn die Bezugszählung Null wird. Bezugszählen kann sich zyklisch (oder Rundschreiben) Verweisungen nicht versammeln, weil nur ein Gegenstand auf einmal gesammelt werden kann. Gruppen, gegenseitig in Gegenständen Verweise anzubringen, in denen durch andere Gegenstände nicht direkt Verweise angebracht wird und unerreichbar ist, können so dauerhaft ortsansässig werden; wenn eine Anwendung ständig solche unerreichbaren Gruppen von unerreichbaren Gegenständen erzeugt, wird das die Wirkung einer Speicherleckstelle haben. Schwache Verweisungen (Verweisungen, die im Bezugszählen nicht aufgezählt werden) können verwendet werden, um das Problem von kreisförmigen Verweisungen zu beheben, wenn die Bezugszyklen durch das Verwenden schwacher Verweisungen für einige der Verweisungen innerhalb der Gruppe vermieden werden. Zum Beispiel empfiehlt das Kakao-Fachwerk des Apfels diese Annäherung, durch das Verwenden starker Verweisungen für Verweisungen des Elternteils zum Kind und schwache Verweisungen für Verweisungen des Kindes zum Elternteil, so das Vermeiden

cycles.http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-1044135-BCICCFAE

Schwache Verweisungen werden auch verwendet, um die Zahl von unnötigen Gegenständen im Gedächtnis zu minimieren, indem sie dem Programm erlaubt wird anzuzeigen, durch den Gegenstände nicht kritisch sind nur sie hat in ihnen Verweise angebracht.

Schwankungen

Einige Sprachen haben vielfache Niveaus der schwachen Bezugskraft. Zum Beispiel hat Java, in der Größenordnung von der abnehmenden Kraft, weich, schwach, und Gespenst-Verweisungen, die im Paket java.lang.ref definiert sind. Jeder Bezugstyp hat einen verbundenen Begriff von reachability. Der Müllmann (GC) verwendet einen Typ eines Gegenstands von reachability, um zu bestimmen, wenn man den Gegenstand befreit. Es ist für den GC sicher, einen Gegenstand zu befreien, der weich erreichbar ist, aber der GC kann sich dafür entscheiden, so nicht zu tun, wenn es glaubt, dass der JVM das Gedächtnis verschonen kann (z.B, hat der JVM viel unbenutzten Haufen-Raum). Der GC wird einen schwach erreichbaren Gegenstand befreien, sobald der GC den Gegenstand bemerkt. Verschieden von den anderen Bezugstypen kann einer Gespenst-Verweisung nicht gefolgt werden. Andererseits stellen Gespenst-Verweisungen einen Mechanismus zur Verfügung, das Programm bekannt zu geben, als ein Gegenstand befreit worden ist (Ankündigung wird mit ReferenceQueues durchgeführt).

Einige hat nicht Müll Sprachen, wie C ++ gesammelt, stellen Sie schwache/starke Bezugsfunktionalität als ein Teil zur Verfügung, Müll-Sammlungsbibliotheken zu unterstützen. Im Fall von C ++ sind normale Zeigestöcke schwach, und kluge Zeigestöcke sind stark; obwohl Zeigestöcke nicht wahre schwache Verweisungen sind, weil schwache Verweisungen wissen sollen, wenn der Gegenstand unerreichbar wird.

Beispiele

Schwache Verweisungen können im Nachgehen der aktuellen Variablen nützlich sein, die in der Anwendung Verweise anbringen werden. Diese Liste muss schwache Verbindungen zu den Gegenständen haben. Sonst, sobald Gegenstände zur Liste hinzugefügt werden, wird in ihnen dadurch Verweise angebracht und wird für immer (oder bis zum Programm-Halt) verharren.

Java

Wenn eine schwache Verweisung geschaffen wird, und dann anderswohin im Code verwendet werden kann, um den wirklichen Gegenstand zu bekommen, ist die schwache Verweisung nicht stark genug, um Müll-Sammlung zu verhindern, so kann es sein (wenn es keine starken Verweisungen auf den Gegenstand gibt), der plötzlich anfängt, ungültig zurückzukehren.

Import java.lang.ref. WeakReference;

öffentliche Klasse ReferenceTest {\

öffentliche statische leere Hauptsache (Schnur [] args) wirft InterruptedException {\

Studentens1 = neuer Student (1);

System.out.println (s1);

WeakReference

System.out.println (ws.get );

s1 = ungültig;

System.gc ;

Thread.sleep (1000);

System.out.println (ws.get );

}\

}\

Klassenstudent {\

öffentlicher Student (interne Nummer id) {\

this.id = id;

}\

interne Nummer id;

öffentliche Schnur toString {\

kehren Sie" [id =" + id +"] zurück";

}\}\

</Quelle>

Ein anderer Gebrauch von schwachen Verweisungen ist schriftlich ein geheimes Lager. Das Verwenden, zum Beispiel, eine schwache Kuddelmuddel-Karte, kann man im geheimen Lager die verschiedenen verwiesenen Gegenstände über eine schwache Verweisung versorgen. Wenn der Müllmann läuft - wenn zum Beispiel der Speichergebrauch der Anwendung genug hoch - jene versteckten Gegenstände wird, in denen durch andere Gegenstände nicht mehr direkt Verweise angebracht wird, werden vom geheimen Lager entfernt.

Lua

weak_table = setmetatable ({}, {__ Weise = "v"})

weak_table.item = {}\

Druck (weak_table.item)

collectgarbage

Druck (weak_table.item)</Quelle>

Siehe auch

  • Weiche Verweisung
  • Gespenst-Verweisung
  • Zirkelbezug
  • Ephemeron

Zeichen

Außenverbindungen


Beluga-Walfisch / Navalsaz
Impressum & Datenschutz