Excelsior JET 12 - теперь с PGO
Дмитрий Лесков22.06.2017

Насколько мне известно, HotSpot VM была первой управляемой средой исполнения, которая популяризовала идею выборочной JIT-компиляции по результатам профилировки приложений прямо по ходу их работы. В двух словах, суть её состоит в том, чтобы компилировать в код целевой платформы только те части приложения, которые исполняются много раз подряд или очень часто - так называемые hot spots. Идея эта занимает настолько центральное место, что даже дала название всей виртуальной машине. HotSpot также непрерывно собирает множество разнообразной дополнительной информации об исполняемой программе, что даёт её JIT-компилятору возможность выполнять различные оптимизации, как объектно-ориентированные, так и традиционные, например, открытую подстановку кода методов вместо их вызовов.

В то же время, все широко используемые реализации C и C++, наиболее распространенных языков, компилируемых статически, также способны оптимизировать код, основываясь на результатах профилировки приложения (т.н. profile-guided optimization, сокращённо - PGO). Единственная принципиальная разница состоит в том, что профилировка производится на компьютере разработчика как отдельный шаг процесса сборки, так что соответствующие накладные расходы не переносятся на все машины конечных пользователей приложения.

Таким образом, внедрение PGO в наш статический Java-компилятор было всего лишь вопросом времени. Итак, разрешите представить Excelsior JET 12 с PGO, прошу любить и жаловать.

Download beta 2 | Notable Changes | Profile-Guided Optimization

Наши тесты показывают, что PGO может дать существенный выигрыш в производительности, особенно в комбинации с глобальным оптимизатором, который мы наконец-то реализовали для 64-битных x86 и ARM. Однако мы также наблюдали примеры реальных приложений, на которых применение PGO не дало значимых результатов. Поэтому мы призываем вас опробовать бета-версию на ваших приложениях, и будем очень признательны, если вы напишете нам, что у вас получилось.