基準測試時評估程序/接口性能的一個有效的方法。筆者早期在網上了解到JMH這個代碼工具。因爲以前找到的一些代碼不具有項目html
實踐場景的說服力,一般是一項簡單算法,獨立小功能模塊性的代碼,便沒有深刻了解。java
網址:https://openjdk.java.net/projects/code-tools/jmh/算法
官方說明:spring
JMH is a Java harness for building, running, and analysing nano/micro/milli/macro benchmarks written in Java and other languages targetting the JVM.框架
大意:JMH 是一種 Java代碼工具,用於構建、運行和分析以 Java 和其餘語言編寫的以 JVM 爲目標的納米/微秒/毫秒/宏(黑人問號marco這裏應該翻譯成宏嗎) 級基準框架。maven
筆者今晨突然想起他和Springboot集合進行基準測試,因而找到了如下一篇文章。ide
轉載地址:http://www.javashuo.com/article/p-miiuxswe-gh.html工具
直接上代碼post
pom.xml性能
<dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-core</artifactId> <version>1.21</version> <scope>test</scope> </dependency> <!--<dependency>--> <!--<groupId>org.openjdk.jmh</groupId>--> <!--<artifactId>jmh-generator-annprocess</artifactId>--> <!--<version>1.20</version>--> <!--<scope>provided</scope>--> <!--</dependency>-->
JMHSpringBootTest.java
import com.xxx.service.DataService; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; import org.springframework.boot.SpringApplication; import org.springframework.context.ConfigurableApplicationContext; //https://blog.csdn.net/peng_0129/article/details/100134320 //@BenchmarkMode(Mode.AverageTime) // 測試方法平均執行時間 //@OutputTimeUnit(TimeUnit.MICROSECONDS) // 輸出結果的時間粒度爲微秒 @State(Scope.Thread) public class JMHSpringBootTest { private ConfigurableApplicationContext context; private DataService dataService; public static void main(String[] args) throws RunnerException { Options options = new OptionsBuilder().include(JMHSpringBootTest.class.getName()+".*") .warmupIterations(2).measurementIterations(2).forks(1).build(); new Runner(options).run(); } /** * setup初始化容器的時候只執行一次 */ @Setup(Level.Trial) public void init(){ context = SpringApplication.run(Main.class); dataService = context.getBean(DataService.class); } /** * benchmark執行屢次,此註解表明觸發咱們所要進行基準測試的方法 */ @Benchmark public void test(){ System.out.println(dataService.getDataNode()); } }
切忌,必定在要控制檯使用maven運行,不能單獨使用java類,運行報錯
Exception in thread "main" java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkList
at org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98)
at org.openjdk.jmh.runner.BenchmarkList.find(BenchmarkList.java:122)
at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:263)
at org.openjdk.jmh.runner.Runner.run(Runner.java:209)
at com.netmarch.covid19.JMHSpringBootTest.main(JMHSpringBootTest.java:21)
以及如下錯誤:
Error:java: 服務配置文件不正確, 或構造處理程序對象javax.annotation.processing.Processor: Provider org.openjdk.jmh.generators.BenchmarkProcessor could not be instantiated:
java.lang.NoClassDefFoundError: org/openjdk/jmh/generators/core/GeneratorSource時拋出異常錯誤
在terminal輸入
mvn clean install
運行結果
本篇算是失敗嘗試
其餘參考:
https://blog.csdn.net/kevin_mails/article/details/88943881
https://blog.csdn.net/wangyadong317/article/details/83215285
https://stackoverflow.com/questions/38056899/jmh-unable-to-find-the-resource-meta-inf-benchmarklist