java性能测试jmh
文章目录
- 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相关推荐
- 细说Java性能测试第一课 Jmeter导读
细说java性能测试 课前导读 作为一个测试从业者,如何在有限的测试时间里保证交付物的质量一直是绕不开的话题,性能测试作为质量保障的一部分,自然也有着重要的地位.这一讲作为本课程的导读,我想带你相对全 ...
- 诺基亚手机java性能排行,JAVA性能测试_诺基亚 5320XM_手机其它OS-中关村在线
性能测试: 我们将诺基亚XpressMusic机型中上一款S60--5700和5320的性能进行一个比较,并选择了额外的参照物,也就是三款S60 v3.2机型N78.6220 classic和6210 ...
- JAVA拾遗 — JMH与8个代码陷阱
作者:kiritomoe 来源:Kirito的技术分享 前言 JMH (http://openjdk.java.net/projects/code-tools/jmh/) 是 Java Microbe ...
- JAVA拾遗 — JMH与8个测试陷阱
前言 JMH 是 Java Microbenchmark Harness(微基准测试)框架的缩写(2013年首次发布).与其他众多测试框架相比,其特色优势在于它是由 Oracle 实现 JIT 的相同 ...
- jmeter java性能_jmeter java性能测试
本篇文章主要讲解jmeter如何测试java请求,以项目中某个接口为例,请求数据为post,返回也为post 1:新建maven工程,pom文件为 1 2 xsi:schemaLocation=&qu ...
- java获取cpu使用率_2019年阿里P8架构师的解析:最新Java性能测试、调优策略
一.性能测试 Ⅰ.测试方法 微基准性能测试 可以精准定位到某个模块或者某个方法的性能问题,例如对比一个方法使用同步实现和非同步实现的性能差异 宏基准性能测试 宏基准性能测试是一个综合测试,需要考虑到测 ...
- 【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 ...
- c 与java性能测试_JNI只C性能测试
深入学习JNI之前,介绍一个比较好的学习文档:jni详细教程.我这里只是一个Demo测试性能,至于入门教程请看我前一篇博文. Demo展示 这个Demo用于从小到大的冒泡排序,App.java代码: ...
- 细说Java性能测试第三课 性能测试详解2
如何制定一份有效的性能测试方案? 上一讲我们学习了性能测试的场景,并且明确了每个场景的核心意义,这一讲我将带你学习如何做好一份性能测试方案,相信你对测试方案这个概念并不陌生,那如何做好一份性能测试方案 ...
最新文章
- 《Pro ASP.NET MVC 3 Framework》学习笔记之五【依赖注入及ninject工具使用】
- 大专计算机单招有哪些,大专单招和统招的区别有哪些
- 理解 Android Build 系统
- NIPS 2018 论文解读集锦(11月28日更新)
- 旅游(树形dp求树的最大独立集)
- 栈(顺序存储)C++模板实现
- jqurey操作radio总结
- python threading_Python threading的使用方法解析
- python的__slots__
- gogs 把用户加入项目
- HTML里css画蝴蝶,纯css3制作煽动翅膀的蝴蝶的示例
- 通用稳定DNS,国际DNS,国内DNS,公共DNS
- 数据分析达到精准营销的路径分析
- php钉钉机器人,PHP调用钉钉机器人
- 报表工具ActiveReports开发实例——物联网智能供水云平台
- css 从右到左的方向调整
- pdf转ppt在线转换网站
- 学术诚信的重要性_宋瑞:坚持学术诚信 恪守学术道德 捍卫学术尊严
- LumaQQ启动脚本
- 不要被约束的意思_不想被束缚的说说
热门文章
- int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
- 现代优化计算方法_【公开课】供应链库存优化与需求预测管理
- Python:isinstance()和type()
- web前端基础(09html5多媒体)
- java数学函数Math类
- IDEA搭建一个简单的Javaweb项目(二)
- java 限时线程_Java线程中的七种状态
- java单一登录_java实现单一登录 踢人效果
- matlab画转体_【求助】matlab生成旋转体?
- 华为5g鸿蒙折叠,华为5G折叠概念新机:麒麟9000+鸿蒙OS 这才是华为的实力