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数值越大则证明代码更优