文章目录

  • 1 简介
  • 2 使用
    • 2.1 maven依赖
    • 2.2 实例代码
    • 2.3 输出结果
  • 3 参数说明
    • 3.1 测试模式

1 简介

jmh主要用于开发人员进行性能压测,代替手动编写相关程序。

官网:

http://openjdk.java.net/projects/code-tools/jmh/

JMH是一个Java工具,用于构建、运行和分析用Java和其他语言编写的针对JVM的nano/micro/milli/宏基准测试。

2 使用

2.1 maven依赖

<dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-core</artifactId><version>1.23</version>
</dependency>
<dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-generator-annprocess</artifactId><version>1.23</version><scope>test</scope>
</dependency>

2.2 实例代码

import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;import java.util.concurrent.TimeUnit;
//使用模式,默认是Mode.Throughput,表示吞吐量(AverageTime,表示每次执行时间,SampleTime表示采样时间,SingleShotTime表示只运行一次,用于测试冷启动消耗时间,All表示统计前面的所有指标)
@BenchmarkMode(Mode.Throughput)
//预热次数(预热2轮,每次1s)
@Warmup(iterations = 2, time = 1, timeUnit = TimeUnit.SECONDS)
//执行次数(运行3次,一次运行2秒)
@Measurement(iterations = 3, time = 2, timeUnit = TimeUnit.SECONDS)
//配置同时起多少个线程执行,默认值是Runtime.getRuntime().availableProcessors()
@Threads(1)
//启动多个单独的进程分别测试每个方法
@Fork(1)
//统计结果的时间单元
@OutputTimeUnit(TimeUnit.SECONDS)
public class MyBenchmark {//表示此方法需要进行测试@Benchmarkpublic static void test01(){String s="1"+"2"+"3"+"4";}@Benchmarkpublic static void test02(){String s=new StringBuffer("1").append("2").append("3").append("4").toString();}public static void main(String[] args) throws Exception{Options opt=new OptionsBuilder()//导入要测试的类.include(MyBenchmark.class.getSimpleName()).build();new Runner(opt).run();}
}

2.3 输出结果

# JMH version: 1.23
# VM version: JDK 1.8.0_121, Java HotSpot(TM) 64-Bit Server VM, 25.121-b13
# VM invoker: C:\Program Files\Java\jdk1.8.0_121\jre\bin\java.exe
# VM options: -javaagent:C:\work\software\IntelliJ IDEA 2019.2.3\lib\idea_rt.jar=53609:C:\work\software\IntelliJ IDEA 2019.2.3\bin -Dfile.encoding=UTF-8
# Warmup: 2 iterations, 1 s each
# Measurement: 3 iterations, 2 s each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: com.test.jmh.MyBenchmark.test01# Run progress: 0.00% complete, ETA 00:00:16
# Fork: 1 of 1
# Warmup Iteration   1: 1668396652.659 ops/s
# Warmup Iteration   2: 1909507594.198 ops/s
Iteration   1: 1857680113.235 ops/s
Iteration   2: 1928208879.048 ops/s
Iteration   3: 1967828174.481 ops/sResult "com.test.jmh.MyBenchmark.test01":1917905722.254 ±(99.9%) 1017856695.855 ops/s [Average](min, avg, max) = (1857680113.235, 1917905722.254, 1967828174.481), stdev = 55792160.103CI (99.9%): [900049026.399, 2935762418.110] (assumes normal distribution)# JMH version: 1.23
# VM version: JDK 1.8.0_121, Java HotSpot(TM) 64-Bit Server VM, 25.121-b13
# VM invoker: C:\Program Files\Java\jdk1.8.0_121\jre\bin\java.exe
# VM options: -javaagent:C:\work\software\IntelliJ IDEA 2019.2.3\lib\idea_rt.jar=53609:C:\work\software\IntelliJ IDEA 2019.2.3\bin -Dfile.encoding=UTF-8
# Warmup: 2 iterations, 1 s each
# Measurement: 3 iterations, 2 s each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: com.test.jmh.MyBenchmark.test02# Run progress: 50.00% complete, ETA 00:00:09
# Fork: 1 of 1
# Warmup Iteration   1: 107194791.613 ops/s
# Warmup Iteration   2: 99651519.700 ops/s
Iteration   1: 170972299.861 ops/s
Iteration   2: 207053028.473 ops/s
Iteration   3: 203784523.495 ops/sResult "com.test.jmh.MyBenchmark.test02":193936617.276 ±(99.9%) 364048302.894 ops/s [Average](min, avg, max) = (170972299.861, 193936617.276, 207053028.473), stdev = 19954715.908CI (99.9%): [≈ 0, 557984920.171] (assumes normal distribution)# Run complete. Total time: 00:00:18REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
experiments, perform baseline and negative tests that provide experimental control, make sure
the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
Do not assume the numbers tell you what you want them to tell.Benchmark            Mode  Cnt           Score            Error  Units
MyBenchmark.test01  thrpt    3  1917905722.254 ± 1017856695.855  ops/s
MyBenchmark.test02  thrpt    3   193936617.276 ±  364048302.894  ops/s

3 参数说明

3.1 测试模式

Mode表示JMH进行Benchmark时所使用的模式,代表测量的维度。

(1)Throughput:整体吞吐量,如1秒内可以执行多少次调用

(2)AverageTime:调用的平均时间,如每次调用平均耗时

(3)SampleTime:随机取样,最后输出取样结果的分布,如xx%的调用在xx毫秒以内,xx%的调用在xx毫秒以上

(4)SingleShotTime:只运行一次,用于测试冷启动的性能

java性能测试jmh相关推荐

  1. 细说Java性能测试第一课 Jmeter导读

    细说java性能测试 课前导读 作为一个测试从业者,如何在有限的测试时间里保证交付物的质量一直是绕不开的话题,性能测试作为质量保障的一部分,自然也有着重要的地位.这一讲作为本课程的导读,我想带你相对全 ...

  2. 诺基亚手机java性能排行,JAVA性能测试_诺基亚 5320XM_手机其它OS-中关村在线

    性能测试: 我们将诺基亚XpressMusic机型中上一款S60--5700和5320的性能进行一个比较,并选择了额外的参照物,也就是三款S60 v3.2机型N78.6220 classic和6210 ...

  3. JAVA拾遗 — JMH与8个代码陷阱

    作者:kiritomoe 来源:Kirito的技术分享 前言 JMH (http://openjdk.java.net/projects/code-tools/jmh/) 是 Java Microbe ...

  4. JAVA拾遗 — JMH与8个测试陷阱

    前言 JMH 是 Java Microbenchmark Harness(微基准测试)框架的缩写(2013年首次发布).与其他众多测试框架相比,其特色优势在于它是由 Oracle 实现 JIT 的相同 ...

  5. jmeter java性能_jmeter java性能测试

    本篇文章主要讲解jmeter如何测试java请求,以项目中某个接口为例,请求数据为post,返回也为post 1:新建maven工程,pom文件为 1 2 xsi:schemaLocation=&qu ...

  6. java获取cpu使用率_2019年阿里P8架构师的解析:最新Java性能测试、调优策略

    一.性能测试 Ⅰ.测试方法 微基准性能测试 可以精准定位到某个模块或者某个方法的性能问题,例如对比一个方法使用同步实现和非同步实现的性能差异 宏基准性能测试 宏基准性能测试是一个综合测试,需要考虑到测 ...

  7. 【java】JMH微基准测试,报错Unable to find the resource: /META-INF/BenchmarkList

    1.概述 代码如下 package com.java.thread.demo.volatiled;import org.openjdk.jmh.annotations.*; import org.op ...

  8. c 与java性能测试_JNI只C性能测试

    深入学习JNI之前,介绍一个比较好的学习文档:jni详细教程.我这里只是一个Demo测试性能,至于入门教程请看我前一篇博文. Demo展示 这个Demo用于从小到大的冒泡排序,App.java代码: ...

  9. 细说Java性能测试第三课 性能测试详解2

    如何制定一份有效的性能测试方案? 上一讲我们学习了性能测试的场景,并且明确了每个场景的核心意义,这一讲我将带你学习如何做好一份性能测试方案,相信你对测试方案这个概念并不陌生,那如何做好一份性能测试方案 ...

最新文章

  1. 《Pro ASP.NET MVC 3 Framework》学习笔记之五【依赖注入及ninject工具使用】
  2. 大专计算机单招有哪些,大专单招和统招的区别有哪些
  3. 理解 Android Build 系统
  4. NIPS 2018 论文解读集锦(11月28日更新)
  5. 旅游(树形dp求树的最大独立集)
  6. 栈(顺序存储)C++模板实现
  7. jqurey操作radio总结
  8. python threading_Python threading的使用方法解析
  9. python的__slots__
  10. gogs 把用户加入项目
  11. HTML里css画蝴蝶,纯css3制作煽动翅膀的蝴蝶的示例
  12. 通用稳定DNS,国际DNS,国内DNS,公共DNS
  13. 数据分析达到精准营销的路径分析
  14. php钉钉机器人,PHP调用钉钉机器人
  15. 报表工具ActiveReports开发实例——物联网智能供水云平台
  16. css 从右到左的方向调整
  17. pdf转ppt在线转换网站
  18. 学术诚信的重要性_宋瑞:坚持学术诚信 恪守学术道德 捍卫学术尊严
  19. LumaQQ启动脚本
  20. 不要被约束的意思_不想被束缚的说说

热门文章

  1. int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
  2. 现代优化计算方法_【公开课】供应链库存优化与需求预测管理
  3. Python:isinstance()和type()
  4. web前端基础(09html5多媒体)
  5. java数学函数Math类
  6. IDEA搭建一个简单的Javaweb项目(二)
  7. java 限时线程_Java线程中的七种状态
  8. java单一登录_java实现单一登录 踢人效果
  9. matlab画转体_【求助】matlab生成旋转体?
  10. 华为5g鸿蒙折叠,华为5G折叠概念新机:麒麟9000+鸿蒙OS 这才是华为的实力