Skip to content

Instantly share code, notes, and snippets.

@savanovich
Last active August 18, 2021 10:08
Show Gist options
  • Save savanovich/835b48170fe1eda0c58f to your computer and use it in GitHub Desktop.
Save savanovich/835b48170fe1eda0c58f to your computer and use it in GitHub Desktop.
JIT vs AOT

JIT Just-in-time compilation динамическая компиляция. Технология увеличения производительности программ, использующих байт-код, путём компиляции байт-кода в машинный код непосредственно во время работы. Так достигается высокая скорость выполнения по сравнению с интерпретируемым байт-кодом (сравнимая с компилируемыми языками) за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. Из-за того что компиляция произходит во время исполнения можно проводить различные оптимизации, например, компиляция может осуществляться непосредственно для целевого CPU и операционной системы (SSE, MMX), profile-guided optimizations - cреда может собирать статистику о работающей программе и производить оптимизации с учётом этой информации; cреда может делать глобальные оптимизации кода (встраивание библиотечных функций в код, pseudo-constant propagation или indirect/virtual function inlining); перестраивание кода для лучшего использования кэша.

Tracing JIT в отличие от классического JIT записывает линейную последовательность наиболее часто используемых операций, компилирует их в нативные машинные инструкции, а затем выполняет. Этим он отличается от классического JIT, который компилирует методы целиком.

AOT Ahead-of-time compilation. Процесс компиляции полностью выполняется перед выполнением программы. АОТ не требует выделения дополнительной памяти. АОТ компиляция проходит с минимальной нагрузкой на систему. Хорошо подходит для встроенных систем или mobile устройств.

Примеры

Python, Ruby - интерпретируемый байт-кодом (минимальные оптимизации)

PyPy (via RPython), HOPE, Dalvik (Android), Java, .Net - JIT

ART (заменит Dalvik), Mono AOT, GNU Compiler for Java - AOT

Lua, Pyston, JavaScript V8 - Tracing JIT

Misc

Just-In-Time Compilation Using GCC: Video, Slides, Wiki

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment