我正在使用 JMH 對 JUnit 測驗進行基準測驗。
我的基準:
import org.openjdk.jmh.annotations.*;
public class Benchmarks {
@Benchmark
public void bmUnitTest1() {
UnitTests.UnitTest1();
}
@Benchmark
public void bmUnitTest2() {
UnitTests.UnitTest2();
}
}
我的基準賽跑者:
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.results.format.ResultFormatType;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.options.TimeValue;
import java.util.concurrent.TimeUnit;
public class BenchmarkRunner {
public static void main(String[] args) throws Exception {
Options opt = new OptionsBuilder()
.include(Benchmarks.class.getSimpleName())
.mode(Mode.SingleShotTime)
.resultFormat(ResultFormatType.CSV)
.result("target/test-classes/benchmarkcsv/BM " System.currentTimeMillis() ".csv")
.timeUnit(TimeUnit.MILLISECONDS)
.warmupIterations(3)
.warmupTime(TimeValue.seconds(1))
.measurementIterations(3)
.measurementTime(TimeValue.seconds(1))
.timeout(TimeValue.seconds(5))
.forks(1)
.warmupForks(1)
.threads(1)
.build();
new Runner(opt).run();
}
}
目前我正在獲取整個單元測驗的性能指標。我想知道是否可以在較低級別上查看這些性能指標。
例子:
UnitTest1 有多個函式呼叫。Function1 需要 10ms,Function2 需要 20ms。
而不是看到這個(簡化):
UnitTest1: 30ms/op
我想看看這個:
UnitTest1: 30ms/op
Function1: 10ms/op
Function2: 20ms/op
我可以在 JMH 中做到這一點嗎?如果沒有,是否有任何替代方法可以用來對 JUnit 測驗進行基準測驗?
uj5u.com熱心網友回復:
JMH 有幾個可以在運行基準測驗時啟用的分析器。有關詳細資訊,請參閱
如果您想獲得一個平坦的組態檔 - 只需使用 CPU 時間百分比的方法 - 使用不帶選項的async分析器:output
ns percent samples top
---------- ------- ------- ---
1992741308 39.53% 200 java.util.stream.AbstractPipeline.copyInto
844434060 16.75% 84 java.util.stream.StreamOpFlag.isKnown
670418795 13.30% 67 java.lang.Integer.max
500609106 9.93% 50 java.util.stream.AbstractPipeline.getStreamAndOpFlags
451255844 8.95% 45 java.util.stream.AbstractPipeline.evaluate
221004309 4.38% 22 java.util.stream.ReduceOps$7.makeSink
140062540 2.78% 14 java.util.Spliterators$IntArraySpliterator.forEachRemaining
60012022 1.19% 6 java.util.stream.AbstractPipeline.wrapSink
39966227 0.79% 4 java.util.stream.ReduceOps$6ReducingSink.accept
39348309 0.78% 4 java.util.stream.ReduceOps$ReduceOp.evaluateSequential
10862017 0.22% 1 Dictionary::find(unsigned int, Symbol*, Handle)
10637320 0.21% 1 ciVirtualCallTypeData::translate_from(ProfileData const*)
10209263 0.20% 1 java.util.stream.AbstractPipeline.<init>
10155044 0.20% 1 java.util.Spliterator$OfInt.forEachRemaining
10128043 0.20% 1 PhaseChaitin::Register_Allocate()
10115108 0.20% 1 _raw_spin_unlock_irqrestore_[k]
9486501 0.19% 1 PhaseChaitin::Select()
9281194 0.18% 1 PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464449.html
上一篇:嘗試使用while回圈按字母順序比較兩個單詞,以查看如果猜測出現在單詞之前還是之后
下一篇:按日期獲取記錄是30天的倍數
