JMH(java代码的微基准测试)入门和汇总

本文介绍了JMH,OpenJDK开发的微基准测试工具,用于精准测量代码性能,包括死码消除、常量优化,以及如何使用它进行热点函数优化、性能对比和并发测试。通过安装Idea插件,快速创建和运行基准测试,以及Maven依赖配置。

JMH 即 Java Microbenchmark Harness,这是专门用于进行代码的微基准测试的一套工具 API。

JMH 由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发 。何谓 Micro Benchmark 呢? 简单地说就是在 method 层面上的 benchmark,精度可以精确到 微秒级

为什么需要 JMH

死码消除

所谓死码,是指注释的代码,不可达的代码块,可达但不被使用的代码等等 。

常量折叠与常量传播

常量折叠 (Constant folding) 是一个在编译时期简化常数的一个过程,常数在表示式中仅仅代表一个简单的数值,就像是整数 2,若是一个变数从未被修改也可作为常数,或者直接将一个变数被明确地被标注为常数,例如下面的描述:

JMH 的注意点

  • 测试前需要预热。
  • 防止无用代码进入测试方法中。
  • 并发测试。
  • 测试结果呈现。

应用场景

  1. 当你已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的效果进行定量的分析。
  2. 想定量地知道某个函数需要执行多长时间,以及执行时间和输入 n 的相关性
  3. 一个函数有两种不同实现(例如 JSON 序列化/反序列化有 Jackson 和 Gson 实现),不知道哪种实现性能更好

安装JMH Idea 插件

  • image-20210611221425965

  • 重启就可

一、帮助你创建@Benchmark方法,可以右键点击 Generate... 来触发,也可以使用快捷键 ctrl+N 或Mac(command + N)

  • image-20210611221824611

二、可以让你像Junit一样方便的来进行基准测试,不需要写main方法。点击某个@Benchmark方法名右键run就只会进行光标所在方法的基准测试,而如果光标在类名上,右键run的就是整个类的所有基准测试。

  • image-20210611221953888

引用Maven依赖

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

自己写示例

参考文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值