我正在尝试在一个年级项目中运行 jmh 基准测试。
./gradlew :sub-project:jmh
我可以看到设置方法从标准输出执行了两次。但这两个@Benchmark方法似乎没有被执行。 jmh 报告文件 (.../build/reports/jmh/results/index.html) 也是空的。
这是简化的代码片段。
@Fork(1)
@State(Scope.Benchmark)
@Warmup(iterations = 3)
@Measurement(iterations = 5)
@BenchmarkMode(Mode.SingleShotTime)
public class MyBenchmark {
@Setup
public void setupBenchmark() {
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
// ...
}
@TearDown
public void tearDownBenchmark() throws IOException {}
@Benchmark
@Threads(1)
public void testFoo(Blackhole blackhole) {
System.out.println("foooooooooooooooooooooooo");
blackhole.consume(1);
}
@Benchmark
@Threads(1)
public void testRealBenchmark(Blackhole blackhole) {
System.out.println("==============================");
// ...
blackhole.consume(results);
}
}
期望使用 stdout 和 jmh 报告执行两个 @Benchmark 方法。
Gradle 设置应该没问题,因为其他 jmh 为其他子项目运行。 @Setup方法也是基于stdout执行的。
事实证明这是一个错误。安装方法无提示地失败,并且等级运行的标准输出中未显示异常。这就是基准测试方法没有执行的原因。