前言

  • 源码:https://github.com/frank4600/jmh
  • JMH专栏文章

20 注解

在main方法中通过Options提供的参数都可以通过注解实现

    @Benchmark@Warmup(iterations = 5, time = 100, timeUnit = TimeUnit.MILLISECONDS)@Measurement(iterations = 5, time = 100, timeUnit = TimeUnit.MILLISECONDS)public double measure() {}

21 消耗CPU时间片

本例介绍了 Blackhole 的另一种用法,Blackhole 也可以“吞噬”cpu 时间片

@Benchmark
public void consume_0001() {Blackhole.consumeCPU(1);
}

这个与进程睡觉一段时间有什么差别,没想到应用的场景?

22 FalseSharing 伪共享

先看这篇文章一篇对伪共享、缓存行填充和CPU缓存讲的很透彻的文章

有填充的读性能高一倍

Benchmark                                    Mode  Cnt     Score     Error   Units
JMHSample_22_FalseSharing.baseline          thrpt   25  1952.893 ±  52.009  ops/us
JMHSample_22_FalseSharing.baseline:reader   thrpt   25   248.854 ±  24.224  ops/us
JMHSample_22_FalseSharing.baseline:writer   thrpt   25  1704.039 ±  42.693  ops/us
JMHSample_22_FalseSharing.contended         thrpt   25  1949.163 ±  43.728  ops/us
JMHSample_22_FalseSharing.contended:reader  thrpt   25   236.572 ±   5.213  ops/us
JMHSample_22_FalseSharing.contended:writer  thrpt   25  1712.591 ±  45.475  ops/us
JMHSample_22_FalseSharing.hierarchy         thrpt   25  2172.135 ±  42.219  ops/us
JMHSample_22_FalseSharing.hierarchy:reader  thrpt   25   542.451 ±  10.974  ops/us
JMHSample_22_FalseSharing.hierarchy:writer  thrpt   25  1629.684 ±  35.200  ops/us
JMHSample_22_FalseSharing.padded            thrpt   25  2208.004 ±  54.987  ops/us
JMHSample_22_FalseSharing.padded:reader     thrpt   25   552.961 ±  14.700  ops/us
JMHSample_22_FalseSharing.padded:writer     thrpt   25  1655.044 ±  41.880  ops/us
JMHSample_22_FalseSharing.sparse            thrpt   25  1860.312 ±  35.508  ops/us
JMHSample_22_FalseSharing.sparse:reader     thrpt   25   484.365 ±   8.489  ops/us
JMHSample_22_FalseSharing.sparse:writer     thrpt   25  1375.947 ±  27.340  ops/us

23 AuxCounters

@AuxCounters ,它是一个辅助计数器,可以统计 @State 修饰的对象中的 public 属性被执行的情况,它的参数有两个

  • AuxCounters.Type.EVENTS: 统计发生的次数
  • AuxCounters.Type.OPERATIONS:按我们指定的格式统计,如按吞吐量统计
Benchmark                    Mode  Cnt         Score        Error  Units
Sample23.runSETI            thrpt    5  55524497.719 ± 815647.423  ops/s
Sample23.runSETI:wows       thrpt    5        19.000                   #
Sample23.splitBranch        thrpt    5  54429984.316 ± 355356.288  ops/s
Sample23.splitBranch:case1  thrpt    5   5443290.189 ±  29639.142  ops/s
Sample23.splitBranch:case2  thrpt    5  48986694.126 ± 326180.908  ops/s
Sample23.splitBranch:total  thrpt    5  54429984.316 ± 355356.288  ops/s

24 Inheritance

本例介绍了 JMH 在父类中定义了 Benchmark,子类也会继承并合成自己的 Benchmark,这是 JMH 在编译期完成的,如果不是由 JMH 来编译,就无法享受这种继承。

25 API_GA

本例介绍了如何用 API 的方式来写基准测试代码,比较复杂,个人觉得还是注解的方式简单。

26 BatchSize 迭代次数

指定一次迭代方法需要执行次数

    @Benchmark@Warmup(iterations = 1, batchSize = 5000)@Measurement(iterations = 2, batchSize = 5000)@BenchmarkMode(Mode.SingleShotTime)public List<String> measureRight() {sum.addAndGet(1);list.add(list.size() / 2, "something");return list;}@TearDownpublic void tearDown(){System.out.println("### last ###");System.out.println(sum);}
### last ###
15000

27 Params

可一个基础测试跑多组数据

    @Param({"1", "31"})public int arg;@Param({"0", "1", "2"})public int certainty;
Benchmark                  (arg)  (certainty)  Mode  Cnt     Score   Error  Units
JMHSample_27_Params.bench      1            0  avgt    2     3.592          ns/op
JMHSample_27_Params.bench      1            1  avgt    2     5.854          ns/op
JMHSample_27_Params.bench      1            2  avgt    2     5.715          ns/op
JMHSample_27_Params.bench     31            0  avgt    2     9.106          ns/op
JMHSample_27_Params.bench     31            1  avgt    2  1730.046          ns/op
JMHSample_27_Params.bench     31            2  avgt    2  1660.509          ns/op

28 BlackholeHelpers

本例介绍了 Blackhole 不仅可以用在 Benchmark 修饰的方法上,也可以用在其他 JMH 提供的方法上,比如 @Setup 和 @TearDown 等等

 @Setuppublic void setup(final Blackhole bh) {}
