JMH Benchmarking - 比较替代实现运行时间的简洁方法
JMH Benchmarking - Concise way to compare runtime of alternate implementations
我有两个相同自定义的实现 class:
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 运行 每个函数用于两个实现?
您可以使用 @Param
定义(字符串)要加载的 classes 并让它在 @Setup
方法中初始化被测 class ,如本示例中所述: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
本质上
@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" 列,因此您知道哪个结果对应哪个值。
我有两个相同自定义的实现 class:
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 运行 每个函数用于两个实现?
您可以使用 @Param
定义(字符串)要加载的 classes 并让它在 @Setup
方法中初始化被测 class ,如本示例中所述: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
本质上
@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" 列,因此您知道哪个结果对应哪个值。