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