Какие алгоритмы сборки мусора используют все 5 основных браузеров? - PullRequest
11 голосов
/ 19 апреля 2010

В настоящее время я переосмысливаю обработку утилизации объекта в JavaScript-инфраструктуре qooxdoo.
Взгляните на следующую диаграмму (в данный момент A находится в области видимости):

диаграмма http://yuml.me/51747906.jpg

Допустим, мы хотим удалить B. Как правило, мы обрезаем все ссылки между всеми объектами. Это означает, что мы сократили соединение с 1 по 5 в примере. Это действительно необходимо?
Насколько я прочитал здесь , браузеры используют алгоритм разметки и развертки. В этом случае нам просто нужно сократить ссылки 1 (подключение к области) и 5 ​​(подключение к DOM), что может быть намного быстрее.
Но могу ли я быть уверен, что все браузеры используют алгоритм разметки и прочистки или что-то подобное?

Ответы [ 2 ]

2 голосов
/ 20 апреля 2010

Дело в том, что в идеальном мире вам просто нужно отключить DOM-узлы и собственные прослушиватели событий. Проблема, однако, в том, что оригинальная система в qooxdoo была разработана с ошибочными браузерами, такими как IE6. Мы увидели значительное сокращение использования памяти, когда мы удаляем как можно больше самостоятельно. Однако в современном мире я бы изменил его дизайн так, чтобы он был в IE6 нормальным, но не был оптимизирован для его проблем.

Существует также разница в полном завершении всего приложения (удаление всех) и просто в удалении одной части приложения. В последнем сценарии вы должны действовать очень осторожно, чтобы не избавляться от вещей, которые все еще необходимы.

2 голосов
/ 19 апреля 2010

Для любого приличного сборщика мусора (не только для разметки и подметания) достаточно отрезать соединение 1, чтобы освободить B (и C, и D, и окно). Распределение на основе подсчета ссылок не сможет освободить B и D из-за их циклических ссылок (B ссылок D и D ссылок B), но подсчет ссылок на самом деле не сборщик мусора.

Я думаю, можно с уверенностью предположить, что все браузеры используют приличный сборщик мусора (ну, с браузерами, на самом деле ничего не безопасно, но реализация JavaScript, не использующая надлежащий сборщик мусора, тем не менее невероятна).

...