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

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

最佳答案

您可以使用 @Param 定义要加载的(字符串)类,并让它在 @Setup 方法中初始化正在测试的类,如下所示在此示例中: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”列,以便您知道哪个结果对应哪个值。

关于java - JMH 基准测试 - 比较替代实现的运行时间的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28732946/

相关文章:

java - 基于基准的最快/内存/大小高效的 Java 序列化框架是什么?

java - JMH 就像禁用方法内联 - 它是如何完成的?

java - String.replace 不工作

java - 如何为我的 Java 程序获得最佳视觉输出

不得已的性能优化策略

javascript - 给定一个大小为 N 乘以 N 的方阵。 计算两条主对 Angular 线总和的绝对差

c - 为什么字符串文字比静态字符数组更快?

java - Guice IoC 怎么样?

java - 使用正则表达式验证密码(包含字母和数字以及特殊字符)。{8,}

javascript - next.js:是否可以只为 google bot 和其他爬虫而不为用户做 SSR?