3

In einem Buch erfuhr ich, dass Implementierungen von JavaScript dazu neigen, eine der beiden Speicherbereinigungsmethoden zu verwenden. Entweder ist es Mark-and-Sweep oder Referenzzählung. Ich verstehe das Konzept der Referenzzählung. Es wird gezählt, wie viele Referenzen eines Wertes existieren. Wenn einer Variablen ein Wert zugewiesen wird, erhöht sich die Referenzzählung für diese Variable um 1, und wenn Variablen durch einen anderen Wert überschrieben werden, verringert sich die Referenzzählung des "THIS" -Werts um 1. Der Prozess wird fortgesetzt, und wenn die Anzahl der Referenzen den Wert 0 erreicht Wert gilt als sicher für das Löschen.Verstehen des Querverweises in Bezug Zählmethode der Speicherbereinigung

Dann gab es einen Abschnitt, der das Querverweisproblem mit der Referenzzählmethode bei der Speicherbereinigung erklärte. Wenn eine Eigenschaft von Objekt A die Referenz auf Objekt B zugewiesen wird und umgekehrt, wird das Querverweisproblem angezeigt, weil die Zählung nie auf Null geht. Das Beispiel in dem Buch gegeben war so etwas wie

var A = new Object(); 
var B = new Object(); 
A.prop = B; 
B.prop = A; 

Ich habe das komplett vermisst. Ich meine, wie der obige Code zu einem Querverweisproblem führt? Warum das Zählen nie Null erreicht.

Hinweis Ich schrieb alles, was ich über Referenzzählung verstand. Wenn ich irgendwo falsch liege, sagen Sie bitte. Vielen Dank.

Antwort

1

Dies ist ein Beispiel:

class Person{ 
    string name; 
    Person lover; 
} 

A = new Person("A"); 
B = new Person("B"); 
A.lover = B; 
B.lover = A; 

A = NULL; 
B = NULL; 

explain

das Zählen So erreicht nie Null.