Компилятор Just-in-time (JIT) - это программа, которая превращает байт-код Java (программу, которая содержит инструкции, которые должны интерпретироваться) в инструкции, которые можно отправлять непосредственно в процессор.
Компиляторы JITпоставляется в виде автономных платформенно-зависимых собственных библиотек.Если библиотека JIT Compiler существует, Java VM инициализирует перехватчики собственного кода Java Native Interface (JNI) для вызова функций JIT, доступных в этой библиотеке, вместо эквивалентной функции в интерпретаторе. Класс java.lang.Compiler используется для загрузки собственногобиблиотеки и начать инициализацию внутри JIT-компилятора. JIT-компилятор использует свой собственный invoker.Производственные выпуски Sun проверяют бит доступа к методу на значение ACC_MACHINE_COMPILED, чтобы уведомить интерпретатора о том, что код для этого метода уже скомпилирован и сохранен в загруженном классе. Когда метод вызывается в первый раз (зависит от поставщика JVM), компилятор JIT компилируетсяблок метода в собственный код для этого метода и сохраняет его в блоке кода для этого метода.
После того как код скомпилирован, устанавливается бит ACC_MACHINE_COMPILED, который используется на платформе Sun.
Первое, что нужно помнить, это то, что JIT-компилятор достигает большинства своих улучшений скорости во второй раз (зависит от поставщика JVM), когда он вызывает метод.JIT-компилятор компилирует весь метод, а не интерпретирует его построчно, что также может повысить производительность при запуске приложения с включенным JIT.Это означает, что если код вызывается только один раз, вы не увидите значительного прироста производительности.JIT-компилятор также игнорирует конструкторы классов, поэтому, если это возможно, сводите код конструктора к минимуму.
JIT-компилятор также достигает незначительного прироста производительности, не предварительно проверяя определенные граничные условия Java, такие как нулевой указатель или массив вне границ.исключения.Единственный способ, которым JIT-компилятор знает, что у него исключение нулевого указателя, - это сигнал, выданный операционной системой.Поскольку сигнал исходит от операционной системы, а не от виртуальной машины Java, ваша программа получает удар по производительности.Чтобы обеспечить максимальную производительность при запуске приложения с JIT, убедитесь, что ваш код очень чистый, без ошибок, таких как нулевой указатель или массив за пределами исключений.
Ссылка: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/perf2.html