Что такое Execution Engine
Execution Engine (механизм выполнения) — это компонент JVM, который считывает байт-код из областей данных времени выполнения и исполняет его. Состоит из интерпретатора, JIT-компилятора и сборщика мусора.
Компоненты Execution Engine
| Компонент | Роль |
|---|---|
| Interpreter | Быстро запускает выполнение байт-кода, но каждый вызов метода интерпретируется заново |
| JIT Compiler | Компилирует повторяющийся (горячий) байт-код в нативный код для ускорения |
| Garbage Collector | Обнаруживает и удаляет неиспользуемые объекты, освобождая память в куче |
Интерпретатор
Интерпретатор выполняет байт-код инструкция за инструкцией. Преимущество — быстрый старт, недостаток — при многократном вызове одного метода каждый раз выполняется повторная интерпретация.
JIT-компилятор
JIT-компилятор устраняет недостатки интерпретатора. Когда Execution Engine обнаруживает повторно вызываемый код, JIT-компилятор компилирует весь байт-код в нативный машинный код. Этот нативный код используется при последующих вызовах, повышая производительность.
Составные части JIT-компилятора:
- Генератор промежуточного кода (Intermediate Code Generator)
- Оптимизатор кода (Code Optimizer)
- Генератор целевого кода (Target Code Generator)
- Профилировщик (Profiler) — определяет горячие точки (часто вызываемые методы)
Garbage Collector
Сборщик мусора (GC) — это механизм автоматического управления памятью. Он обнаруживает и удаляет объекты, на которые больше нет ссылок, освобождая занимаемую ими память в куче. Подробнее о видах сборщиков мусора — в отдельных вопросах ниже.
На собеседовании: ключевой момент — взаимодействие интерпретатора и JIT-компилятора. Интерпретатор обеспечивает быстрый старт, JIT-компилятор ускоряет горячий код. Это компромисс между временем запуска и пиковой производительностью. Не забудьте упомянуть профилировщик как компонент, определяющий, что именно компилировать.