JMH 即 Java Microbenchmark Harness,这是专门用于进行代码的微基准测试的一套工具 API。

JMH 由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发 。何谓 Micro Benchmark 呢? 简单地说就是在 method 层面上的 benchmark,精度可以精确到 微秒级

为什么需要 JMH

死码消除

所谓死码,是指注释的代码,不可达的代码块,可达但不被使用的代码等等 。

常量折叠与常量传播

常量折叠 (Constant folding) 是一个在编译时期简化常数的一个过程,常数在表示式中仅仅代表一个简单的数值,就像是整数 2,若是一个变数从未被修改也可作为常数,或者直接将一个变数被明确地被标注为常数,例如下面的描述:

JMH 的注意点

  • 测试前需要预热。
  • 防止无用代码进入测试方法中。
  • 并发测试。
  • 测试结果呈现。

应用场景

  1. 当你已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的效果进行定量的分析。
  2. 想定量地知道某个函数需要执行多长时间,以及执行时间和输入 n 的相关性
  3. 一个函数有两种不同实现(例如 JSON 序列化/反序列化有 Jackson 和 Gson 实现),不知道哪种实现性能更好

安装JMH Idea 插件

  • 重启就可

一、帮助你创建@Benchmark方法,可以右键点击 Generate... 来触发,也可以使用快捷键 ctrl+N 或Mac(command + N)

二、可以让你像Junit一样方便的来进行基准测试,不需要写main方法。点击某个@Benchmark方法名右键run就只会进行光标所在方法的基准测试,而如果光标在类名上,右键run的就是整个类的所有基准测试。

引用Maven依赖

 <dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-core</artifactId><version>1.32</version></dependency><dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-generator-annprocess</artifactId><version>1.32</version></dependency>

自己写示例

  • jmh-learning 示例

参考文档

  • JMH–一款由OpenJDK开发的基准测试工具

  • 强烈推荐这篇:使用JMH做基准测试

  • JMH Unable to find the resource: /META-INF/BenchmarkList

  • JMH microbenchmark

  • JMH idea 插件

  • JMH github 源码

  • JMH官方的示例代码

JMH(java代码的微基准测试)入门和汇总相关推荐

  1. PMD【 Java 代码检查工具】入门使用教程(超详细)

    PMD[ Java 代码检查工具] 介绍 使用方式 1.使用插件的方式 2.maven项目引入依赖的方式 3.pmd 命令行的方式 4.Java API的方式 * 项目结构 测试代码 pmdArgs方 ...

  2. java测试性能代码_关于性能:Java代码内部的基准测试

    我最近一直在研究基准测试,我一直对记录程序数据等感兴趣.我想知道我们是否可以在程序中有效地实现自己的内存使用代码和实现自己的时间消耗代码.我知道如何检查代码运行所需的时间: public static ...

  3. Java代码分析器(一): JDT入门

    这是一个关于抽象语法树(Abstract Syntax Tree, AST)的故事. 抽象语法树是对程序代码的结构化表示,是对代码进行词法分析.语法分析后得到的产物.编译器要用到它,很多生产力工具也要 ...

  4. 文本特征选择 java代码_文本分类入门(十)特征选择算法之开方检验

    前文提到过,除了分类算法以外,为分类文本作处理的特征提取算法也对最终效果有巨大影响,而特征提取算法又分为特征选择和特征抽取两大类,其中特征选择算法有互信息,文档频率,信息增益,开方检验等等十数种,这次 ...

  5. Java微基准测试框架JMH

    本文转自:https://www.xncoding.com/2018/01/07/java/jmh.html 作者:XiongNeng JMH,即Java Microbenchmark Harness ...

  6. java基准测试_微基准测试进入Java 9

    java基准测试 我已经几个月没有在这里写文章了,这种例外还会继续. 我计划在明年三月左右恢复写作. 本文末尾的说明. 等待! 不完全是最后,因为您可以向下滚动. 它在文章结尾处. 继续阅读! 三年前 ...

  7. 微基准测试进入Java 9

    我已经几个月没有在这里写文章了,这种例外也会继续下去. 我计划在明年三月左右恢复写作. 本文末尾的说明. 等待! 不完全是最后,因为您可以向下滚动. 它在文章结尾处. 继续阅读! 三年前,我在写有关J ...

  8. 基准测试神器 - JMH [ Java Microbenchmark Harness ]

    Table of Contents 一. 简介 二. 安装 [ idea plug ] 三. 注解 @Benchmark @Warmup @Measurement @BenchmarkMode @Ou ...

  9. JMH(Java Microbenchmark Harness) Java微基准测试

    官网:OpenJDK: jmh 什么是JMH?微基准测试,他是测的某一个方法的性能到底是好或者不好,换了方法的实现之后他的性能到底好还是不好 创建JMH测试 创建Maven项目,添加依赖,我们需要添加 ...

  10. 使用JMH做Java微基准测试

    摘要: # 使用JMH做Java微基准测试 在使用Java编程过程中,我们对于一些代码调用的细节有多种编写方式,但是不确定它们性能时,往往采用重复多次计数的方式来解决.但是随着JVM不断的进化,随着代 ...

最新文章

  1. Python组合数据类型之序列类型
  2. 【windwos bat】批量把windows下的wav文件转为raw文件
  3. centos7修改服务器密码,centos7 上搭建MQTT服务器,修改密码,设置权限并进行测试。...
  4. java 正则表达式 demo_JAVA正则表达式语法
  5. leetcode 1723. 完成所有工作的最短时间(二分+剪枝+回溯)
  6. MyBatisPlus_更新篇_入门试炼_03
  7. C语言 指针和数组区别 - C语言零基础入门教程
  8. salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)...
  9. 《深入理解 Spring Cloud 与微服务构建》第七章 负载均衡 Ribbon
  10. java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder
  11. 【免费毕设】ASP.NET 网上选课系统的设计与实现(源代码+lunwen)
  12. 【To Do】LeetCode 142. Linked List Cycle II
  13. python colorama_Python常用模块—— Colorama模块
  14. 数据库备份还原,日志清理代码
  15. 32bit 天堂2脚本修改资料大全【客户端+服务端】
  16. 2022年更新正大杯获得国家二等奖经验优秀报告资料分享全国大学生市场调查与分析大赛市调大赛保研竞赛加分怎么找队友等全套经验分享
  17. 关于折叠屏手机的适配
  18. 超实用!XRD块状和粉末状样品的制备方法
  19. A870省电内核超频内核编译及制作
  20. 质因子分解算法c语言prime,分解质因数的算法

热门文章

  1. nfc加密卡pm3和pm5区别_为了省门禁卡的钱,买了NFC读卡器,到底值不值
  2. 世界和平 - 中国国际友好城市数据集
  3. Nginx跨域配置及配置文件加载过程讲解
  4. 如何将OFD文件转成Word?教你2种实用方法
  5. 前后端分离前端框架的主要内容是什么?
  6. 一文看懂三维建模到底是什么?
  7. 一、显示VOC2007数据集中的图像及标注信息
  8. Ubuntu 修改 谷歌输入法 简繁体切换的快捷键
  9. csr8675硬件支持蓝牙5.0还是4.2?5.0是不是后来软升级达到的效果?
  10. c# 调用浏览器打开页面