ОБНОВЛЕНИЕ: Полагаю, я должен предположить, что мое понимание верно (возможно, но если у вас есть лучшее объяснение, , пожалуйста, дайте мне знать ), просто нужно принятьнемного больше времени для Chrome на сборку отдельных DOM (я не знаю, сколько времени это займет, много раз он вообще не собирается GC в течение довольно долгого времени)
![enter image description here](https://i.stack.imgur.com/NjTQs.jpg)
Все:
Я довольно новичок в управлении памятью Javascript, когда читаю Google Chrome (Версия 65.0.3325.181 (Официальная сборка) (32-разрядная версия) Windows 7) Devtoolучебник, есть один пример:
Обнаружение утечек памяти в отдельном дереве DOM с помощью снимков кучи
var detachedNodes;
function create() {
var ul = document.createElement('ul');
for (var i = 0; i < 10; i++) {
var li = document.createElement('li');
ul.appendChild(li);
}
detachedNodes = ul;
}
document.getElementById('create').addEventListener('click', create);
Я думаю, причина в том, что я не понял, как работает DOM вобъем памяти.
Моя мысль такова: каждый раз при щелчке создается контекст выполнения, созданный для create
, вводится локальная переменная ul, ссылающаяся на объект UL, сгенерированный в куче, затем 10 li, сгенерированный в куче, и связанный с объектом ULзатем на объект UL ссылается detachedNode. И я подумал: после вызова create () ссылка между detachedNode и предыдущим объектом UL будет прервана (генерируется во время вызова create () до этого клика), а document.createElement только создает, но не добавляет, поэтомучто объект UL должен быть GCed.
Интересно, почему этот объект UL в куче не может быть GCed?
![enter image description here](https://i.stack.imgur.com/bEUls.jpg)