在Java中改变for循环的执行时间

我是
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次,我得到了相同的执行时间模式.

我的问题是,当执行的代码在三次中保持相同时,为什么会发生这种情况.是否存在编译器发生的任何代码优化,或者它取决于操作系统环境.当重复执行相同的代码块时,编译器会进行什么样的优化?

最佳答案
JIT (just in time) compiler编译JVM检测到的代码正在执行很多,这是性能提升的原因.在进行此类编译时,实际上可能会短暂地降低性能.

通常在性能测试中允许这种效果 – 您执行代码几千次,然后开始您的基准测试.

点赞