众所周知,在JMH基准测试中使用循环并不是一个好主意,因为它将由JIT编译器进行优化,因此应该避免使用。有没有办法使用不同的int
输入值(输入列表)来提供我的JMH基准测试方法而不使用循环。
答案 0 :(得分:11)
看看this example in the JMH documentation。您可以在字段上使用@Param
注释,以告诉JMH注入此注释的值:
@Param({"1", "2"})
public int arg;
@Benchmark
public int doBenchmark() {
return doSomethingWith(arg);
}
然后针对值1
和2
运行基准。
请注意,如果带注释的字段不是String
而是基元,则会在分配之前解析这些值,并以转换后的形式进行分配。如果您有多个带@Param
注释的字段,JMH将使用字段值的任何可能排列运行基准。
您还可以在定义JMH跑步者时覆盖值赋值。