JMH基准测试套件

JMH是针对Java程序的基准测试套件,由每个版本的JDK自带。

JMH工作原理

开发者使用@Benchmark注解,标识测试对象,JMH根据注解,生成特定的基准测试代码。对JMH来说,@Benchmark标记的方法,被看作是基准的“有效负载”,即测试目标。

JMH工作方式

测试对象

public class Main {
    
    @Benchmark
    public void empty() {
        //todo
    }
}

运行测试

public static void main(String[] args) throws RunnerException {
    Options opt = new OptionsBuilder().include(Main.class.getSimpleName()).forks(1).build();
    new Runner(opt).run();

}

以上是JMH基准测试最简示例。

依赖项

<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-core</artifactId>
    <version>1.11.2</version>
</dependency>
<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-generator-annprocess</artifactId>
    <version>1.11.2</version>
</dependency>

完整示例托管在github上。

示例说明

Benchmark     Mode  Cnt         Score        Error   Units Main.and     thrpt   10   6226272.557 ±  30481.573  ops/ms Main.append  thrpt   10     13244.970 ±     64.521  ops/ms Main.empty   thrpt   10  12374236.900 ± 766829.412  ops/ms Main.multi   thrpt   10   5910340.633 ± 216542.045  ops/ms Main.plus    thrpt   10      3731.866 ±    121.945  ops/ms

以上是示例程序运行结果,第4列是测试的关键结果,因为,测试类型是吞吐量(@BenchmarkMode(Mode.Throughput)),值越大说明方法的效率越高。测试结果偏差值,为(±)后的数值。

异常处理

运行时如果出现异常,参考JMH异常处理