Виртуальная машина Java - уровни компиляции
JVM поддерживает пять уровней компиляции -
- Interpreter
- C1 с полной оптимизацией (без профилирования)
- C1 со счетчиками вызова и тыльной стороны (легкое профилирование)
- C1 с полным профилированием
- C2 (использует данные профилирования из предыдущих шагов)
Используйте -Xint, если вы хотите отключить все JIT-компиляторы и использовать только интерпретатор.
Клиент против сервера JIT
Используйте -client и -server, чтобы активировать соответствующие режимы.
Клиентский компилятор (C1) начинает компилировать код раньше, чем серверный компилятор (C2). Таким образом, к тому времени, когда C2 начал компиляцию, C1 уже скомпилировал участки кода.
Но пока он ждет, C2 профилирует код, чтобы знать о нем больше, чем C1. Следовательно, время ожидания, если смещение за счет оптимизации, можно использовать для создания гораздо более быстрого двоичного файла. С точки зрения пользователя, компромисс заключается между временем запуска программы и временем, необходимым для ее выполнения. Если время запуска является дополнительным, следует использовать C1. Если ожидается, что приложение будет работать в течение длительного времени (типично для приложений, развернутых на серверах), лучше использовать C2, поскольку он генерирует гораздо более быстрый код, который значительно компенсирует любое дополнительное время запуска.
Для таких программ, как IDE (NetBeans, Eclipse) и других программ с графическим интерфейсом, время запуска имеет решающее значение. Запуск NetBeans может занять минуту или больше. Сотни классов компилируются при запуске таких программ, как NetBeans. В таких случаях компилятор C1 - лучший выбор.
Обратите внимание, что есть две версии C1 - 32b and 64b. C2 входит только в64b.
Многоуровневая компиляция
В более старых версиях на Java пользователь мог выбрать один из следующих вариантов:
- Переводчик (-Xint)
- C1 (-клиент)
- C2 (-сервер)
Он появился в Java 7. Он использует компилятор C1 для запуска и, когда код становится более горячим, переключается на C2. Его можно активировать с помощью следующих параметров JVM: -XX: + TieredCompilation. Значение по умолчанию -set to false in Java 7, and to true in Java 8.
Из пяти уровней компиляции многоуровневая компиляция использует 1 -> 4 -> 5.