我是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()
第一次调用时,程序的执行时间最大,第二次调用相同的方法时,程序花费的时间少于第一次调用,第三次调用该方法calcForLoop()
小于或等于第二次执行时间处理时间。我运行了这个程序 5-6 次,我得到了相同的执行时间模式。
我的问题是为什么当要执行的代码在所有三个时间内都保持不变时会发生这种情况。编译器是否进行了任何代码优化,或者它取决于操作系统环境。当像这种情况下重复执行相同的代码块时,编译器会进行什么样的优化?