JMH例子详解20-29(共38个)
前言
- 源码: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个)相关推荐
- 李兴华java8教程_李兴华Java培训系列详解20套视频教程下载
李兴华Java培训系列详解20套视频教程下载 教程介绍: 李兴华Java培训系列详解20套视频教程分别对Oracle.Java8.JavaScript.XML.AJAX.jQuery.HTML5.St ...
- 论vue3.0和vue2.0区别之编程方式及例子详解
系列文章目录 第一章 论vue3.0和vue2.0区别之编程方式及例子详解 第二章 同一台电脑 实现 vue-cli2和vue-cli3同时并存 及 常见命令 第三章 vue3.0项目实战 - Ele ...
- Python算法教程第一章知识点:利用插入元素的例子详解list之本质
声明:由于中译本翻译过于冗余,所以将有用处的知识点罗列出来. 微信公众号:geekkr 本文目录:一.利用插入元素的例子详解list之本质 </br> 一.利用插入元素的例子详解list之 ...
- latex画流程图例子详解,如何画转折线,运行不出来?
先说如何画转折线? 思路:定义点,用点作为过渡.具体详见下面的例子 运行不出来? 可能是没有加分号; 比如:\node (stop) [startstop, below of=n3] {结束}; 例子 ...
- 佳能2206打印机扫描显示连接计算机,佳能网络扫描怎么设置?图文步骤详解,29年打印经验总结...
原标题:佳能网络扫描怎么设置?图文步骤详解,29年打印经验总结 第一步:在电脑硬盘的根目录中建立共享文件夹,名字随便取,(建议不要建在桌面上),以win7为例:(适用于canon ir 2530i) ...
- 汇编语言典型例子详解_数据分析常用的7大思维方法详解
今天老李继续给大家讲解数据分析经典的思维模型,上篇为大家介绍了目标思维.假设思维.溯源思维.逆向思维4个思维:数据分析必备7大经典模型详解!建议收藏!(上) 今天继续给大家介绍结构思维.演绎推理思维. ...
- PHP数组foreach遍历输出例子详解
通常我们对于数据遍历会使用到foreach来操作当然也有使用到while list each函数来实现了,但在方便面上来看foreach更简洁好用性能也非常的不错,下面本人整理了一款在开发应用中for ...
- 2W字!详解20道Redis经典面试题!(珍藏版)
前言 金九银十即将到来,整理了20道经典Redis面试题,希望对大家有帮助. 1. 什么是Redis?它主要用来什么的? Redis,英文全称是Remote Dictionary Server(远程字 ...
- 2W字 详解20道Redis经典面试题(珍藏版)
1. 什么是Redis?它主要用来什么的? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化 ...
最新文章
- 摩尔定律行将就木?AI灵丹助其返老还童!(附论文)
- 铁路运货的运费与路程远近java_JAVA铁路运货的运费与路程远近及货物的重 – 手机爱问...
- 【转】三分钟了解Fiori背后的设计理念
- orcale的rank(排名函数)实例
- Flash 生命终止,HTML5能否完美替代?
- 【C语言】(指针) 将两个数排序
- mysql error 1790_Mysql 数据恢复报错
- HTML中美化页面,10 使用CSS美化页面
- 一位百度AI工程师的求职经历(offer/面经/干货/感悟)
- qlearning走迷宫matlab,GitHub - MrMiilk/qlearning_robot: 用 qlearning 算法走迷宫
- 输入框采用自动填充数据后,变成浅黄色背景
- 浏览器如何清除缓存教程
- vb实现webbrowser显示html,VB.NET 通过窗口句柄,获取webbrowser控件HTML内容
- 微信域名防封防屏蔽 微信APP下载链接如何做防封防屏蔽
- 51自学网java壁虎_我要自学网JAVA基础4-26日历补充壁虎老师的完整代码
- 【概率论】设随机变量X~N(0, 1), 则P(X>1)的值为
- 使用Freeman链码提取影像边界
- 如何系统地让老客户自愿推荐B端产品?
- Redis序列化的几种方式
- simscape 使用