Учебники

Виртуальная машина Java — уровни компиляции

JVM поддерживает пять уровней компиляции —

  • переводчик
  • C1 с полной оптимизацией (без профилирования)
  • C1 с счетчиками вызовов и задних кромок (легкое профилирование)
  • С1 с полным профилированием
  • C2 (использует данные профилирования из предыдущих шагов)

Используйте -Xint, если вы хотите отключить все JIT-компиляторы и использовать только интерпретатор.

Клиент против сервера JIT

Используйте -client и -server для активации соответствующих режимов.

Клиентский компилятор (C1) начинает компилировать код раньше, чем серверный компилятор (C2). Таким образом, к тому времени, когда C2 начал компиляцию, C1 уже скомпилировал части кода.

Но пока он ждет, C2 профилирует код, чтобы узнать о нем больше, чем C1. Следовательно, время ожидания, если смещение по оптимизации может быть использовано для создания гораздо более быстрого двоичного файла. С точки зрения пользователя, компромисс между временем запуска программы и временем, затраченным на ее запуск. Если время запуска является премиальным, то следует использовать C1. Если ожидается, что приложение будет работать в течение длительного времени (типично для приложений, развернутых на серверах), лучше использовать C2, поскольку он генерирует гораздо более быстрый код, который значительно компенсирует любое дополнительное время запуска.

Для таких программ, как IDE (NetBeans, Eclipse) и других программ с графическим интерфейсом, время запуска является критическим. Для запуска NetBeans может потребоваться минута или больше. Сотни классов компилируются при запуске таких программ, как NetBeans. В таких случаях компилятор C1 является лучшим выбором.

Обратите внимание, что существует две версии C1 — 32b и 64b . С2 приходит только в 64б .

Многоуровневая компиляция

В более старых версиях Java пользователь мог выбрать один из следующих параметров:

  • Переводчик (-Xint)
  • C1 (-клиент)
  • C2 (-сервер)

Он появился в Java 7. Он использует компилятор C1 для запуска и, когда код нагревается, переключается на C2. Его можно активировать с помощью следующих параметров JVM: -XX: + TieredCompilation. Значением по умолчанию является false в Java 7 и true в Java 8 .

Из пяти уровней компиляции ярусная компиляция использует 1 -> 4 -> 5 .