プログラミング言語のクロック時間に問題が発生したのは初めてです。基本的には、関数をwhileループで呼び出すことで、関数の実行速度を測定しています。問題は何らかの理由でwhileループが長く実行されると経過時間が短くなることです。誰でも説明できますか?以下のコード。Java System.nanoTimeの経過平均時間が短くなっています
DescriptiveStatistics stats = new DescriptiveStatistics();
while(true) {
long startTime = System.nanoTime();
executeSaxonXsltTransformation();
long stopTime = System.nanoTime();
long elapsedTime = stopTime-startTime;
stats.addValue((double)elapsedTime);
System.out.println(stats.getN()+" - "+elapsedTime+ " - "+stats.getMean());
}
約1,000回の実行後、経過時間は750k~850kです。しかし、約100,000回実行した後、経過時間は580〜750kに低下します。継続的な減少は、平均(stats.getMeans())を見ることによって最もよく認識されます。これは、108kループの平均値が〜632kで、3kループの平均値は〜1millionです。 nanoTimeではなくcurrentTimeMillisに切り替えても何も変わりません。
ありがとうございました。私はこれが起こっているような気がしました。 – Thirlan
最近、Caliperは一貫したベンチマークを行う方法を知っていますか?私が最後に見たとき、PrintCompilationからの出力は非常に少なくても励まされませんでした。 – kittylyst
キャリパーはマイクロベンチマーキングに非常に優れています。私は "マクロ"ベンチマークでどのように動作するのか分からないが、小さくてタイトな方法を測定するためには優れていると認めている。 –