OpenJDK JMH-在测量中使用@Params是什么意思?

时间:2018-11-05 13:18:43

标签: jmh

我是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 :(得分:1)

JMH examples中所述,<div class="container"> <div class="box" style="width: 40%;"> <div class="one" style="width: 100%;"> 1 </div> <div class="six" style="width: 100%;"> 6 </div> </div> <div class="box two"> 2 </div> <div class="box three"> 3 </div> <div class="box four"> 4 </div> <div class="box five"> 5 </div> </div>注释使您可以通过基准测试尝试不同的配置。 @Params注释使您可以为基准设置基于测量的设置。例如,您可以在每个fork中设置迭代次数,也可以使用@Measurement注释设置基准的时间单位。基准测试的计算次数计算为@Measurement。希望对您有所帮助!