JMH 即 Java Microbenchmark Harness,这是专门用于进行代码的微基准测试的一套工具 API。
JMH 由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发 。何谓 Micro Benchmark 呢? 简单地说就是在 method 层面上的 benchmark,精度可以精确到 微秒级。
为什么需要 JMH
死码消除
所谓死码,是指注释的代码,不可达的代码块,可达但不被使用的代码等等 。
常量折叠与常量传播
常量折叠 (Constant folding) 是一个在编译时期简化常数的一个过程,常数在表示式中仅仅代表一个简单的数值,就像是整数 2,若是一个变数从未被修改也可作为常数,或者直接将一个变数被明确地被标注为常数,例如下面的描述:
JMH 的注意点
- 测试前需要预热。
- 防止无用代码进入测试方法中。
- 并发测试。
- 测试结果呈现。
应用场景
- 当你已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的效果进行定量的分析。
- 想定量地知道某个函数需要执行多长时间,以及执行时间和输入 n 的相关性
- 一个函数有两种不同实现(例如 JSON 序列化/反序列化有 Jackson 和 Gson 实现),不知道哪种实现性能更好
安装JMH Idea 插件
-

-
重启就可
一、帮助你创建@Benchmark方法,可以右键点击 Generate... 来触发,也可以使用快捷键 ctrl+N 或Mac(command + N)
二、可以让你像Junit一样方便的来进行基准测试,不需要写main方法。点击某个@Benchmark方法名右键run就只会进行光标所在方法的基准测试,而如果光标在类名上,右键run的就是整个类的所有基准测试。
引用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>
本文介绍了JMH,OpenJDK开发的微基准测试工具,用于精准测量代码性能,包括死码消除、常量优化,以及如何使用它进行热点函数优化、性能对比和并发测试。通过安装Idea插件,快速创建和运行基准测试,以及Maven依赖配置。


542

被折叠的 条评论
为什么被折叠?



