众所周知,在JMH基准测试中使用循环并不是一个好主意,因为它将被JIT编译器优化,因此应该避免使用。有没有一种方法可以在不使用循环的情况下向我的JMH基准测试方法提供不同值的int输入(输入列表)呢?
看一下JMH文档中的这个例子。您可以在字段上使用@Param
注释,以告诉JMH注入此注释的值:
@Param({"1", "2"})
public int arg;
@Benchmark
public int doBenchmark() {
return doSomethingWith(arg);
}
然后对值1
和2
运行基准测试。
请注意,如果注释字段不是String
而是原始类型,则在分配之前解析这些值,并以它们的转换形式分配它们。如果您有多个带有@Param
注释的字段,则JMH将使用任何可能的字段值排列方式运行基准测试。
在定义JMH运行器时,您还可以覆盖值分配。
@TearDown(Level.Iteration)
中移动这个计数器。 - Imaskar