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

Java JMH基准测试-比较替代实现的运行时的简明方法,java,optimization,benchmarking,microbenchmark,jmh,Java,Optimization,Benchmarking,Microbenchmark,Jmh,我有两个相同自定义类的实现: private List<String> a = Util.myCustomClass(); private List<String> b = Util2.myCustomClass(); 我对大约25个不同的函数重复这个并行结构(由于两个实现,每个函数写两次)。我有没有办法只编写25个@Benchmark函数,让jmh为这两个实现运行每个函数?您可以使用@Param定义(严格地)要加载的类,并让它在@Setup方法中初始化要测试的类,如本

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

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

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

您可以使用
@Param
定义(严格地)要加载的类,并让它在
@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将在测试结果中包含一个“param”列,以便您知道哪个结果对应哪个值

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

var thing: CommonInterface = ""

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