Разминка JVM для запуска Scalabench

Я хотел бы иметь Java-приложение, которое запускает различные тесты Scalabench. Я хотел бы убедиться, что JVM прогрета, прежде чем я начну измерять, как долго работает тест. Как мне запустить эти тесты из моего Java-приложения?

Первое, что пришло мне в голову - это выполнить банку Скалабенха внутри цикла for, используя

Process proc = Runtime.getRuntime().exec("java -jar scalabench.jar testname");

Но я не думаю, что это поможет JVM прогреться, потому что я думаю, что JVM будет загружать jar в каждой итерации цикла for.

Следующая возможность - добавить scalabench.jar как зависимость от моего проекта, и назвать его main() метод в цикле for для запуска теста. Я думаю, что в этом случае прогрев JVM не должен быть проблемой, потому что он работает внутри моего приложения и не будет уничтожен после каждой итерации.

Бонус: могу ли я использовать JMH для измерения тестов из Scalabench?

1 ответ

Аналогия с "разогревом JVM" неверна в том смысле, что это не единственная сущность, которую вы доводите до однородной температуры. Это называется горячей точкой JVM по причине.

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

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

Для микробенчмарков это может быть недостаточно (объяснено в различных других вопросах) из-за дополнительных сложностей, таких как порядок эталонных тестов в JVM, влияющих на оптимизацию, что приводит к путанице в результатах. JMH стремится их решить.

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