Java:使用JMH做Benchmark基准测试
BenchMark 又叫做基准测试,主要用来测试一些方法的性能,可以根据不同的参数以不同的单位进行计算(例如可以使用吞吐量为单位,也可以使用平均时间作为单位,在 BenchmarkMode 里面进行调整)。
(图片来源网络,侵删)
依赖
org.openjdk.jmh
jmh-core
1.19
org.openjdk.jmh
jmh-generator-annprocess
1.19
provided
使用示例
ArrayList 和 LinkedList 的遍历的性能差别
package com.demo;
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 java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@BenchmarkMode(Mode.Throughput) // 吞吐量
@OutputTimeUnit(TimeUnit.MILLISECONDS) // 结果所使用的时间单位
@State(Scope.Thread) // 每个测试线程分配一个实例
@Fork(2) // Fork进行的数目
@Warmup(iterations = 4) // 先预热4轮
@Measurement(iterations = 10) // 进行10轮测试
public class BenchMarkDemo {
@Param({"10", "40", "70", "100"}) // 定义四个参数,之后会分别对这四个参数进行测试
private int n;
private List array;
private List list;
@Setup(Level.Trial) // 初始化方法,在全部Benchmark运行之前进行
public void init() {
array = new ArrayList(0);
list = new LinkedList();
for (int i = 0; i
# Run complete. Total time: 00:03:56
Benchmark (n) Mode Cnt Score Error Units
BenchMarkDemo.arrayTraverse 10 thrpt 20 337852.300 ± 10230.514 ops/ms
BenchMarkDemo.arrayTraverse 40 thrpt 20 342619.598 ± 6272.177 ops/ms
BenchMarkDemo.arrayTraverse 70 thrpt 20 342534.411 ± 6018.479 ops/ms
BenchMarkDemo.arrayTraverse 100 thrpt 20 333470.068 ± 17285.845 ops/ms
BenchMarkDemo.listTraverse 10 thrpt 20 45899.695 ± 2960.264 ops/ms
BenchMarkDemo.listTraverse 40 thrpt 20 6615.649 ± 201.404 ops/ms
BenchMarkDemo.listTraverse 70 thrpt 20 1910.175 ± 31.484 ops/ms
BenchMarkDemo.listTraverse 100 thrpt 20 787.424 ± 25.747 ops/ms
可以结合 Score 和 Unit 这两列,看到方法的效率。这里显然 arrayTraverse 的效率比 listTraverse 的高很多,因为 Unit 单位是 ops/ms,即单位时间内执行的操作数。所以显然在遍历的时候,ArrayList的效率是比LinkedList高的。
参考
使用JMH做Benchmark基准测试
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
