JMH例子详解30-38(共38个)

前言

30 Interrupt 中断

在结果会有中断的信息

Iteration   5: (*interrupt*) 16289.898 ns/op
                 put:  16289.914 ns/op
                 take: 16289.882 ns/op

31 InfraParams

本例介绍了在方法中可覆盖的三种参数,这给在测试时获取配置以及动态修改配置提供了可能

  • BenchmarkParams:基准测试级别
  • IterationParams:迭代级别
  • ThreadParams:线程级别

32 BulkWarmup 预热方式

本例介绍了三种预热方式:

  • WarmupMode.INDI:每个 Benchmark 单独预热
  • WarmupMode.BULK:在每个Benchmark 执行前都预热所有的 Benchmark
  • WarmupMode.BULK_INDI:在每个 Benchmark 执行前都预热所有的 Benchmark,且需要再预热本次执行的 Benchmark

33 SecurityManager

关于 SecurityManager ,可以通过注入的方式来修改 SecurityManager,用处不大

34 SafeLooping

这节专门讲如何构造安全的循环,和前面的内容稍有重复

35 Profilers

本例讲解了如何使用 JMH 内置的性能剖析工具查看基准测试消耗在什么地方,具体的剖析方式内置的有如下几种:

  • ClassloaderProfiler:类加载剖析
  • CompilerProfiler:JIT 编译剖析
  • GCProfiler:GC 剖析
  • StackProfiler:栈剖析
  • PausesProfiler:停顿剖析
  • HotspotThreadProfiler:Hotspot 线程剖析
  • HotspotRuntimeProfiler:Hotspot 运行时剖析
  • HotspotMemoryProfiler:Hotspot 内存剖析
  • HotspotCompilationProfiler:Hotspot 编译剖析
  • HotspotClassloadingProfiler:Hotspot 类加载剖析

36 BranchPrediction

本例提醒我们要注意“分支预测”,简单来说,分支预测是 CPU 在处理有规律的数据比没有规律的数据要快,CPU 可以“预测”这种规律。我们在基准测试时需要注意样本数据的规律性对结果也会产生影响。

Benchmark                               Mode  Cnt  Score   Error  Units
JMHSample_36_BranchPrediction.sorted    avgt   10  2.151 ± 0.049  ns/op
JMHSample_36_BranchPrediction.unsorted  avgt   10  6.263 ± 0.530  ns/op

37 CacheAccess

本例提醒我们对内存的顺序访问与非顺序访问会对测试结果产生影响,这点也是因为 CPU 存在缓存行的缘故,与之前提到的伪共享类似。

Benchmark                          Mode  Cnt  Score   Error  Units
JMHSample_37_CacheAccess.colFirst  avgt   10  8.647 ± 0.295  ns/op
JMHSample_37_CacheAccess.rowFirst  avgt   10  2.807 ± 0.400  ns/op

38 PerInvokeSetup

本例也是之前提到过的在每次调用前执行 Setup,使用它可以测量排序性能,如果 Setup 不在每次执行排序时执行,那么只有第一次排序是执行了排序,后面每次排序的都是相同顺序的数据。

Benchmark                                   (count)  Mode  Cnt      Score       Error  Units
JMHSample_38_PerInvokeSetup.measureNeutral        1  avgt   10     24.182 ±     1.276  ns/op
JMHSample_38_PerInvokeSetup.measureNeutral       16  avgt   10    109.973 ±    27.369  ns/op
JMHSample_38_PerInvokeSetup.measureNeutral      256  avgt   10  77777.486 ± 18836.810  ns/op
JMHSample_38_PerInvokeSetup.measureRight          1  avgt   10     22.394 ±     0.944  ns/op
JMHSample_38_PerInvokeSetup.measureRight         16  avgt   10    163.222 ±    25.367  ns/op
JMHSample_38_PerInvokeSetup.measureRight        256  avgt   10  69109.690 ± 11194.707  ns/op
JMHSample_38_PerInvokeSetup.measureWrong          1  avgt   10      4.084 ±     1.230  ns/op
JMHSample_38_PerInvokeSetup.measureWrong         16  avgt   10     13.880 ±     3.948  ns/op
JMHSample_38_PerInvokeSetup.measureWrong        256  avgt   10    109.895 ±    36.704  ns/op

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一本郑经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值