JWH-基准测试使用

JWH测试

  • 这是专门用于进行代码的微基准测试的一套工具API
  • 使用场景:
    1 已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的效果进行定量的分析。
    2 想定量地知道某个函数需要执行多长时间,以及执行时间和输入 n 的相关性
    3 一个函数有两种不同实现(例如JSON序列化/反序列化有Jackson和Gson实现),不知道哪种实现性能更好
  • 基准测试pom依赖
  <dependency>
         <groupId>org.openjdk.jmh</groupId>
         <artifactId>jmh-core</artifactId>
         <version>1.21</version>
    </dependency>
    <dependency>
         <groupId>org.openjdk.jmh</groupId>
         <artifactId>jmh-generator-annprocess</artifactId>
         <version>1.21</version>
         <scope>provided</scope>
    </dependency>
  • 用法案例
package com.jwhtest;

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;

/**
 * @Author: zxx
 * @Date: 2020/3/18 21:02
 * @Description: JWH测试
 */
public class JwhTest {

    public static void main(String[] args) throws RunnerException {
    //`warmupIterations 预热
    //`measurementIterations 正式计量测试
    //fork 测试几轮
        Options options = new OptionsBuilder().warmupIterations(2).`measurementIterations(10)
                .forks(3).build();

        new Runner(options).run();
    }
    
    //通过使用@Benchmark注释所要测试的类
    @Benchmark
    public void testStringAdd1(){
        String str = "";
        for (int i=0; i<10; i++){
            str+=i;
        }
    }
    @Benchmark
    public void testStringAdd2(){
        StringBuilder b = new StringBuilder();
        for (int i=0; i<10; i++){
            b.append(i);
        }
        b.toString();
    }


}

  • 运行结果
    ops数值越大则证明代码更优
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章