这段 jmh 靠谱吗?

2017-05-12 21:17:21 +08:00
 twogoods
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.SampleTime)
@Warmup(iterations = 5)
@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS)
@Threads(20)
@Fork(1)
@State(Scope.Benchmark)
public class CASBench {
    private AtomicInteger atomicInteger = new AtomicInteger(0);
    private int a = 0;

    @Benchmark
    public void cas() throws Exception {
        int i;
        do {
            i = atomicInteger.get();
        } while (!atomicInteger.compareAndSet(i, i + 1));
    }

    @Benchmark
    public void sync() {
        synchronized (this) {
            a++;
        }
    }
}

测试结果不太看得懂,不管测试对不对,求大大分析下测试结果

# Fork: 1 of 1
# Warmup Iteration   1: 0.013 ±(99.9%) 0.002 ms/op
# Warmup Iteration   2: 0.013 ±(99.9%) 0.002 ms/op
# Warmup Iteration   3: 0.013 ±(99.9%) 0.002 ms/op
# Warmup Iteration   4: 0.011 ±(99.9%) 0.002 ms/op
# Warmup Iteration   5: 0.015 ±(99.9%) 0.002 ms/op
Iteration   1: 0.012 ±(99.9%) 0.001 ms/op   这是每个操作的平均值吗?
                 sync·p0.00:   ≈ 10⁻⁶ ms/op
                 sync·p0.50:   ≈ 10⁻⁴ ms/op
                 sync·p0.90:   0.001 ms/op
                 sync·p0.95:   0.001 ms/op
                 sync·p0.99:   0.159 ms/op
                 sync·p0.999:  0.737 ms/op
                 sync·p0.9999: 20.054 ms/op 这个和后面的是什么意思啊,而且差距好大?
                 sync·p1.00:   64.160 ms/op
.....

Benchmark                     Mode       Cnt    Score    Error  Units
CASBench.cas                sample  32574554    0.004 ±  0.001  ms/op
CASBench.cas:cas·p0.00      sample             ≈ 10⁻⁶           ms/op
CASBench.cas:cas·p0.50      sample             ≈ 10⁻⁴           ms/op
CASBench.cas:cas·p0.90      sample              0.001           ms/op
CASBench.cas:cas·p0.95      sample              0.001           ms/op
CASBench.cas:cas·p0.99      sample              0.002           ms/op
CASBench.cas:cas·p0.999     sample              0.004           ms/op
CASBench.cas:cas·p0.9999    sample              0.221           ms/op
CASBench.cas:cas·p1.00      sample            104.595           ms/op
CASBench.sync               sample  27044931    0.012 ±  0.001  ms/op
CASBench.sync:sync·p0.00    sample             ≈ 10⁻⁶           ms/op
CASBench.sync:sync·p0.50    sample             ≈ 10⁻⁴           ms/op
CASBench.sync:sync·p0.90    sample              0.001           ms/op
CASBench.sync:sync·p0.95    sample              0.001           ms/op
CASBench.sync:sync·p0.99    sample              0.104           ms/op
CASBench.sync:sync·p0.999   sample              1.071           ms/op
CASBench.sync:sync·p0.9999  sample             20.185           ms/op
CASBench.sync:sync·p1.00    sample             69.992           ms/op
1610 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/360964

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX