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數值越大則證明代碼更優
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章