Java12新特性 -- 微基準測試套件

JMH,即Java Microbenchmark Harness,是專門用於代碼微基準測試的工具套件。何謂Micro Benchmark呢?簡單的來講就是基於方法層面的基準測試,精度能夠達到微秒級。當你定位到熱點方法,但願進一步優化方法性能的時候,就能夠使用JMH對優化的結果進行量化的分析。java

JMH比較典型的應用場景:
  • 想準確的知道某個方法須要執行多長時間,以及執行時間和輸入之間的相關性;
  • 對比接口不一樣實如今給定條件下的吞吐量;
  • 查看多少百分比的請求在多長時間內完成;
JMH的使用

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 相關的微基準測試。性能

相關文章
相關標籤/搜索