前言
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