JMH基本概念和配置
1、模式(Mode)
Mode表示JMH的测量方式和角度,共有四种。
- Throughput:整体吞吐量,表示1秒内可以执行多少次调用。
- AverageTime:调用的平均时间,表示每一次调用所需要的时间。
- SampleTime:随机取样,最后输出随机取样结果的分布。
- SingleShotTime:以上模式都是默认一次Iteration是一秒,唯有SingleShotTime只运行一次。往往同时把warmup设置为0,用于测试程序的冷启动性能。
2、迭代(Iteration)
迭代是JMH的一次测量单位。在大部分测试模式下,一次迭代表示1秒,在这1秒内会不间断的调用被测方法,并采样计算吞吐量、平均时间等。
3、预热(Warmup)
由于Java虚拟机JIt的存在,同一个方法在JIT编译前后的时间将会不同。通常只考虑方法在JIt编译之后的性能。
4、状态(State)
通过State可以指定一个对象的作用范围。范围主要有两种,一种为线程范围,也就是一个对象只会被一个线程访问。在多线程进行测试时,会为每一个线程生成一个对象。另一种是基准测试范围(BenchMark),即多个线程共享一个实例。
5、配置类
Options opt = new OptionsBuilder().include(TestMap_JMH.class.getSimpleName())
.forks(2).build();
try {
new Runner(opt).run();
} catch (RunnerException e) {
e.printStackTrace();
}
首先对测试进行配置,需要指定一些参数,比如指定测试类(include)、使用的进程个数(forks)、预热迭代次数(warmupForks),在配置启动测试时,
需要使用配置类。