2

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

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 为这两个实现运行每个函数?

4

1 回答 1

1

您可以使用定义(字符串)要加载的类并让它在方法@Param中初始化被测类,如本示例中所述: https ://github.com/ktoso/sbt-jmh/blob/master /src/sbt-test/sbt-jmh/jmh-run/src/main/scala/org/openjdk/jmh/samples/JMHSample_27_Params.scala@Setup

在本质上

@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 将在测试结果中包含一个“参数”列,以便您知道哪个结果对应哪个值。

于 2015-03-02T09:11:24.077 回答