Sortiert JavaScript Garbage Collector globale Variablen?

8

Ich bin verwirrt darüber, seit ich mehrere verschiedene Kommentare gesehen habe. Ich lese ein Javascript-Buch, in dem erwähnt wird, dass das Setzen globaler Variablen auf null eine gute Übung ist (vorausgesetzt, es gibt keine anderen Referenzen) und der GC lädt Speicher für diese Variable beim nächsten Sweep zurück. Ich habe andere Kommentare gesehen, die besagen, dass globale Variablen niemals vom GC entsorgt werden.

Auch wenn ich Javascript in einer OOP-Struktur programmiere, was passiert, wenn ich so etwas habe (wo sich das Spiel im globalen Kontext befindet):

%Vor%

Da der Held in einem Objekt lebt, das im Spiel gespeichert ist, das sich in einem globalen Kontext befindet, würde ich, wenn ich beispielsweise Held auf null setze, dies durch den GC verwerfen?

    
user2000950 28.05.2013, 08:23
quelle

1 Antwort

14

Globale Variablen werden vom GC niemals in dem Sinne entsorgt, dass eine globale Variable noch existiert. Wenn Sie es auf null setzen, wird jedoch der Speicher, auf den es verweist, gesammelt.

z. B.

Vorher:

%Vor%

Nachher: ​​

%Vor%

Setzen Sie a auf null :

%Vor%

Hier kann der vom Objekt verwendete Speicher für die Sammlung ausgewählt werden. Die Variable a existiert jedoch weiterhin und verweist einfach auf null .

Die Aussage, dass globale Variablen niemals erfasst werden, ist leicht irreführend. Es kann genauer gesagt sein, dass Speicher, der in den globalen Kontext zurückverfolgt werden kann, derzeit nicht für die Erfassung ausgewählt werden kann.

Als Antwort auf Ihre Frage, ja - das Heldenobjekt ist für die Sammlung geeignet, da seine indirekte Verbindung mit dem globalen Kontext getrennt wurde.

    
izb 28.05.2013, 08:45
quelle