Java For迴圈效率測試
阿新 • • 發佈:2019-01-02
很奇怪的結果!!!!
測試程式如下
public class Main { public static void main(String[] args){ long ti = System.currentTimeMillis(); for(int i=Integer.MIN_VALUE;i<Integer.MAX_VALUE;i++){ if(i==i) continue; } System.out.println(System.currentTimeMillis()-ti); ti = System.currentTimeMillis(); for(int i=Integer.MIN_VALUE;i<Integer.MAX_VALUE;i++){ continue; } System.out.println(System.currentTimeMillis()-ti); } }
輸出結果
6
1320
問題1:
在for迴圈中加入判斷後,迴圈執行的時間竟然差這麼多。。
以上是問題,看下面這個測試,你會發現更有意思
同樣輸出public class Main { public static void main(String[] args){ long ti = System.currentTimeMillis(); long c = 0; for(int i=Integer.MIN_VALUE;i<Integer.MAX_VALUE;i++){ c++; if(i==i) continue; } System.out.println(System.currentTimeMillis()-ti + " "+c); ti = System.currentTimeMillis(); c=0; for(int i=Integer.MIN_VALUE;i<Integer.MAX_VALUE;i++){ c++; continue; } System.out.println(System.currentTimeMillis()-ti+ " "+c); } }
93 4294967295
7847 4294967295
僅僅是在迴圈內做了一次++操作,耗時竟然增加了近10倍!
不得不說,java!你的執行效率實在是慘不忍睹。。。。
java版本: javac 1.7.0_25
求解釋:
在for迴圈中加入判斷與不加判斷,執行時間相差為什麼會相差200倍?!
-------------------------------------------------------------------------------------------------
今天又測試一次,java版本不知道什麼時候變成了這個樣子: javac 1.7.0_55 結果不再和上次測試一樣,看來上次是遇到bug了。。 而且也不知道java什麼時候自己升級的。。