我是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次,得到了相同的执行时间模式。
我的问题是,当要执行的代码对于所有三次调用都保持相同时,为什么会出现这种情况?编译器是否进行了任何优化,或者它取决于操作系统环境?在像本例中重复执行相同代码块时,编译器进行什么样的优化?