为什么经过循环需要1次以上的时间?

时间:2018-07-30 16:42:33

标签: java performance loops

我有一个小程序:

public class Main {
  public static void main(String[] args) {
    for(int p = 0;p<10;p++) {
      long start  = System.currentTimeMillis();
      int j = Integer.MAX_VALUE;
      int d = 2;
      int c = 0;
      for(int i =Integer.MAX_VALUE; i>0;i--) {
        if(i==Integer.MAX_VALUE)System.out.println(j);
        c=j/d;
      }
      System.out.println(System.currentTimeMillis()-start);
    }   
  }
}

这是我得到的结果:

$ java Main
2147483647
62              // Almost instantaneous
2147483647
1437            // Normal speed
2147483647
1455            // Same
...

我通过禁用JIT来确保这不是一个简单的错误,在这种情况下,所有迭代的速度都相同:

$ java -Djava.compiler=NONE Main
2147483647
26879
2147483647
26484

2个问题

  1. 为什么第一次通过外部环路发送信号要比其他9个花费更少的时间?(每次我运行此命令)
  2. 为什么从3中最快(略有差异,但仍然)划分是最后一个?c >> 1,c / 2,c / d?

0 个答案:

没有答案