你是否常常用這樣的代碼來度量代碼性能:html
public static void main(String[] args) { long t1 = System.nanoTime(); int result = 0; for (int i = 0; i < 1000 ; i++) { result +=i; } long t2 = System.nanoTime(); System.out.println("Execution time: " + ((t2 - t1) * 1e-9) + " seconds to compute result = " + result); }
那麼,你應該繼續往下看.java
仔細閱讀 《健壯的 Java 基準測試》 這篇文章,詳細介紹了Java基準測試面臨的問題,和須要考慮的方方面面,儘管文章年代久遠,但並未過期.apache
閱讀完上面這篇文章後, 咱們就來試試 jmh,java下的微基礎測試框架.框架
首先你須要新建一個maven工程(在你的工做過程上,建一個maven模塊也行),而後以依賴的方式能夠訪問到你被測試的代碼.而後再添加jmh依賴:maven
<dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-core</artifactId> <version>1.4.1</version> </dependency> <dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-generator-annprocess</artifactId> <version>1.4.1</version> <scope>provided</scope> </dependency>
配置插件:ide
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <compilerVersion>${javac.target}</compilerVersion> <source>${javac.target}</source> <target>${javac.target}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.2</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <finalName>benchmarks</finalName> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.openjdk.jmh.Main</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
maven-shade-plugin 插件的主要做用是將全部的代碼依賴打包在一個jar中.性能
public class MyBenchmark { @Benchmark public void test() { //被測試方法調用 } }
Result: 108420.575 ±(99.9%) 402.469 ops/s [Average] Statistics: (min, avg, max) = (102205.984, 108420.575, 113070.541), stdev = 1704.079 Confidence interval (99.9%): [108018.106, 108823.044]測試