Benchmark                                   Mode  Cnt  Score   Error  Units
JMHSample_28_BlackholeHelpers.baseline      avgt    2  0.658          ns/op
JMHSample_28_BlackholeHelpers.measureRight  avgt    2  8.611          ns/op
JMHSample_28_BlackholeHelpers.measureWrong  avgt    2  5.332          ns/op

29 StatesDAG

本例展示了 @State 中嵌套 @State 的情况,不过想不出为啥需要这样做,例子中也说这是个实验性质的 Feature。

未解之谜

有知道的帅哥美女,欢迎留言告知!

  • 21 吞噬CPU时间片,这个与进程睡觉一段时间有什么差别,没想到应用的场景?

参考

  • 一篇对伪共享、缓存行填充和CPU缓存讲的很透彻的文章
  • 基准测试神器 JMH —— 详解 36 个官方例子

JMH例子详解20-29(共38个)相关推荐

  1. 李兴华java8教程_李兴华Java培训系列详解20套视频教程下载

    李兴华Java培训系列详解20套视频教程下载 教程介绍: 李兴华Java培训系列详解20套视频教程分别对Oracle.Java8.JavaScript.XML.AJAX.jQuery.HTML5.St ...

  2. 论vue3.0和vue2.0区别之编程方式及例子详解

    系列文章目录 第一章 论vue3.0和vue2.0区别之编程方式及例子详解 第二章 同一台电脑 实现 vue-cli2和vue-cli3同时并存 及 常见命令 第三章 vue3.0项目实战 - Ele ...

  3. Python算法教程第一章知识点:利用插入元素的例子详解list之本质

    声明:由于中译本翻译过于冗余,所以将有用处的知识点罗列出来. 微信公众号:geekkr 本文目录:一.利用插入元素的例子详解list之本质 </br> 一.利用插入元素的例子详解list之 ...

  4. latex画流程图例子详解,如何画转折线,运行不出来?

    先说如何画转折线? 思路:定义点,用点作为过渡.具体详见下面的例子 运行不出来? 可能是没有加分号; 比如:\node (stop) [startstop, below of=n3] {结束}; 例子 ...

  5. 佳能2206打印机扫描显示连接计算机,佳能网络扫描怎么设置?图文步骤详解,29年打印经验总结...

    原标题:佳能网络扫描怎么设置?图文步骤详解,29年打印经验总结 第一步:在电脑硬盘的根目录中建立共享文件夹,名字随便取,(建议不要建在桌面上),以win7为例:(适用于canon ir 2530i) ...

  6. 汇编语言典型例子详解_数据分析常用的7大思维方法详解

    今天老李继续给大家讲解数据分析经典的思维模型,上篇为大家介绍了目标思维.假设思维.溯源思维.逆向思维4个思维:数据分析必备7大经典模型详解!建议收藏!(上) 今天继续给大家介绍结构思维.演绎推理思维. ...

  7. PHP数组foreach遍历输出例子详解

    通常我们对于数据遍历会使用到foreach来操作当然也有使用到while list each函数来实现了,但在方便面上来看foreach更简洁好用性能也非常的不错,下面本人整理了一款在开发应用中for ...

  8. 2W字!详解20道Redis经典面试题!(珍藏版)

    前言 金九银十即将到来,整理了20道经典Redis面试题,希望对大家有帮助. 1. 什么是Redis?它主要用来什么的? Redis,英文全称是Remote Dictionary Server(远程字 ...

  9. 2W字 详解20道Redis经典面试题(珍藏版)

    1. 什么是Redis?它主要用来什么的? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化 ...

最新文章

  1. 摩尔定律行将就木?AI灵丹助其返老还童!(附论文)
  2. 铁路运货的运费与路程远近java_JAVA铁路运货的运费与路程远近及货物的重 – 手机爱问...
  3. 【转】三分钟了解Fiori背后的设计理念
  4. orcale的rank(排名函数)实例
  5. Flash 生命终止,HTML5能否完美替代?
  6. 【C语言】(指针) 将两个数排序
  7. mysql error 1790_Mysql 数据恢复报错
  8. HTML中美化页面,10 使用CSS美化页面
  9. 一位百度AI工程师的求职经历(offer/面经/干货/感悟)
  10. qlearning走迷宫matlab,GitHub - MrMiilk/qlearning_robot: 用 qlearning 算法走迷宫
  11. 输入框采用自动填充数据后,变成浅黄色背景
  12. 浏览器如何清除缓存教程
  13. vb实现webbrowser显示html,VB.NET 通过窗口句柄,获取webbrowser控件HTML内容
  14. 微信域名防封防屏蔽 微信APP下载链接如何做防封防屏蔽
  15. 51自学网java壁虎_我要自学网JAVA基础4-26日历补充壁虎老师的完整代码
  16. 【概率论】设随机变量X~N(0, 1), 则P(X>1)的值为
  17. 使用Freeman链码提取影像边界
  18. 如何系统地让老客户自愿推荐B端产品?
  19. Redis序列化的几种方式
  20. simscape 使用

热门文章

  1. 算法分析课设(一)平面上有两个圆相交,求两个圆相交部分的面积
  2. Pyspark机器学习:向量及其常用操作
  3. OSG( OpenSceneGraphic)
  4. IOS 多线程 常驻线程,并发,内存问题
  5. Win10下应用程序默认管理员权限运行
  6. 【调剂】2.25算机考研其余调剂信息
  7. Mysql查询结果显示行号
  8. 关于python语言和人工智能下哪个说法不正确_2020学堂云程序设计基础查题公众号...
  9. 区块链基础设施概览:第一性原理框架
  10. 【边缘设备】nanoPC-T4 挂载NVME硬盘