Компилятор Just In Time

Опубликовано: 4 Февраля, 2022

Компилятор Just-In-Time (JIT) является неотъемлемой частью JRE, то есть среды выполнения Java, которая отвечает за оптимизацию производительности приложений на основе Java во время выполнения. Компилятор является одним из ключевых аспектов при определении производительности приложения для обеих сторон, то есть конечного пользователя и разработчика приложения.

Компилятор Java JIT: общий обзор

Байт-код - одна из наиболее важных функций java, которая помогает кросс-платформенному выполнению. Способ преобразования байт-кода в машинный язык для выполнения имеет огромное влияние на его скорость. Этот байт-код должен интерпретироваться или компилироваться в соответствующие машинные инструкции в зависимости от архитектуры набора команд. Более того, они могут выполняться напрямую, если архитектура команд основана на байт-коде. Интерпретация байт-кода влияет на скорость выполнения.
Для повышения производительности JIT-компиляторы взаимодействуют с виртуальной машиной Java (JVM) во время выполнения и компилируют подходящие последовательности байт-кода в собственный машинный код. При использовании JIT-компилятора оборудование может выполнять собственный код, по сравнению с тем, что JVM постоянно интерпретирует одну и ту же последовательность байт-кода и вызывает накладные расходы на процесс трансляции. Это впоследствии приводит к увеличению производительности в скорости выполнения, если только скомпилированные методы не выполняются реже.
Компилятор JIT может выполнять некоторые простые оптимизации при компиляции серии байт-кода на собственный машинный язык. Некоторые из этих оптимизаций, выполняемых JIT-компиляторами, включают анализ данных, сокращение доступа к памяти путем выделения регистров, перевод из операций стека в операции с регистрами, исключение общих подвыражений и т. Д. JIT-компилятор проводит в стадии исполнения. Поэтому он не может позволить себе выполнять все оптимизации, на которые способен статический компилятор, из-за дополнительных накладных расходов, добавляемых ко времени выполнения, и, кроме того, его просмотр программы также ограничен.

Работа JIT-компилятора

Java следует объектно-ориентированному подходу, поэтому он состоит из классов. Они представляют собой байт-код, который не зависит от платформы и выполняется JVM в различных архитектурах.

  • Во время выполнения JVM загружает файлы классов, определяется семантика каждого из них и выполняются соответствующие вычисления. Дополнительное использование процессора и памяти во время интерпретации заставляет приложение Java работать медленнее по сравнению с собственным приложением.
  • Компилятор JIT помогает повысить производительность программ Java путем компиляции байт-кода в машинный код во время выполнения.
  • Компилятор JIT включен повсюду, но активируется при вызове метода. Для скомпилированного метода JVM напрямую вызывает скомпилированный код, а не интерпретирует его. Теоретически говоря, если бы компиляция не требовала использования процессорного времени или памяти, скорость собственного компилятора и компилятора Java была бы одинаковой.
  • Для JIT-компиляции требуется процессорное время и память. При первом запуске виртуальной машины Java вызываются тысячи методов. Компиляция всех этих методов может значительно повлиять на время запуска, даже если конечным результатом будет очень хорошая оптимизация производительности.

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .