JMH(Java Microbenchmark Harness)是一个Micro Benchmark Framework(微基准测试框架),一个java工具,可以简单的理解成method层面的benchmark测试,可以精确到微秒级。不仅可以测试java代码还可以测试其他jvm上的程序
简单地说,基准测试是针对系统设计的一种压力测试。真正的性能都不能通过估计的方式来进行优化的,必须要有专业的测试工具,全面、仔细、专业的展示被测试代码的性能。
其中就是要被测试性能的方法,main调用JMHapi来进行性能测试。
2.2.1 @BenchmarkMode(Mode.AverageTime)
其中声明要测试的类型,该注解可以作用在方法上、类上支持如下(定义于: )
- Throughput吞吐量
- Average Time 平均时间
- Sample Time 抽样统计时间(包括最大最小等)
- Single Shot Time 单发时间(常用于冷启动)
- All 所有的指标
2.2.2 @OutputTimeUnit(TimeUnit.MICROSECONDS)
以指定单位打印BenchMark测试结果。支持单位如下
- NANOSECONDS 纳秒
- MICROSECONDS 微秒
- MILLISECONDS 毫秒
- SECONDS 几秒钟
- MINUTES 分钟
- HOURS 时间
- DAYS 天数
2.2.3 @State(Scope.Thread)
用于关联一些BenchMark测试需要的变量,如下代码举例:
向JHM框架表名这是一个state类。被@State注解注上的类有如下约束:
- 类必须是public
- 如果是静态的话还必须是static的
- 类必须有一个无参构造函数
2.2.4 @Benchmark
类似与在Junit框架里的作用。
2.2.5 @SetUp
方法级注解,这个注解的作用就是我们需要在测试之前进行一些准备工作,比如对一些数据的初始化之类的。类似与Junit的
2.2.6 @TearDown
方法级注解,这个注解的作用就是我们需要在测试之后进行一些结束工作,比如关闭线程池,数据库连接等的,主要用于资源的回收等。类似junit的
- 一般不要在循环里使用JHM,必须非预期的JVM循环优化
- 避免常数优化,参考这里
- 没有代码调用的代码块会被JVM忽略,甚至都不执行,例如:
- JMH idea 插件
- JMH代码示例大全
- JMH github
- JMH - Java Microbenchmark Harness
- Java 并发编程笔记:JMH 性能测试框架
- Java微基准测试框架JMH
- 为什么需要基准测试
响应式编程
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/15980.html