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