Я недавно узнал о сценариях, которые требуют нагревания приложения (с требованием с высокой пропускной способностью), прежде чем они начнут служить реальным запросам. Логика позади этого должна была позволить JIT делать свое волшебство производительности!
Действительно ли это - норма для приложений Java, или это обычно делается для памяти, тяжелой (место) приложения?
Если вы говорите о веб-приложении/веб-сайте с высоким трафиком, то JIT - это очень незначительная проблема. Самой большой проблемой является разогрев (заполнение) всех слоев кэша, которые вам понадобятся. Например, ehcache регионы, которые заполняются из hibernate. Это потому, что операции, связанные с IO, на порядки медленнее, чем все, что происходит внутри процессора (если только вы не вычисляете фракталы :)
Вопрос в том, когда вы захотите изо всех сил сделать это?
Если вы развернете веб-приложение, и оно НЕМЕДЛЕННО работает, то, пока вы его "разогреваете", вы добавляете дополнительную нагрузку, что контрпродуктивно. То же самое верно и при запуске настольного приложения. Нет смысла греть, если пользователь собирается сразу его использовать. Или, что еще хуже, запретить пользователю взаимодействовать, пока вы разогреваете приложение.
Если вы развертываете веб-приложение и тестируете развертывание до того, как укажете на него свои балансировщики нагрузки, то в качестве побочного результата вы уже разогрели его.
В дополнение к ответу cherouvim , я могу подумать о нескольких других проблемах, требующих разминки:
Xms
меньше вашего Xmx
). Я полагаю, что ОС тоже настраивается на поведение приложения, так что на вызовы ОС также может повлиять период прогрева.
Большая часть вышеперечисленного (заполнение кеша, инициализация объекта) не относится к Java.