效能測試JMH
阿新 • • 發佈:2020-10-10
生成檢視的網站(在跑效能測試時指定生成json格式的結果,再上傳到此網站視覺化):http://deepoove.com/jmh-visual-chart/
參考文件
實戰
- 新增pom依賴
<!-- JMH--> <dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-core</artifactId> <version>1.25.2</version> </dependency> <dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-generator-annprocess</artifactId> <version>1.25.2</version> <scope>provided</scope> </dependency>
- 增加效能測試類,在需要做效能測試的方法上新增@Benchnmark註解
場景:驗證字串拼接的效能差異
@BenchmarkMode(Mode.Throughput) @Warmup(iterations = 3) @Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) @Threads(8) @Fork(2) @OutputTimeUnit(TimeUnit.MILLISECONDS) public class StringBuilderBenchmark { @Benchmark public void testStringAdd() { String a = ""; for (int i = 0; i < 10; i++) { a += i; } print(a); } @Benchmark public void testStringBuilderAdd() { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < 10; i++) { stringBuilder.append(i); } print(stringBuilder.toString()); } private void print(String a) { } // 生成json格式的結果,預設是生成log格式的 public static void main(String []args) throws RunnerException { org.openjdk.jmh.runner.options.Options options = new OptionsBuilder() .include(StringBuilderBenchmark.class.getSimpleName()) .shouldDoGC(true) .resultFormat(ResultFormatType.JSON) .result("benchmark-result.json") .addProfiler(StackProfiler.class) .jvmArgsAppend("-Djmh.stack.period=1") .warmupIterations(5) .measurementIterations(5) .forks(1) .build(); new Runner(options).run(); } }