Блог о производительности

Внутренности браузера

Технические статьи о V8, Chromium, управлении памятью и оптимизации производительности. Написаны инженерами для инженеров.

Главная статья V8 27 фев 2026 · 10 мин чтения

Как работает сборщик мусора V8 — и как ему помочь

Большинство JavaScript-разработчиков знают, что в V8 есть сборщик мусора — но мало кто понимает генерационную модель сборки, скрытые классы и сжатие указателей, которые определяют, останется ли куча памяти компактной или распухнет за долгую сессию браузера.

Читать статью Команда инженеров OKX
🔬
V8 · Orinoco GC · Scavenger
🔬
27 фев 2026V8

Как работает сборщик мусора V8 — и как ему помочь

Устройство Orinoco GC в V8: генерационная сборка, алгоритм Scavenger, циклы Major GC и скрытые классы. Что делает объекты JavaScript «дешёвыми» или «дорогими» для сборщика.

🏎️
15 янв 2026Chromium

Заморозка вкладок в Chromium: экономия памяти без потери UX

Как устроен механизм tab discarding внутри Chrome, когда он срабатывает автоматически и как его правильно вызывать через API chrome.tabs.discard().

🗄️
9 дек 2025Кэш

Настоящая цена браузерного кэша: когда больше — не лучше

Парадоксальный взгляд на то, как раздутый дисковый кэш может замедлять навигацию через увеличенное время I/O, перегрузку вытеснения и подачу устаревшего контента.

🧬
22 ноя 2025V8

Скрытые классы и инлайн-кэши: секретный движок производительности V8

Почему форма объекта важнее его размера в V8. Переходы скрытых классов, мономорфные и полиморфные инлайн-кэши, как писать JavaScript, оптимально компилируемый JIT-компилятором.

🔌
31 окт 2025MV3

Manifest V3: что изменилось, что сломалось и что стало лучше

Практическое руководство по миграции на MV3: сервисные воркеры против фоновых страниц, новый API declarativeNetRequest, изменения в executeScript и новая модель разрешений.

📊
5 окт 2025Память

Профилирование памяти браузера: практическое руководство по Chrome DevTools

Пошаговый разбор вкладки Memory в Chrome DevTools: снимки кучи, временные шкалы выделений, retained size против shallow size и как находить утечки через отсоединённые DOM-узлы.

Глубокое погружение

GC в V8: технический ликбез

V8 использует генерационный сборщик мусора под названием Orinoco. Куча разделена на две области: молодое поколение (питомник) и старое поколение.

Структура кучи V8 (упрощённо)
┌─────────────────────────────────────────────┐
│              Куча 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 — без почты, без аккаунта, без трекинга. Лента содержит полный текст статей.

Написать нам Релизы на GitHub