В книге Learning jQuery говорится, что IE имеет утечку памяти для объекта DOM, имеющего свойство, ссылающееся на функцию, а функция также ссылается на объект DOM, таким образом, имея «циклическую ссылку», например:
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 может обрабатывать циклические ссылки для сборки мусора, но не тогда, когда циклические ссылки включают как объект DOM, так и объект Javascript, потому что они обрабатываются разными диспетчерами памяти.
и:
[утечка памяти ... и] результирующий цикл [ссылка] не может быть освобожден IE, даже когда мы уходим со страницы.
никогда не освобождается, пока браузер не будет закрыт.
Это правда? Почему IE не освобождает эту память, даже когда пользователь покидает страницу? Это потому, что пользователь может щелкнуть Back
и вернуться на страницу, а IE хочет сохранить состояние страницы? В таком случае, что, если пользователь находится на странице утечки памяти, затем щелкает Back
, а затем переходит на google.com? Тогда страница не может быть просмотрена ни одним Back
или Forward
, и проблема с утечкой памяти может исчезнуть, не закрывая браузер?
Или даже когда вкладка закрыта, не закрывая браузер?
Происходит ли такая утечка памяти и в IE 8?