PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Для чего нужен JIT?

Продвинутые темы

JIT (Just-In-Time компиляция) нужна, чтобы ускорить выполнение интерпретируемого кода: движок компилирует «горячие» участки в машинный код прямо во время выполнения.

Проблема

Чистая интерпретация (построчное выполнение) медленная. Компиляция всего кода заранее (AOT) невозможна для динамического JS. JIT — компромисс.

Как работает JIT

Движок (V8) сочетает интерпретацию и компиляцию:

  1. Интерпретация — код сразу выполняется интерпретатором (быстрый старт).
  2. Профилирование — движок отслеживает «горячие» участки (часто выполняемые).
  3. JIT-компиляция — горячий код компилируется в машинный код оптимизирующим компилятором.
  4. Деоптимизация — если предположения нарушились (тип изменился), возврат к интерпретации.
Исходник → байт-код (интерпретация) → профилирование → JIT горячих участков → машинный код

В V8

  • Ignition — интерпретатор (байт-код).
  • TurboFan — оптимизирующий JIT-компилятор.

Что даёт

  • Быстрый старт (интерпретация) + высокая скорость горячего кода (компиляция).
  • Оптимизации на основе реального поведения (типы, формы объектов).

Как помочь JIT

  • Стабильные типы (не менять тип переменной).
  • Мономорфные функции (одинаковые типы аргументов).
  • Стабильная форма объектов.

Коротко для собеседования

JIT (Just-In-Time) компилирует горячие участки кода в машинный прямо во время выполнения: интерпретация даёт быстрый старт, профилирование находит горячий код, JIT его оптимизирует (V8: Ignition + TurboFan), деоптимизация при смене типов. Сочетает быстрый старт интерпретации со скоростью компиляции. Помогают стабильные типы.

Другие вопросы раздела