OpenJDK JMH - Что значит использовать @Params в измерении? - PullRequest
0 голосов
/ 05 ноября 2018

Я новичок в JMH и пытаюсь понять, как @ Params применяются во время теста. Вот код, который я использую:

public class BenchmarkMapper
{

    @State (Scope.Benchmark)
    public static class ExecutionPlan
    {

        public Source source;
        public Mapper mapper;

        @Param (
        { "100", "1000", "10000", "100000", "1000000" })
        public int iterations;

        @Setup (Level.Invocation)
        public void setUp()
        {
            this.source = BenchmarkUtils.createSource();
            this.mapper = new Mapper();
        }
    }

    @Benchmark
    public Map<Integer, Object> testMap(ExecutionPlan plan)
    {
        Map<Integer, Object> resultMap = new HashMap<>();

        for (int index = plan.iterations; index > 0; index--)
        {
            resultMap.put(index, plan.mapper.map(plan.source));
        }

        return resultMap;
    }
}

После его запуска я увидел применяемые итерации параметров:

Parameter Iterations = 100,000

Parameter Iterations = 1,000,000

Итак, что влияет на тест, когда я использую эти @ Params ? Какая разница в использовании @ Params или @ Measurements аннотаций?

Заранее спасибо

Джеймс

1 Ответ

0 голосов
/ 07 ноября 2018

Как указано в JMH-примерах , аннотация @Params позволяет вам пробовать различные конфигурации через ваш тест. @Measurement аннотация позволяет вам установить настройки измерения для вашего эталона. Например, вы можете установить количество итераций в каждой развилке или установить единицу времени для своего теста с помощью аннотации @Measurement. Количество вычислений для вашего теста рассчитывается как forkNumber * measurementIterations * numberOfParams. Надеюсь, это поможет!

...