Я использую базовую платформу JMH (http://openjdk.java.net/projects/code-tools/jmh/) для запуска тестов в моем коде. Я понимаю, что JMH несколько раз разворачивает JVM во время бенчмаркинга, чтобы отбросить любые профили, созданные с помощью профилирования JIT, выполняемого JVM во время выполнения.
Я понимаю, почему это полезно в некоторых случаях, таких как ниже (скопированный дословно из http://java-performance.info/jmh/):
По умолчанию JHM создает новый процесс java для каждого процесса (набор итераций). Это необходимо для защиты теста от ранее собранных "профилей" - информации о других загруженных классах и их информации об исполнении. Например, если у вас есть 2 класса, реализующих один и тот же интерфейс, и проверьте производительность обоих из них, то первая реализация (в порядке тестирования), вероятно, будет быстрее второй (в той же JVM), потому что JIT заменяет прямые вызовы метода для первой реализации с вызовами метода интерфейса после обнаружения второй реализации.
Однако в случае, когда вы сравниваете один и тот же код, есть ли какое-либо преимущество для запуска, скажем, 10 вилок из 20 итераций каждый вместо 1 вилки с 200 итерациями?
Большое спасибо,
Дэнни