Ответ 1
Единственный способ, которым я знаю, это флаг -Xcomp
, но это обычно не рекомендуется использовать. Он запускает немедленную компиляцию JIT всех классов и методов при первом запуске. Недостатком является то, что при первоначальном запуске вы увидите снижение производительности (из-за увеличения активности JIT). Другим основным ограничением с этим флагом является то, что он отключает инкрементную оптимизацию на основе профилирования, которую обычно выполняет JIT. В стандартном смешанном режиме компилятор JIT может (и будет) деоптимизировать и повторно компилировать части кода постоянно на основе собранной информации профилирования и времени выполнения. Это позволяет ему "исправлять" ошибочные оптимизации, такие как пограничные проверки, которые были опущены, но оказались необходимыми, субоптимальные инклинализации и т.д. -Xcomp
отключает оптимизацию на основе профилирования и в зависимости от программы может привести к существенным потерям производительности в целом только для небольшой или никакой реальный выигрыш при запуске, поэтому его не рекомендуется использовать.
Помимо -Xcomp
(который является довольно жестоким) и -XX:CompileThreshold
(который контролирует, сколько выполнений данного метода JIT будет запускаться в режиме intepreted для сбора статистики перед компиляцией/оптимизацией), есть также -Xbatch
. Это заставляет компиляцию JIT на "передний план", по существу блокируя вызовы методов до ее компиляции, а не компилируя ее в фоновом режиме, как обычно.
Вы не указали, какую версию Java вы используете, но если для вас есть опция Java 7, она вводит новую JIT-модель под названием "Tiered compilation" (активируется с помощью переключателя -XX:+TieredCompilation
). Что такое многоуровневая компиляция, так это то, что она позволяет выполнить начальную, меньшую компиляцию при первом использовании метода, а не позже, более крупную компиляцию/оптимизацию на основе собранных данных профилирования. Похоже, вам это должно быть интересно.
Предполагается, что он требует некоторой дополнительной настройки и параметров/конфигураций, но мне еще не удалось проверить его дальше.