В Internet Explorer, почему утечка памяти остается, перейдя далеко от страниц?

В 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 также?

6
задан nopole 21 June 2010 в 10:47
поделиться

2 ответа

Утечки памяти - это класс программных ошибок, поэтому вы в основном спрашиваете: «Почему IE глючит?». Ответ на это, очевидно, таков: «потому что где-то программист ошибся».

Хотя некоторые браузеры намеренно сохраняют состояние страницы, даже когда вы уходите от нее (особенно Opera и FF), «утечка памяти» означает память, которую программа больше не использует, но забыла освободить. В этом случае IE перестал заботиться об этой части памяти, но не сообщил об этом операционной системе (Windows), которая по-прежнему считает ее «используемой IE». Таким образом, эта часть памяти висит в нейтральной зоне до тех пор, пока браузер не будет закрыт - потому что, когда процесс браузера завершается, ОС отмечает всю память, выделенную этому процессу, как «свободную».

Утечки памяти - довольно коварный тип ошибки, потому что программа, кажется, работает правильно, но постепенно потребляет все больше и больше памяти.

См., Например, http://en.wikipedia.org/wiki/Circular_reference и http://en.wikipedia.org/wiki/Garbage_collection_ (computer_science) для дальнейшего чтения по этой теме.

4
ответ дан 17 December 2019 в 04:41
поделиться

Утечка происходит потому, что один из программистов приложения (в данном случае IE) не смог правильно утилизировать что-то (объект, ресурс), использующее память.

На MSDN рассматриваются три наиболее распространенные причины утечек в управляемых приложениях:

  • Удержание ссылок на управляемые объекты
  • Невозможность освобождения неуправляемых ресурсов
  • Невозможность утилизации объектов Drawing
1
ответ дан 17 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: