1
Моя текущая настройка:Контролирует работы на одну итерацию JMH
public void launchBenchmark() throws Exception {
Options opt = new OptionsBuilder()
.include(this.getClass().getName())
.mode(Mode.Throughput) //Calculate number of operations in a time unit.
.mode(Mode.AverageTime) //Calculate an average running time per operation
.timeUnit(TimeUnit.MILLISECONDS)
.warmupIterations(1)
.measurementIterations(30)
.threads(Runtime.getRuntime().availableProcessors())
.forks(1)
.shouldFailOnError(true)
.shouldDoGC(true)
.build();
new Runner(opt).run();
}
Как я могу знать/управление (если это возможно) количество операций выполняется в тесте?
И важно ли устанавливать время и время измерения warmUp?
спасибо.
ааа я вижу. У вас есть хорошее предложение на время итерации? например если я знаю, что каждая операция будет стоить х времени. Тогда сколько времени я должен установить для каждой итерации? – Xitrum
Всё зависит от: С настройками по умолчанию JIT использует C1 для компиляции в native после 10k итераций и использует C2 после 30k. Таким образом, вы должны установить количество итераций и время итерации, достаточное для того, чтобы JIT скомпилировал все, используя компилятор C2, иначе ваш тест будет сообщать о неправильной статистике. Если вы установите слишком высокие значения, это будет пустой тратой времени, но никакого другого отрицательного эффекта. –
Также время итерации должно быть достаточно большим, чтобы компенсировать некоторый джиттер, но это снова зависит от продолжительности операции. Например, если сингл-эоперация занимает 100 мс, тогда вам потребуется время анизера на несколько секунд, но если потребуется наносекунда ->, то 100 мс будет более чем достаточно –