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
No comments:
Post a Comment