【Code Tools】Java微基准测试工具JMH之入门篇
一、JMH是什么
JMH是一个Java工具,用于构建、运行和分析用Java和其他语言编写的以JVM为目标的 nano/micro/milli/macro 基准测试。
二、基本注意事项
1)运行JMH基准测试的推荐方法是使用Maven设置一个独立的项目,该项目依赖于应用程序的jar文件。这种方法是首选的,以确保基准被正确初始化并产生可靠的结果。
2)我们也可以在现有项目中运行基准测试,甚至可以在IDE中运行基准测试,但是设置更加复杂,结果也不那么可靠。
3)在所有情况下,使用JMH的关键是使注释或字节码处理器能够生成合成的基准代码。Maven archetypes(原型)是用于启用此功能的主要机制。我们强烈建议新用户使用archetype设置正确的环境。
三、通过Command Line(命令行)来创建JMH测试项目
1)建立基准测试项目
执行下面的maven命令将生成一个新的JMH-driven项目
$ mvn archetype:generate \
-DinteractiveMode=false \
-DarchetypeGroupId=org.openjdk.jmh \
-DarchetypeArtifactId=jmh-java-benchmark-archetype \
-DgroupId=org.sample \
-DartifactId=test \
-Dversion=1.0
2)Building项目
$ cd test/
$ mvn clean install
3)运行该项目
java -jar target/benchmarks.jar
使用-h运行,查看可用的命令行选项。
java -jar target/benchmarks.jar -h
该项目目前没有任何测试代码,但可以看到运行效果,代码如下
public class MyBenchmark {
public MyBenchmark() {
}
@Benchmark
public void testMethod() {
//此处添加测试代码
}
}
运行结果如下:
➜ test java -jar target/benchmarks.jar
# VM invoker: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/bin/java
# VM options: <none>
# Warmup: 20 iterations, 1 s each
# Measurement: 20 iterations, 1 s each
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: org.sample.MyBenchmark.testMethod # Run progress: 0.00% complete, ETA 00:06:40
# Fork: 1 of 10
# Warmup Iteration 1: 3019163919.102 ops/s
# Warmup Iteration 2: 3040718111.236 ops/s
# Warmup Iteration 3: 3052170687.842 ops/s
# Warmup Iteration 4: 3063995970.025 ops/s
注:在处理大型项目时,通常将基准保存在单独的子项目中,然后通过通常的构建依赖关系依赖于测试的模块。
【Code Tools】Java微基准测试工具JMH之入门篇的更多相关文章
- 【Code Tools】Java微基准测试工具JMH之中级篇
一.JMH中的基本概念 1)Mode Mode 表示 JMH 进行 Benchmark 时所使用的模式.通常是测量的维度不同,或是测量的方式不同.目前 JMH 共有四种模式: 1.Throughput ...
- 【Code Tools】Java微基准测试工具JMH之高级篇
一.IntelliJ IDEA JMH Plugin 这是一个插件,允许您以与JUnit相同的方式使用JMH.以下是已经实现的功能: 1.@Benchmark method generation(自动 ...
- Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试
本文是本人前一段时间做一个简单Java监控工具调研总结,主要包括VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,以及对Java微基准测试的简单介绍, ...
- Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试【转】
Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试[转] 本文是本人前一段时间做一个简单Java监控工具调研总 ...
- 【基准测试】JMH 简单入门
JMH 简单入门 什么是 JMH JMH 是 Java Microbenchmark Harness 的缩写.中文意思大致是 "JAVA 微基准测试套件".首先先明白什么是&quo ...
- Spring boot学习1 构建微服务:Spring boot 入门篇
Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- Java基础-SSM之mybatis快速入门篇
Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...
- Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)
TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...
- Java基础-SSM之Spring MVC入门篇
Java基础-SSM之Spring MVC入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spring MVC简介 1>.什么是Spring MVC 答:Sprin ...
随机推荐
- 第四周Java作业
老师说让用二维数组找最大,也就是最大和块,要求必须挨着,我其实不会写这个程序,所以我只能把自己的思路写出来 我觉得可以大问题缩小,我的思路是先把四个数一个正方形来进行计算,然后六个数矩形,把他化成两个 ...
- ubuntu16.04 mysql 开启远程连接
首先保证自己的mysql安装是正常的,如果需要安装请参考 Ubuntu16.04重新安装MySQL数据库 第一步,远程访问赋予权限 方案一 首先用root用户登录mysql mysql -u root ...
- 基于C#实现的自动化测试框架:发布自动触发自动化回归测试
接口自动化测试用例完成以后,以前都是发布以后手动运行测试用例.虽然手动运行下脚本也就是一个F5的事情,但是离自动化测试的标准差得很远.这两天有了个大胆的想法,想要实现以下发布时直接触发自动化回归测试用 ...
- docker实战---初级<1>
第1章 docker容器 1.1 什么是容器 容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁.隔离的环境拥有自己的文件系统,ip地址,主机名等 1.2 容器与虚拟化的区别 linux容 ...
- linux ip命令和ifconfig命令
From https://blog.csdn.net/freeking101/article/details/68939059
- linux配制DNS服务器基本能功能
1.环境 Centos 6.5 bind 关闭防火墙和SELINUX 2.安装bind服务软件 yum -y install bind 3.配制主配制文件/etc/name.conf options ...
- centos7基于SVN+Apache+IF.svnadmin实现SVN的web管理
一.介绍 本文介绍的是CentOS7上搭建基于Apache.SVN Server.iF.svnadmin实现web后台可视化管理SVN. iF.SVNAdmin应用程序是Subversion授权文件基 ...
- 支付宝 ILLEGAL_SIGN
支付宝 ILLEGAL_SIGN: 解决办法:地址加上 <![CDATA[ ...... ]]> <PAY_COMPLETE_PAGE_URL><![CDATA[http ...
- js let
<script> var a; // 变量提升 js中的作用域只有在函数中 {} 才称为作用域 if/for循环都不是 都会产生变量提升 console.log(a); { a = 2; ...
- 多态 鸭子类型 反射 内置方法(__str__,__del__) 异常处理
''' 1什么是多态 多态指的是同一种/类事物的不同形态 2 为何要有多态 多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象 多态性的精髓:统一 多态性的好处: 1增加了程序的 ...