JMH 基础
Java Microbenchmark Harness 用于代码微基准测试的工具套件,主要是基于方法层面的基准测试,精度可以达到纳秒级
可以规避JVM中的JIT 或者其他优化对性能测试造成的影响.JIT(just in time comlilation) 某段代码第一次执行时进行编译,编译成机器码 提高执行速度
当你定位到热点方法,希望进一步优化方法性能的时候,就可以使用 JMH 对优化的结果进行量化的分析
注解:
- @Benchmark 注解需要测试性能的类 或 方法
- @BenchmarkMode({Mode.xxx}) 配置基准测试模式
- 可选模式有
- Throughput 整体吞吐量 ops/time
- AverageTime 平均时间 time/op
- SampleTime 随机取样
- SingleShotTime 只运行一次 且Warmup为0 常用于测试冷启动性能
- ALL 上面所有模式都执行一次
- @State(Scope.xxx)
- 指定对象作用范围
- Benchmark 测试线程共享一个实例 测试多线程共享下的性能
- Group 组内共享
- Thread 默认状态 每个测试线程分配一个实例
- @OutputTimeUnit 统计时间单位
- @Warmup 预热次数 itrations,time,timeUnit,batchSize
- @Measurement 实际调用时的基本参数
- @Thread 每个进程中的测试线程
- @Fork fork的进程数量
- @Param 指定某参数的多种情况
- @Setup 执行benchmark前执行 用于初始化
- @TearDown 执行benchmark后执行 用于资源回收