それで、nanoTime を少し操作するためだけに、かなりばかげたプログラムを作成しました。小さなコードの実行時間をチェックできるようにしたかったので、nanoTime が最適だと思いました。この短いコードの平均実行時間を求めたかったので、for ループの中に入れました。ただし、for ループ内では、平均は約 6,000 ナノ秒少なくなります。これは小さなコードでは大きな違いではないことはわかっていますが、まったく同じコードでもなぜ違うのでしょうか? 異なる時間を生成する 2 つのブロックを次に示します。これは平均で約 8064 ナノ秒です。
long start, end, totalTime;
double milliseconds, seconds, minutes, hours, days, years;
totalTime = 0;
start = System.nanoTime();
milliseconds = System.currentTimeMillis();
seconds = milliseconds/1000;
minutes = seconds/60;
hours = minutes/60;
days = hours/24;
years = days/365;
end = System.nanoTime();
totalTime = end-start;
これは平均で約 2200 ナノ秒です。
long start, end, totalTime;
double milliseconds, seconds, minutes, hours, days, years;
totalTime = 0;
for(int i = 1; i < 11; i++){
start = System.nanoTime();
milliseconds = System.currentTimeMillis();
seconds = milliseconds/1000;
minutes = seconds/60;
hours = minutes/60;
days = hours/24;
years = days/365;
end = System.nanoTime();
totalTime += end-start;
System.out.println(end-start); //this was added to manually calc. the average to
//make sure the code was executing properly. does not effect execution time.
}
平均を求めるには、totalTime*.1 を使用します