JIT-компилятор и исполнение - PullRequest
3 голосов
/ 23 июня 2010

Я запутался с JIT-компилятором,

  1. Что такое JIT-компилятор?
  2. JIT-компилятор компилирует байтовые коды перед каждым выполнением или при каждой загрузке JVM?

Ответы [ 4 ]

4 голосов
/ 23 июня 2010

JIT расшифровывается как «Just In Time».Это компилятор, который преобразует байт-код Java в машинный код при запуске вашей программы.

JIT от Sun не компилирует весь ваш байт-код сразу при каждом запуске Java-программы;он содержит некоторую очень сложную логику, чтобы решить, когда компилировать части байт-кода, один из критериев, который он использует, - это как часто код выполняется. HotSpot (Википедия) для более подробной информации.

1 голос
/ 24 февраля 2012

Компилятор 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

1 голос
/ 23 июня 2010

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

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

JIT-компиляция совершенно необязательна, а стандартная реализация Java позволяет отключить ее.Однако на самом деле нет причин отключать его.

0 голосов
/ 24 июня 2010

JIT-компилятор был внешним компилятором, работающим точно по времени, который поставлялся с Java 1.1.Термин сейчас устарел.Java поставляется с JVM «HotSpot» со встроенной компиляцией.

...