私はJavaの初心者です。以下のコーディングを行いました。
class TimeComplex{
public static void main(String []args){
long startTime, stopTime, elapsedTime;
//first call
startTime = System.currentTimeMillis();
System.out.println("\nstart time : " + startTime + "\n");
calcForLoop();
stopTime = System.currentTimeMillis();
System.out.println("stop time : " + stopTime + "\n");
elapsedTime = stopTime - startTime;
System.out.println("\t1st loop execution time : " + elapsedTime+ "\n");
//second call
startTime = System.currentTimeMillis();
System.out.println("start time : " + startTime + "\n");
calcForLoop();
stopTime = System.currentTimeMillis();
System.out.println("stop time : " + stopTime + "\n");
elapsedTime = stopTime - startTime;
System.out.println("\t2nd loop execution time : " + elapsedTime + "\n");
//third call
startTime = System.currentTimeMillis();
System.out.println("start time : " + startTime + "\n");
calcForLoop();
stopTime = System.currentTimeMillis();
System.out.println("stop time : " + stopTime + "\n");
elapsedTime = stopTime - startTime;
System.out.println("\t3rd loop execution time : " + elapsedTime + "\n");
}
static void calcForLoop(){
for(long i = 12_85_47_75_807L; i > 0; i--);
}
}
コードは、プログラムの実行時間を増やすためだけに for ループを長時間実行します。が初めて呼び出されたときcalcForLoop()
、プログラムの実行時間は、同じメソッドが 2 回目に呼び出されたときに最大になります。プログラムにかかる時間は、最初の呼び出しよりも短く、メソッドへの 3 回目の呼び出しcalcForLoop()
は 2 回目よりも短いか同じです。実行時間。このプログラムを 5 ~ 6 回実行しましたが、実行時間は同じパターンでした。
私の質問は、実行するコードが3回すべて同じままであるのに、なぜこれが起こるのかということです。コンパイラによって行われるコードの最適化はありますか、それともオペレーティング システム環境に依存していますか。この場合のように、同じコード ブロックを繰り返し実行する場合、コンパイラはどのような最適化を行いますか?