Java基准测试 — JMH

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2018/03/16/java-jmh/

JVM为了让Java代码更好更快的运行,做出了大量的改进和优化。虽然各种外部环境的变化让我们不再需要关注每一行代码的性能,但是也难免有需要自己衡量代码性能的时候。

OpenJDK提供了JMH工具可以科学量化性能。

对于一个已有的项目(比如Gradle项目),要使用JMH,首先要引入依赖

compile group: 'org.openjdk.jmh', name: 'jmh-core', version: '1.20'
compile group: 'org.openjdk.jmh', name: 'jmh-generator-annprocess', version: '1.20'

在IDE中enable annprocess,然后新建类

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;

public class App {

    @Benchmark
    public void method() {

    }

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

        new Runner(opt).run();
    }
}

直接运行main方法就可以了

JMH还支持Setup等预处理,还有分线程的State,具体的配置可以参考文档。

JMH另外一个比较重要的就是输出文件的分析,在配置中指定output就可以保存为json格式。然后借助一些分析工具,比如http://jmh.morethan.io/

Options opt = new OptionsBuilder()
                .include(App.class.getSimpleName())
                .forks(1)
                .resultFormat(ResultFormatType.JSON)
                .result("file")
                .build();

图表如下:

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2018/03/16/java-jmh/

发表评论