В Firefox 16 заработает инкрементальный сборщик мусора

в 11:33, , рубрики: Firefox, Firefox 16, Garbage collection, javascript, Веб-разработка, производительность javascript, сборка мусора, сборщик мусора, метки: , , , ,

16-я версия браузера Firefox, релиз которй намечен на 9 октября, содержит серьёзное обновление движка JavaScript. Сборщик мусора перейдёт от стратегии «stop-the-world», когда на время уборки полностью замораживается работа скриптов, к инкрементальной стратегии, когда сборка мусора происходит в несколько этапов. Хотя в целом работа сборщика мусора будет отнимать немного больше времени, отзывчивость браузера существенно улучшится, так как элементы интерфейса, анимация и игры не будут больше подвисать на несколько сотен миллисекунд на время уборки.

Посмотреть, как работает новый сборщик мусора, и поэкспериментировать с его параметрами можно, установив бета-версию Firefox (инструкция для Ubuntu). На странице about:config настройки находятся в ветке javascript.options.mem.gc_*. Увидеть результат своих действий можно на этой демо-страничке, которая пытается обновлять график с частотой 60 кадров в секунду. На логарифмической шкале в миллисекундах показано реальное время задержки между двумя кадрами. С отключенной инкрементальной сборкой мусора (javascript.options.mem.gc_incremental установлен в false) периодически возникают хорошо заметные задержки в 300 — 500 миллисекунд. Если инкрементальная сборка включена, задержки редко бывают выше 50 — 80 миллисекунд, что почти незаметно. Кроме того, следить за состоянием памяти и уборкой мусора можно с помощью дополнения MemChaser.

Работа над инкрементальной сборкой мусора началась больше года назад и сейчас идёт очень активно. В 17 и 18 версиях ожидается дальнейшее улучшение характеристик сборщика мусора. Кстати, отзывчивости браузера Firefox посвящён отдельный раздел на сайте MozillaWiki, где собрана воедино вся информация, касающаяся воспринимаемой скорости, задержек и подвисаний Firefox.

Источник — blogs.mozilla.org/javascript.

Автор: ilya42

Поделиться

* - обязательные к заполнению поля