JWH測試
- 這是專門用於進行代碼的微基準測試的一套工具API
- 使用場景:
1 已經找出了熱點函數,而需要對熱點函數進行進一步的優化時,就可以使用 JMH 對優化的效果進行定量的分析。
2 想定量地知道某個函數需要執行多長時間,以及執行時間和輸入 n 的相關性
3 一個函數有兩種不同實現(例如JSON序列化/反序列化有Jackson和Gson實現),不知道哪種實現性能更好
- 基準測試pom依賴
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.21</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.21</version>
<scope>provided</scope>
</dependency>
package com.jwhtest;
import org.openjdk.jmh.annotations.Benchmark;
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;
/**
* @Author: zxx
* @Date: 2020/3/18 21:02
* @Description: JWH測試
*/
public class JwhTest {
public static void main(String[] args) throws RunnerException {
//`warmupIterations 預熱
//`measurementIterations 正式計量測試
//fork 測試幾輪
Options options = new OptionsBuilder().warmupIterations(2).`measurementIterations(10)
.forks(3).build();
new Runner(options).run();
}
//通過使用@Benchmark註釋所要測試的類
@Benchmark
public void testStringAdd1(){
String str = "";
for (int i=0; i<10; i++){
str+=i;
}
}
@Benchmark
public void testStringAdd2(){
StringBuilder b = new StringBuilder();
for (int i=0; i<10; i++){
b.append(i);
}
b.toString();
}
}
- 運行結果
ops數值越大則證明代碼更優