В книге 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?