JMH,即Java Microbenchmark Harness,是专门用于代码微基准测试的工具套件。何谓Micro Benchmark呢?简单的来讲就是基于方法层面的基准测试,精度能够达到微秒级。当你定位到热点方法,但愿进一步优化方法性能的时候,就能够使用JMH对优化的结果进行量化的分析。java
mvn命令行建立一个JMH工程:apache
mvn archetype:generate \ -DinteractiveMode=false \ -DarchetypeGroupId=org.openjdk.jmh \ -DarchetypeArtifactId=jmh-java-benchmark-archetype \ -DgroupId=co.speedar.infra \ -DartifactId=jmh-test \ -Dversion=1.0
要在现有Maven项目中使用JMH,只须要把生成出来的两个依赖以及shade插件拷贝到项目的pom中便可:maven
<dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-core</artifactId> <version>0.7.1</version> </dependency> <dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-generator-annprocess</artifactId> <version>0.7.1</version> <scope>provided</scope> </dependency> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <finalName>microbenchmarks</finalName> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.openjdk.jmh.Main</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
Java 12 中添加一套新的基本的微基准测试套件(microbenchmarks suite),此功能为JDK源代码添加了一套微基准测试(大约100个),简化了现有微基准测试的运行和新基准测试的建立过程。使开发人员能够轻松运行现有的微基准测试并建立新的基准测试,其目标在于提供一个稳定且优化过的基准。 它基于Java Microbenchmark
Harness(JMH),能够轻松测试JDK性能,支持JMH更新。ide
微基准套件与 JDK 源代码位于同一个目录中,而且在构建后将生成单个 jar 文件。但它是一个单独的项目,在支持构建期间不会执行,以方便开发人员和其余对构建微基准套件不感兴趣的人在构建时花费比较少的构建时间。工具
要构建微基准套件,用户须要运行命令:make build-microbenchmark, 相似的命令还有:make test
TEST="micro:java.lang.invoke" 将使用默认设置运行 java.lang.invoke 相关的微基准测试。性能