29 | 基准测试框架JMH(下)
郑雨迪
该思维导图由 AI 生成,仅供参考
今天我们来继续学习基准测试框架 JMH。
@Fork 和 @BenchmarkMode
在上一篇的末尾,我们已经运行过由 JMH 项目编译生成的 jar 包了。下面是它的输出结果:
在上面这段输出中,我们暂且忽略最开始的 Warning 以及打印出来的配置信息,直接看接下来貌似重复的五段输出。
你应该已经留意到Fork: 1 of 5的字样。这里指的是 JMH 会 Fork 出一个新的 Java 虚拟机,来运行性能基准测试。
之所以另外启动一个 Java 虚拟机进行性能基准测试,是为了获得一个相对干净的虚拟机环境。
在介绍反射的那篇文章中,我就已经演示过因为类型 profile 被污染,而导致无法内联的情况。使用新的虚拟机,将极大地降低被上述情况干扰的可能性,从而保证更加精确的性能数据。
在介绍虚方法内联的那篇文章中,我讲解过基于类层次分析的完全内联。新启动的 Java 虚拟机,其加载的与测试无关的抽象类子类或接口实现相对较少。因此,具体是否进行完全内联将交由开发人员来决定。
关于这种情况,JMH 提供了一个性能测试案例[1]。如果你感兴趣的话,可以下载下来自己跑一遍。
除了对即时编译器的影响之外,Fork 出新的 Java 虚拟机还会提升性能数据的准确度。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
JMH基准测试框架是一个重要的性能测试工具,本文介绍了其核心概念和使用方法。首先,通过Fork创建干净的虚拟机环境以确保性能数据准确性。文章还讲解了预热迭代和测试迭代的区别,以及如何配置迭代次数和持续时间。另外,提到了吞吐量和平均时间等不同格式的性能数据输出方式。文章还介绍了@State、@Setup和@TearDown注解的使用方法,以及即时编译相关功能和实践建议。总的来说,本文通过实际代码和输出结果的解释,帮助读者了解了JMH基准测试框架的核心概念和使用方法,为他们进行性能测试提供了指导和参考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Java 虚拟机》,新⼈⾸单¥59
《深入拆解 Java 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- 永烁星光老师 @State注解 这个程序状态类 实在没有看懂,其用处在于什么?2018-10-122
- the geek看网上其他文章,都是说@State注解是用来设置标注类的实例范围。性能测试类由JMH管理,和spring的@Scope注解相似。2020-02-10
- 随心而至动手做一遍,感受会更深些2019-10-29
- cras需要那些基础知识才听得懂老师的内容?2019-09-081
- neohope建议老师给一个更贴合生产环境的例子,比如用JMH测试SpringBoot RestController的性能,可能效果会更好一些?2019-09-07
- HELSING郑老师,能不能介绍一下,为什么ZGC会快那么多啊2018-09-26
收起评论