JIT-компиляция (Just-in-time) в Java — это механизм оптимизации выполнения кода, основанный на вычислении наиболее исполняемых участков программы и компиляции их в машинный код. 4
Принцип работы: если в программе есть части кода, которые выполняются много раз, то их можно скомпилировать один раз в машинный код, чтобы в будущем ускорить их выполнение. 1
Процесс происходит так:
- JVM профилирует программу. 4 Она замеряет, какие из участков кода вызываются чаще остальных. 4
- JIT-компилятор определяет, какой метод нужно скомпилировать. 25 Для этого внутри JVM создаётся таблица, в которой ведётся счёт количества вызовов каждого из методов. 4
- Чем больше раз был вызван метод, тем больше он попадает под определение «горячих методов» (hot methods) и, соответственно, выше шанс быть скомпилированным в машинное представление JIT-компилятором. 4
- После компиляции при каждом следующем вызове этой части программы виртуальная машина будет сразу выполнять скомпилированный машинный код, а не интерпретировать его, что ускоряет выполнение программы. 1
JIT-компиляция — асинхронный процесс: когда JVM решает, что определённый метод нужно скомпилировать, он помещается в очередь. 5
JIT-компилятор самостоятельно решает, какой уровень компиляции задать для каждого фрагмента программы на основе того, как часто выполняется этот фрагмент. 1