Das Buch Learning jQuery sagt IE Speicherverlust für das DOM-Objekt verfügt über eine Eigenschaft Referenzierung mit einer Funktion und die Funktion auch die DOM-Objekt referenziert, so dass eine „zirkuläre Referenz“ ist, wie folgt aus:Warum bleiben Speicherverluste im Internet Explorer bestehen, auch wenn Sie nicht auf Seiten navigieren?
onload = function() {
var foo = document.getElementById('foo');
foo.onclick = function() { // DOM object foo's onclick property refers to a function
foo.innerHTML = "hello" // the function's body refers to the DOM object
} // therefore circular reference
}
IE kann zirkuläre Verweise für die Garbage Collection verarbeiten, jedoch nicht, wenn die zirkulären Verweise sowohl das DOM-Objekt als auch das JavaScript-Objekt betreffen, da sie von verschiedenen Speichermanagern verarbeitet werden.
und:
[der Speicherverlust ... und] das resultierende [Referenz] Looping kann nicht von IE auch freigegeben werden, wenn wir von navigieren weg der Seite.
nie freigegeben, bis der Browser geschlossen ist.
Ist es wahr? Warum gibt IE diese Speicher nicht frei, selbst wenn ein Benutzer die Seite verlässt? Liegt es daran, dass der Benutzer auf Back
klicken und auf die Seite zurückkehren kann und der IE den Status der Seite beibehalten möchte? In diesem Fall, was ist, wenn der Benutzer auf der Speicherleckseite ist und dann auf Back
klickt, und dann google.com geht? Dann kann die Seite von keinem Back
oder Forward
angezeigt werden, und das Speicherverlustproblem kann verschwinden, ohne den Browser zu schließen?
Oder auch wenn die Registerkarte geschlossen ist, ohne den Browser zu schließen?
Tritt diese Art von Speicherverlust auch in IE 8 auf?
Viele Programme haben Probleme mit Speicherlecks; und während viele Speicherlecks in neuere IE-Versionen gesteckt wurden, ist es schwierig, sie alle in ein Projekt dieser Größe zu stecken. – Piskvor