忆梦|Java JMH 基准测试工具( 四 )
Warmup 是指在实际进行 benchmark 前先进行预热的行为 。 为什么需要预热?因为 JVM 的 JIT 机制的存在 , 如果某个函数被调用多次之后 , JVM 会尝试将其编译成为机器码从而提高执行速度 。 为了让 benchmark 的结果更加接近真实情况就需要进行预热 。
3.3 @State类注解 , JMH测试类必须使用@State注解 , State定义了一个类实例的生命周期 , 可以类比Spring Bean的Scope 。
由于JMH允许多线程同时执行测试 , 不同的选项含义如下:
- Scope.Thread:默认的State , 每个测试线程分配一个实例;
- Scope.Benchmark:所有测试线程共享一个实例 , 用于测试有状态实例在多线程共享下的性能;
- Scope.Group:每个线程组共享一个实例; ##### 3.4 @OutputTimeUnit 用来配置benchmark 结果所使用的时间单位 , 可用于类或者方法注解 , 使用java.util.concurrent.TimeUnit中的标准时间单位 。
TimeUnit.DAYS//天TimeUnit.HOURS//小时TimeUnit.MINUTES//分钟TimeUnit.SECONDS//秒TimeUnit.MILLISECONDS//毫秒 TimeUnit.NANOSECONDS//毫微秒 纳秒TimeUnit.MICROSECONDS//微秒3.5 其他@Benchmark方法注解 , 表示该方法是需要进行 benchmark 的对象 。
@Setup
方法注解 , 会在执行 benchmark 之前被执行 , 正如其名 , 主要用于初始化 。
@TearDown
方法注解 , 与@Setup 相对的 , 会在所有 benchmark 执行结束以后执行 , 主要用于资源的回收等 。
@Param
成员注解 , 可以用来指定某项参数的多种情况 。 特别适合用来测试一个函数在不同的参数输入的情况下的性能 。 @Param注解接收一个String数组 , 在@setup方法执行前转化为为对应的数据类型 。 多个@Param注解的成员之间是乘积关系 , 譬如有两个用@Param注解的字段 , 第一个有5个值 , 第二个字段有2个值 , 那么每个测试方法会跑5*2=10次 。
推荐阅读
- Java|淘宝商家要小心了!取消的“中差评”体系又回来啦!
- javascript|游戏开发之旅-JavaScript重新介绍
- Java|java多线程并发小demo
- Java|java程序猿如何才能走远,怎么做自己的职业规划
- 蚂蚁花呗|血亏!阿里P8轻易把总结了近一年的java高级特性笔记送人了
- 百度|Java高级进阶多线程学习之路(七)ThreadLocal
- javascript|家里宽带是300M的,但是实际测速才2M应该这样维权。
- 社交|十一国庆过后,秋招Java岗,陆续收到字节/招银等offer
- Java|Java面试之基础问题答案口述整理
- 忆梦微信发视频还能添加文字?原来方法这么简单,手把手教你学会
