Анализ Java HotSpot перед развертыванием?

Хорошо известно, что HotSpot анализирует шаблоны использования среды выполнения и характеристики производительности, а затем оптимизирует процесс JIT на основе этого анализа во время выполнения приложения Java. В результате часто рекомендуется проявлять осторожность при попытках тестирования приложений Java, чтобы эта фаза анализа и оптимизации могла произойти до того, как будут выполнены фактические измерения производительности.

Я уверен, что об этом думали раньше, но я часто задавался вопросом, почему этот этап анализа (например, типичные шаблоны использования) не может быть выполнен каким-либо образом как часть процесса сборки, а затем данные профилирования развернуты вместе с приложением, так что полноскоростной JIT достигается сразу при запуске приложения.

Кто-нибудь знает, действительно ли это делается, есть ли причина, по которой это невозможно, или это планируется как улучшение развертывания HotSpot и Java-приложений?


person Felix Bembrick    schedule 04.11.2013    source источник
comment
Что ж, если говорить интуитивно, для того, чтобы он мог проанализировать, он должен более или менее запустить код или пройти через него с какой-то логикой. Он также не может действительно предсказать ввод пользователя, который в конечном итоге будет иметь шаблон. Он получает хороший образец данных при запуске программы.   -  person Cruncher    schedule 05.11.2013
comment
Да, но всегда будут какие-то очень типичные шаблоны использования, которые можно легко профилировать перед развертыванием. Почему нельзя развернуть информацию профилирования для этих шаблонов? Всегда будут менее распространенные шаблоны использования, но они могут быть проанализированы и оптимизированы так же, как HotSpot работает сейчас во время фактического выполнения.   -  person Felix Bembrick    schedule 05.11.2013
comment
Какие типичные шаблоны использования? Если вы выберете случайную int переменную в середине программы, сможете ли вы определить, вероятно, будет меньше 50, просто взглянув на код?   -  person Louis Wasserman    schedule 05.11.2013
comment
И я уверен, что для некоторых более простых приложений пути выполнения очень ограничены, так что почти все типичные шаблоны использования могут быть предсказаны и проанализированы до того, как какой-либо конечный пользователь когда-либо получит приложение. Для HotSpot кажется излишним повторный анализ этих шаблонов каждый при запуске приложения.   -  person Felix Bembrick    schedule 05.11.2013
comment
@FelixBembrick Вся логика: в этом случае это может быть легко, а в этом случае может быть легко, именно это и усложняет задачу. Как человек, вы часто можете легко заметить эти вещи. Однако компьютерам часто приходится работать в целом. Вы не можете просто написать гигантские операторы if, проверяя разные случаи и анализируя, действительно ли это один из таких случаев. Однако во время компиляции он делает все возможное, чтобы, по крайней мере, сделать байт-код настолько эффективным, насколько это возможно.   -  person Cruncher    schedule 05.11.2013


Ответы (1)


Для приложения не существует «типичного шаблона использования», особенно когда речь идет о приложении Java. Он может работать под Windows, Linux, MacOS, Solaris и т. Д. Среда выполнения не только полностью меняет поведение кода, но и решает, какие классы будут существовать во время выполнения.

Например, приложение с графическим пользовательским интерфейсом будет загружать различные классы реализации AWT под Windows, Linux или MacOS. Но даже простое свойство формата пикселей дисплея (RGB против BGR, 16 бит против 24 бит) приведет к тому, что приложение будет использовать разные пути кода. И выпускаются новые версии JRE, которые постоянно улучшают код классов JFC, тем самым изменяя поведение во время выполнения, делая любые предварительно вычисленные данные профилирования бесполезными.

Типичная ошибка думать, что тестирования и тестирования на компьютере разработчика достаточно, чтобы что-то сказать о реальной производственной среде. То, что может показаться достаточным, может оказаться совершенно непригодным для использования при работе с миллиардами одновременных транзакций или, с другой стороны, на ПК клиента с половиной ОЗУ.

Одна из сильных сторон Java - возможность профилировать и оптимизировать реальное поведение и схему использования программного обеспечения, а также выполнять оптимизацию за пределами границ библиотек от разных поставщиков, используя точные версии, найденные во время выполнения.

person Holger    schedule 18.11.2013