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

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

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

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

1 ответ

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

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

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

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

Другие вопросы по тегам