JMH基准测试

开发小工具-JMH基准测试


我们在写代码的时候经常有这种怀疑:写法A快还是写法B快?哪个写法性能更好,效率更高。

在开发过程中常常需要对方法性能做测定,JMH是一个轻量级压测框架,适合开发简单做方法性能的测试。

JMH和jMeter的使用场景还是有很大的不同的,jMeter更多的是对rest api进行压测,而JMH关注的粒度更细,它更多的是发现某块性能槽点代码,然后对优化方案进行基准测试对比。

注意:JMH适合细粒度的方法测试,并不适用于系统之间的链路测试!

越复杂,结果越不可靠(more complex and the results are less reliable)

但是,简单的方法性能测试岂不好用。所以我的定位是,轻量级的方法性能测试工具。


目录

开发小工具-JMH基准测试

一、JMH基准测试介绍

1、什么是 JMH

2、为什么要使用 JMH

二、入门demo使用

1、maven引用

2、测试demo示例

3、执行结果

 


一、JMH基准测试介绍

1、什么是 JMH

        JMH 是 Java Microbenchmark Harness 的缩写。中文意思大致是 “JAVA 微基准测试套件”。

       首先先明白什么是“基准测试”。

百度百科给的定义如下:

        基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。

        可以简单的类比成我们电脑常用的鲁大师,或者手机常用的跑分软件安兔兔之类的性能检测软件。都是按一定的基准或者在特定条件下去测试某一对象的的性能,比如显卡、IO、CPU之类的。

2、为什么要使用 JMH

基准测试的特质有如下几种:

①、可重复性:可进行重复性的测试,这样做有利于比较每次的测试结果,得到性能结果的长期变化趋势,为系统调优和上线前的容量规划做参考。

②、可观测性:通过全方位的监控(包括测试开始到结束,执行机、服务器、数据库),及时了解和分析测试过程发生了什么。

③、可展示性:相关人员可以直观明了的了解测试结果(web界面、仪表盘、折线图树状图等形式)。

④、真实性:测试的结果反映了客户体验到的真实的情况(真实准确的业务场景+与生产一致的配置+合理正确的测试方法)。

⑤、可执行性:相关人员可以快速的进行测试验证修改调优(可定位可分析)。

          可见要做一次符合特质的基准测试,是很繁琐也很困难的。外界因素很容易影响到最终的测试结果。特别对于 JAVA的基准测试。

我觉得,主要还是比较轻量级,开发方便使用,maven引入,添加注解,测试执行结果了然。

二、入门demo使用

1、maven引用

jdk9以上自带

<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-core</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-generator-annprocess</artifactId>
    <version>1.19</version>
</dependency>

2、测试demo示例

    (1)测试类注解 

@State(Scope.Benchmark)

     (2)方法注解

@Benchmark

      (3)编写执行main

 /**
     * 用来做简单的基准测试JMH--班级查询慢20200107
     *
     * @param args
     */
    public static void main(String[] args) throws RunnerException {
   /*
   关键参数分析
    1 warmupIterations(10) 的意思是预热做10轮,
    2 measurementIterations(10) 代表正式计量测试做10轮,⽽每次都是先执⾏完预热再执⾏
    正式计量,内容都是调⽤标注了 @Benchmark 的代码
    3 forks(3) 指的是做3轮测试,因为⼀次测试⽆法有效的代表结果,所以通过3轮测试较为全
        ⾯的测试,⽽每⼀轮都是先预热,再正式计量
    */
        Options options = new OptionsBuilder().include(ApiTestController.class.getSimpleName()).warmupBatchSize(10).measurementIterations(10).forks(3).build();
        new Runner(options).run();

    }

3、执行结果

 

 


参考

 

Java 并发测试神器:基准测试神器-JMH

https://zhuanlan.zhihu.com/p/100574293

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值