На что тратит память браузер

Тема в разделе "Сборник статей по безопасности и анонимности", создана пользователем CLAY, 11 апр 2017.

  1. CLAY

    CLAY Member

    Сообщения:
    419
    Симпатии:
    5
    Частенько в спорах о браузерах приходится слышать аргументы вроде: Твой Firefox отжирает целых 370 мегабайт памяти, а моя инновационная и прогрессивная Opera всего 320! Обычно, если дело дошло до таких аргументов, то доказывать, что по теперешним меркам 50 мегабайт давно ничего не решают совершенно бесполезно. Кстати, апелляция к размеру потребляемой памяти часто используется и в спорах Виндовс/Линукс. Причем, о цифрах, отображаемых в системных мониторах, не пренебрегают говорить даже те, кто казалось бы имеет отношение к IT и должен понимать, что то, что процесс выделил себе сколько-то памяти вовсе не означает, что эта память не может быть освобождена под что-то более нужное. А кому-то просто хочется, чтобы у него свободной памяти всегда было очень много, даже если ничем занимать такие объемы не планируется.

    Не стоит забывать и про умные кэши. Если после включения компьютера вы в 99% запускаете и браузер, то почему бы операционной системе не подгрузить нужные библиотеки заранее? Тем более, если у вас в системе 3 гигабайта оперативки из которой 70% свободны и просто простаивают без дела.[cut=Читать далее »]

    Но так себя ведет не только операционная система. Браузер ведь тоже может посмотреть, что доступной памяти полно и заранее подгрузить какой-нибудь модуль, загрузка которого займет некоторое заметное время. В результате, пользователь зайдет на сайт со сложным скриптом, а JIT-компилятор уже во всеоружии будет этот скрипт ждать, так как умница-браузер загрузил его заранее, чтобы я не ждал ни секунды. Учитывая современные тенденции к обосабливании каждой вкладки эти действия приходится применять не ко всему браузеру, а к каждой отдельной вкладке. Разумеется это сказывается на общем потреблении.

    Для тех, кому особенно любопытно на что конкретно тратятся его драгоценные мегабайты, Mozilla предоставила в своем браузере системную страницу about:memory:

    В разделе Overview, как вы можете видеть, как раз и указано сколько памяти выделено (Memory mapped) и сколько из неё используется (Memory in use). Цифры даны в байтах. То есть мой браузер, в котором я прямо сейчас набираю эту статью, слушаю музыку на music.yandex.ru и держу открытым mail.google.com с Google Docs, а так же твиттер занял чуть больше 300 мегабайт, при этом зарезервировав еще сотню мегабайт под возможные нужды. При этом свободными остаются больше 3,6 ГБ из всей памяти, что есть в системе.

    Дальше эти цифры расписаны более подробно: malloc это функция совершающая динамическое выделение памяти.

    malloc/allocated malloc/mapped malloc/committed malloc/dirty allocated - то, что занято mapped и committed - синонимы, обозначающие ту память, что была выделена, не зависимо от того используется она или нет dirty - то, что попало в неиспользуемые страницы памяти js - то, что относится к JavaScript js/gc-heap js/string-data js/mjit-code gc-heap - движок, обрабатывающий JavaScript на страницах string-data - как нетрудно догадаться, в этот раздел попала память, занятая JavaScript-объектами String mjit-code - код, преобразованный Mozilla jit-компилятором. Как известно, JavaScript - интерпретируемый язык, то есть JavaScript-текст переводится в машинные коды каждый раз, когда выполняется. Такой перевод занимает лишнее время, поэтому все разработчики браузеров давно наловчились делать специальные компиляторы, которые компилируют JavaScript на лету и потом используют этот уже скомпилированный код. Так вот, в строке mjit-code значается память, занята под такой прекомпилированный код. Сейчас Mozilla использует jit-компилятор под названием SpiderMonkey, но уже анонсирован следующий, под назваинием IonMonkey.

    storage/sqlite - память, используемая под хранение базы данных sqlite storage/sqlite/pagecache - кэш страниц storage/sqlite/other - остальное, что хранится в базе. Например, историяпосещенийсайтов images - разделпрокартинки images/chrome/used/raw images/chrome/used/uncompressed images/chrome/unused/raw images/chrome/unused/uncompressed

    Это всё - память, затраченная на хранение картинок, используемых самим браузером (иконки кнопок, закладок, пунктов меню). Кстати, понятие chrome для обозначения интерфейса в Firefox стали использовать задолго до появления Google Chrome, так что не стоит удивляться, что тут использовано именно это слово.

    images/content/used/raw images/content/used/uncompressed images/content/unused/raw images/content/unused/uncompressed

    А это, соответственно, память, отданная под хранение картинок со страниц.

    layout - внутренняя структура браузера, описывающая расположение элементов интерфейса layout/all layout/bidi

    Может кому-то будет интересно узнать, bidi - обозначение для двунаправленного (bi-directional) текста. Учитывая интернациональность пользователей браузера, создатели просто обязаны учитывать существующие особенности, такие, как необходимость ввода текста справа налево, а не так, как мы привыкли. А частенько нужно использовать и двунаправленный текст, если, скажем, в арабском тексте встречаются названия на английском.

    gfx/surface/image - память, отданная на ускорение обработки изображений. В Firefox все, что содержит в себе gfx относится к графической подсистеме. Сюда относится не только работа с изображениями, но и со шрифтами. А так же, например, скругление углов у таблицы на скриншоте тоже ускоряется чем-то из подмножества gfx-модулей браузера.

    Если после такого описания вам вдруг захочется еще более подробно узнать о том, куда браузер тратит память, то к вашим услугам тестовые сборки, у которых информация со страницы about:memory разжует все еще детальнее:

    Используемая память тут указана в мегабайтах и сразу обозначается сколько это процентов от общего потребления памяти. Но и тут не удалось разобрать все до косточек, поэтому значительные 60% памяти отдано загадочному пункту other. Хотя, даже так тестерам стало гораздо проще находить причины утечки памяти.

Поделиться этой страницей