Технические статьи о V8, Chromium, управлении памятью и оптимизации производительности. Написаны инженерами для инженеров.
Большинство JavaScript-разработчиков знают, что в V8 есть сборщик мусора — но мало кто понимает генерационную модель сборки, скрытые классы и сжатие указателей, которые определяют, останется ли куча памяти компактной или распухнет за долгую сессию браузера.
Устройство Orinoco GC в V8: генерационная сборка, алгоритм Scavenger, циклы Major GC и скрытые классы. Что делает объекты JavaScript «дешёвыми» или «дорогими» для сборщика.
Как устроен механизм tab discarding внутри Chrome, когда он срабатывает автоматически и как его правильно вызывать через API chrome.tabs.discard().
Парадоксальный взгляд на то, как раздутый дисковый кэш может замедлять навигацию через увеличенное время I/O, перегрузку вытеснения и подачу устаревшего контента.
Почему форма объекта важнее его размера в V8. Переходы скрытых классов, мономорфные и полиморфные инлайн-кэши, как писать JavaScript, оптимально компилируемый JIT-компилятором.
Практическое руководство по миграции на MV3: сервисные воркеры против фоновых страниц, новый API declarativeNetRequest, изменения в executeScript и новая модель разрешений.
Пошаговый разбор вкладки Memory в Chrome DevTools: снимки кучи, временные шкалы выделений, retained size против shallow size и как находить утечки через отсоединённые DOM-узлы.
V8 использует генерационный сборщик мусора под названием Orinoco. Куча разделена на две области: молодое поколение (питомник) и старое поколение.
┌─────────────────────────────────────────────┐ │ Куча V8 │ │ │ │ ┌──────────────────┐ ┌─────────────────┐ │ │ │ Молодое поколение│ │ Старое поколение│ │ │ │ (1–8 МБ) │ │ (до 4 ГБ) │ │ │ │ │ │ │ │ │ │ Новые объекты │ │ Объекты после │ │ │ │ Scavenger GC │ │ 2+ циклов GC │ │ │ │ (1–5 мс) │ │ Major GC (Mark │ │ │ │ │ │ -Compact, ~100мс)│ │ │ └──────────────────┘ └─────────────────┘ │ └─────────────────────────────────────────────┘
При создании объект попадает в молодое поколение. Scavenger (малый GC) запускается часто и быстро — обычно 1–5 мс — собирая короткоживущие объекты. Объекты, пережившие два цикла Scavenger, продвигаются в старое поколение.
Старое поколение собирается Major GC (Mark-Compact), который может занимать 50–200 мс. V8 запускает его параллельно и инкрементально, но интенсивное выделение памяти — характерное для SPA со сложным состоянием — может перегрузить эти механизмы.
Что делает оптимизатор памяти OKX: сбрасывая неактивные процессы рендеринга, мы уничтожаем целые экземпляры кучи V8. Это эффективнее, чем подталкивать GC внутри одной кучи, потому что изоляция рендереров означает, что каждая вкладка запускает собственный контекст V8.
Остались вопросы? Смотрите FAQ →Следите за блогом через RSS — без почты, без аккаунта, без трекинга. Лента содержит полный текст статей.