Java基準測試JMH

描述

本文描述JMH的用法。

示例

引入maven依賴

<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-core</artifactId>
    <version>1.22</version>
</dependency>
<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-generator-annprocess</artifactId>
    <version>1.22</version>
    <scope>provided</scope>
</dependency>

下面代碼測試了正常方法調用和反射調用平均耗時。

@BenchmarkMode(Mode.AverageTime)
@Warmup(iterations = 5, time = 1)
@Measurement(iterations = 5, time = 1)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
public class ReflectBenchMark {

    @Benchmark
    public Object reflect() {
        Baby baby = new Baby();

        Class<? extends Baby> aClass = baby.getClass();

        try {
            Method sayHello = aClass.getMethod("sayHello", null);

            Object invoke = sayHello.invoke(baby, null);

            return invoke;
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Benchmark
    public String methodNormal() {
        Baby baby = new Baby();
        return baby.sayHello();
    }


    public static void main(String[] args) throws RunnerException {

        Options options = new OptionsBuilder()
                .include(ReflectBenchMark.class.getSimpleName())
                .forks(1)
                .build();

        new Runner(options).run();

    }

}

輸出

...
Benchmark                      Mode  Cnt  Score    Error  Units
ReflectBenchMark.methodNormal  avgt    5  0.003 ±  0.001  us/op
ReflectBenchMark.reflect       avgt    5  0.176 ±  0.005  us/op
  • @BenchmarkMode
    測試類型:
    • Throughput:吞吐量,每個時間單位調用次數
    • AverageTime:平均時間,每次調用時間
    • SampleTime:
    • SingleShotTime:只運行一次,測試冷啟動
    • all
  • @Warmup
    預熱,iterations測試次數,time每次進行的時長,timeUnit時長單位
  • @Measurement
    實際執(zhí)行,參數和Warmup一致

引用

http://blog.dyngr.com/blog/2016/10/29/introduction-of-jmh/
https://www.xncoding.com/2018/01/07/java/jmh.html
http://tutorials.jenkov.com/java-performance/jmh.html
https://lexburner.github.io/java-jmh/
https://caorong.github.io/2017/08/22/jmh-usage/
http://openjdk.java.net/projects/code-tools/jmh/

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 今日體驗,思考2019年過去的半年里,真的經歷了太多太多!工作上并沒有太大的起色,雖然每天很忙,但是結果,滿意度并...
    王海博閱讀 227評論 0 0
  • 2019 年馬上就要開始了,我已經 33 了,記憶力從過目不忘變成了轉瞬即忘,為了給自己老了以后留下點念想,給兩個...
    Su_zhe閱讀 319評論 1 3
  • (三)隔墻有耳 同批考進單位的還有三個女孩兒,小縣城愿意考公回來的也大多是女孩兒。 有一天,大家無意中討論單位的一...
    李佐萌閱讀 268評論 0 1
  • 《前任3:再見前任》想要告訴我們的事兒很簡單: 要么勇敢一點,別那么輕易放棄,要么灑脫一些,跟過去好好告別。 影片...
    QD高壓鍋閱讀 203,325評論 7 49

友情鏈接更多精彩內容