Java Language
Компилятор Just in Time (JIT)
Поиск…
замечания
история
Компилятор Symantec JIT был доступен в Sun Java с версии 1.1.5, но у него были проблемы.
Компилятор Hotspot JIT был добавлен в Sun Java в 1.2.2 в качестве плагина. В Java 1.3 JIT был включен по умолчанию.
(Источник: Когда Java получил JIT-компилятор?
обзор
Компилятор Just-In-Time (JIT) является компонентом среды выполнения Java ™ Runtime Environment, которая повышает производительность приложений Java во время выполнения.
- Программы Java состоят из классов, которые содержат нейтрали, базирующиеся на платформе, которые могут быть интерпретированы JVM на разных компьютерных архитектурах.
- Во время выполнения JVM загружает файлы классов, определяет семантику каждого отдельного байт-кода и выполняет соответствующее вычисление.
Дополнительный процессор и использование памяти во время интерпретации означает, что приложение Java работает медленнее, чем собственное приложение.
Компилятор JIT помогает повысить производительность Java-программ, компилируя байт-коды в собственный машинный код во время выполнения.
Компилятор JIT включен по умолчанию и активируется при вызове метода Java. Компилятор JIT компилирует байт-коды этого метода в собственный машинный код, компилируя его "just in time"
для запуска.
Когда метод был скомпилирован, JVM вызывает скомпилированный код этого метода непосредственно вместо его интерпретации. Теоретически, если компиляция не требовала процессорного времени и использования памяти, компиляция каждого метода могла бы позволить скорости Java-программы приближаться к скорости работы собственного приложения.
Для компиляции JIT требуется время процессора и использование памяти. Когда JVM запускается первым, вызывается тысячи методов. Компиляция всех этих методов может существенно повлиять на время запуска, даже если программа в конечном итоге достигает очень хорошей пиковой производительности.
- На практике методы не компилируются при первом вызове. Для каждого метода JVM поддерживает
call count
который увеличивается каждый раз при вызове метода. - JVM интерпретирует метод до тех пор, пока его количество вызовов не превысит порог компиляции JIT.
- Поэтому часто используемые методы скомпилируются вскоре после запуска JVM, и менее используемые методы скомпилируются намного позже или вообще не выполняются.
- Порог компиляции JIT помогает быстрому запуску JVM и по-прежнему имеет улучшенную производительность.
- Порог был тщательно выбран для получения оптимального баланса между временем запуска и долгосрочной эксплуатацией.
- После компиляции метода его счетчик вызовов сбрасывается на ноль, а последующие вызовы метода продолжают увеличивать его количество.
- Когда количество вызовов метода достигает порога перекомпиляции JIT, компилятор JIT компилирует его второй раз, применяя больший выбор оптимизаций, чем в предыдущей компиляции.
- Этот процесс повторяется до тех пор, пока не будет достигнут максимальный уровень оптимизации.
Самые загруженные методы Java-программы всегда оптимизируются наиболее агрессивно, что максимизирует выгоды от использования JIT-компилятора.
Компилятор JIT также может измерять operational data at run time
и использовать эти данные для улучшения качества последующей перекомпиляции.
Компилятор JIT может быть отключен, и в этом случае вся программа Java будет интерпретирована. Отключение JIT-компилятора не рекомендуется, кроме как для диагностики или решения проблем компиляции JIT.