JMH基准测试 - 比较替代实现的运行时的简明方法

时间:2015-02-26 01:28:44

标签: java optimization benchmarking microbenchmark jmh

我有两个相同自定义类的实现:

private List<String> a = Util.myCustomClass();
private List<String> b = Util2.myCustomClass();

并希望比较每个函数的运行时(它们都具有相同的名称)。目前,我的基准测试看起来像:

@Benchmark
public boolean contains_val_a() {
   return a.contains(val);
}

@Benchmark
public boolean contains_val_b() {
  return b.contains(val);
}

我为25个左右的不同函数重复这个并行结构(由于两个实现,每次写入两次函数)。有没有办法让我只编写25个@Benchmark函数并让jmh为这两个实现运行每个函数?

1 个答案:

答案 0 :(得分:1)

您可以使用@Param来定义(字符串)要加载的类,并使用@Setup方法初始化测试中的类,如下例所示:{{3} }

本质上

@Param(Array("a", "b"))
val name: String = ""

var thing: CommonInterface = ""

@Setup
def setup(): Unit = name match {
  case "a" => new A
  case "b" => new B
}

然后JMH会在测试结果中包含一个“参数”列,以便您知道哪个结果是哪个值。