2016-04-04 8 views
1

私はJMHを使用していると私は理解しにくいものを見つける:私は@Benchmarkで注釈を付け一つの方法を持っていると私はmeasurementIterations(3)を設定します。メソッドは3回呼び出されますが、各反復呼び出しでは、関数はかなり大きくランダムな回数だけ実行されます。JMH測定の反復

私の質問です:その数字は完全にランダムですか?それを制御し、反復の中で関数が何回実行されるべきかを決定する方法はありますか?そして、各方法または別の場合、機能がランダムな回数を実行する場合、measurementIterationsを設定することの重要性は何ですか?

答えて

4

measurementIterationsあなたは、ベンチマークの測定したいどのように多くの測定の反復定義します。あなたが指定したパラメータはわかりませんが、デフォルトでJMHはベンチマークの時間ベース(デフォルトは1秒と思われます)を実行します。これは、ベンチマーク方法がその時間枠内でできるだけ頻繁に呼び出されることを意味する。 1回の反復でメソッドを呼び出す頻度を指定することができます( - >バッチ処理)。

私はJMHが提供するJMHサンプルを研究することをお勧めします:http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/ 彼らはあなたが簡単にベンチマークの中に作るJMHとカバー落とし穴に非常に良い導入されています。

0

JMHは測定されていないが有効な結果に必要なウォームアップ反復を行っています。

measurementIterationsを測定する必要がありますどのように多くの反復を定義します。ウォーミングアップは測定されないため、ウォームアップは含まれません。

0

繰り返し回数はさまざまなJMHモードに依存します。私はAvgtimeモードを使用しなければならないと考えています。さまざまな繰り返しを実行します。 /////////////////////////////////////////////////////////////////////// /////////////////////////////

Mode.Throughput: Calculate number of operations in a time unit. 

Mode.AverageTime: Calculate an average running time. 

Mode.SampleTime: Calculate how long does it take for a method to run 
(including percentiles). 

Mode.SingleShotTime: Just runs a method 
once (useful for cold-testing mode). 

/////////// /////////////////////////////////////////////////////////////////使用例モード「Mode.SingleShotTime」については///////////////////
、それはあなたが実行中で言及した回の繰り返し正確に数を実行します(下記参照) 。 //例ランナークラス

public static void main(String[] args) throws RunnerException { 
Options opt = new OptionsBuilder() 
       .include(JMHSample_01_HelloWorld.class.getSimpleName()) 
       .warmupIterations(1)// number of times the warmup iteration should take place 
       .measurementIterations(1)//number of times the actual iteration should take place 
       .forks(1) 
       .shouldDoGC(true) 
       .build(); 


     new Runner(opt).run(); 
}