2012-05-07 41 views
8

Wenn ich ein Objekt erstellen, ohne es zu etwas zuzuordnen, wann wird JavaScript-Müll dieses Objekt sammeln? Hier ein Beispiel:Wie werden anonyme Objekte in JavaScript gesammelt?

alert(new Date().getTime()); 

Wenn keine solche Speicherbereinigung durchgeführt wird, führt dies zu einem Speicherverlust?

for (var i = 0; i < 99999999; i++) { 
    console.info(new Date().getTime()); 
} 
+0

Haben Sie ein Problem? –

+1

Die direkten Antworten auf Ihre Fragen ("Objekte werden irgendwann gesammelt, nachdem sie nicht mehr referenziert werden" und "nein, es wird kein Leck verursachen") sind wahrscheinlich nicht das, wonach Sie wirklich suchen. Was wolltest du wirklich wissen? – Phrogz

+2

@AshBurlaczenko und Phrogz - ich glaube nicht, dass irgendetwas falsch daran ist, nach solchen Dingen zu fragen. Wenn Sie versuchen, etwas Code zu optimieren, um beispielsweise die Speichernutzung zu reduzieren, ist dies eine sehr gute Sache und muss nicht an ein bestimmtes Problem gebunden sein. – nickf

Antwort

7

Wenn niemand im Geltungsbereich auf die anonymen Objekte verweist, werden sie bei der nächsten Ausführung des GCs mit Müll gesammelt.

Also, nachdem Console.info beendet ist, sind sie für Müll sammeln. Wenn Sie festlegen, dass sich In-Scope-Variablen auf sie beziehen, werden sie nicht ausgeführt.

4

Die Schönheit der Garbage Collection ist, dass Sie nicht wissen, wann der Speicher zurückgewonnen werden, noch sollten Sie kümmern (es sei denn, es ist viel zu häufig geschieht).

In dieser Situation sollte die Laufzeit schließlich diese Date Instanzen zurückfordern, aber nichts, was Sie tun, wird wirklich ändern, wie schnell es das tut. Dies führt auch NICHT zu einem Speicherverlust.

4

JavaScript führt GC (Garbage Collector) automatisch aus, um den von Strings, Objekten, Arrays und Funktionen belegten Speicher freizugeben, die nicht mehr verwendet werden.

Ein wesentliches Merkmal der Garbage Collection ist, dass der Garbage Collector muss der Lage sein, zu bestimmen, wann es sicher ist, Speicher zurückzufordern. Offensichtlich darf es nie Werte zurückfordern, die noch verwendet werden und nur Werte sammeln sollte, die nicht mehr erreichbar sind; Das heißt, Werte, die nicht sind, können durch eine der Variablen, Objekteigenschaften oder Array-Elemente im Programm bezeichnet werden.

Referenz:Here.

Verwandte Themen