Другое

JIT-компиляция: что это за система, принцип работы и виды

Lorem ipsum dolor

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

Языки высокого уровня созданы для того, чтобы ими было удобно программировать. Их вообще не понимает компьютер. Для того чтобы он стал их понимать, существуют специальные программы-преобразователи, они же компиляторы. Компилятор преобразует очеловеченный код высокоуровневого языка в двоичный код для компьютеров.

Что такое JIT-компиляция 

JIT это Just-inTime, что подразумевает компиляцию кода, когда это нужно, а не до выполнения программы. Поэтому JIT обладает следующими свойствами:

  • не весь код сразу компилируется в машинный, а только необходимая часть, — это снижает нагрузку на процессор;

  • машинный код генерируется во время выполнения программы, значит, он будет изначально оптимизирован под архитектуру устройства, что позволит делать кроссплатформенные программы.

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

Традиционная компиляция происходит до старта программы. При таком подходе сразу весь программный код компилируется в отдельный файл. Самый простой пример файлы «.exe» для запуска на Windows. 

Примеры JIT:

  • для Java JIT находится внутри виртуальной машины Java;

  • для C# JIT-компилятор находится внутри CLR (Common Language Runtime);

  • в Андроиде DVM или ART;

  • и др.

Принцип JIT (Just-in-Time)

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

Однако у такого принципа есть один минус. Скомпилированные куски программного кода нужно где-то хранить. Поэтому они хранятся в памяти устройства. В результате быстродействие программ при JIT-компиляции достигается за счет увеличенного потребления памяти устройства.

JIT-компиляция достаточно сложный процесс, чтобы описать его простыми словами. Для разных языков программирования существуют свои JIT-компиляторы, но не все они просто работают. Давайте поверхностно рассмотрим устройства JIT- компилятора для Java.

Для Java JIT-компиляция это четырехуровневый процесс, то есть сама компиляция может происходить в одном из 4-х уровней сложности. Чем выше уровень процесса компиляции, тем сложнее и дольше сам процесс. Но выполнение такого скомпилированного кода будет быстрее, чем у компиляции с низшим уровнем. Самое интересное, что уровень JIT-компиляции выбирается самостоятельно для каждого участка кода. Разработчик может выбрать только вид JIT-компилятора:

  • С1 компилирует 3 первых уровня;

  • С2 компилирует 4-й уровень компиляции.

По логике получается, что для несложных приложений лучше использовать компилятор С1, так как в подобных приложениях важен быстрый старт, нежели его дальнейшее быстродействие. А для высоконагруженных и сложных приложений лучше применять С2 пусть старт немного затянется, однако в дальнейшем приложение будет работать немного быстрее.

Заключение

JIT это способ ускорить работу приложений, но с затратами памяти устройства. JIT-компилятор самостоятельно анализирует наиболее часто используемые участки программы и преобразует их в байт-код заранее. На этом и построен процесс ускорения такой компиляции. О ее эффективности можно говорить долго, но самый показательный момент, что JIT-компиляция это хорошее возвращение в Android. 

Изначально виртуальная машина в Андроиде (DVM) работала по технологии JIT. Но потом разработчики Андроид решили отказаться от JIT в пользу новомодной виртуальной машины ART, которая не содержала JIT. Спустя какое-то время «чистая» ART себя не оправдала, поэтому было решено снова внедрить в Андроид JIT, что и было сделано в последних версиях.

Схожие статьи

DotNet: что это за программа и как она изменит компьютерный мир
Другое

DotNet: что это за программа и как она изменит компьютерный мир

Компиляторы: принципы, технологии и инструментарий — книга и теория компиляторов
Другое

Компиляторы: принципы, технологии и инструментарий — книга и теория компиляторов

Разработка вопросов безопасности в проектах: от книги до практики
Другое

Разработка вопросов безопасности в проектах: от книги до практики

End-to-end или E2E-процесс: что это? Сквозное тестирование
Другое

End-to-end или E2E-процесс: что это? Сквозное тестирование

×