Java基准测试套件 - JMH

JMH是java程序的基准测试套件。

工作原理

开发者使用@Benchmark注解,标识测试对象,JMH根据注解,生成特定基准测试代码。

@Benchmark标记的方法,被看作是基准的“有效负载”,即测试目标。

工作方式

测试对象

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异常处理