Tri*_*yen 5 java benchmarking microbenchmark jmh
我正在使用 JMH 对 DOM 解析器进行基准测试。我得到了非常奇怪的结果,因为第一次迭代实际上比后面的迭代运行得更快
谁能解释为什么会发生这种情况?另外,百分位数和所有数字是什么意思,为什么它在第三次迭代后开始变得稳定?一次迭代是否意味着整个基准测试方法的一次迭代?下面是我正在运行的方法
@Benchmark
@BenchmarkMode(Mode.SingleShotTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@Warmup(iterations = 13, time = 1, timeUnit = TimeUnit.MILLISECONDS)
public void testMethod_no_attr() {
try {
File fXmlFile = new File("500000-6.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
您的屏幕截图缺少直方图输出。\n您看到的只是直方图的百分位数。
\n检查这个例子。我们进行了 100 次迭代,方法BoolArrayVsBitSetBenchmark#primitive的结果 是:
\nResult "de.jawb.jmh.benchmark.example.bool.BoolArrayVsBitSetBenchmark.primitive":\n N = 100\n mean = 0,493 \xc2\xb1(99.9%) 0,003 s/op\n\n Histogram, s/op:\n [0,490, 0,495) = 93\n [0,495, 0,500) = 3\n [0,500, 0,505) = 1\n [0,505, 0,510) = 1\n [0,510, 0,515) = 0\n [0,515, 0,520) = 0\n [0,520, 0,525) = 1\n [0,525, 0,530) = 0\n [0,530, 0,535) = 0\n [0,535, 0,540) = 0\n [0,540, 0,545) = 0\n [0,545, 0,550) = 0\n [0,550, 0,555) = 0\n [0,555, 0,560) = 1\n\n Percentiles, s/op:\n p(0,0000) = 0,490 s/op \n p(50,0000) = 0,491 s/op\n p(90,0000) = 0,494 s/op\n p(95,0000) = 0,496 s/op\n p(99,0000) = 0,558 s/op\n p(99,9000) = 0,559 s/op\n p(99,9900) = 0,559 s/op\n p(99,9990) = 0,559 s/op\n p(99,9999) = 0,559 s/op\n p(100,0000) = 0,559 s/op\nRun Code Online (Sandbox Code Playgroud)\n第一条直方图线[0,490, 0,495) = 93表示 93 个调用属于max 0,490s和min 0,494s组。注意括号\')\'
总之,这意味着没有调用比 0,491 s/op 更快,因为
\n\n\np(0,0000) = 0,490 秒/操作
\n
最大执行时间为 0,559 s/op,因为
\n\n\np(100,0000) = 0,559 s/op
\n
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |