我嘗試下面的代碼:爲什麼調用函數比不調用函數更快?
public class Test {
public static void main(String[] args) {
int x = 9, y = 9, z = 0;
long startTime = System.currentTimeMillis();
// System.out.println("loop one start time = " + startTime);
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 10000; j++) {
z = x + y;
}
}
System.out.println("loop one use time = " + (System.currentTimeMillis() - startTime) + ",z = " + z);
startTime = System.currentTimeMillis();
// System.out.println("loop two start time = " + startTime);
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 10000; j++) {
z = sum(x, y);
}
}
System.out.println("loop two use time = " + (System.currentTimeMillis() - startTime) + ",z = " + z);
}
public static int sum(int x, int y) {
int t;
t = x + y;
return t;
}
}
輸出到控制檯:
loop one use time = 216,z = 18
loop two use time = 70,z = 18.
看來,第二個循環花更少的時間,比第一個! 我不明白爲什麼會發生這種情況。感謝您的幫助。
更新: 我交換的兩個循環,現在一環花費較少的時間!
loop two use time = 219,z = 18
loop one use time = 69,z = 18
快速問題 - 如果在代碼中交換兩個循環,結果如何? –
可能的重複[如何在Java中編寫正確的微基準?](http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java ) - 因爲你如何測量不太可能產生任何有用的東西。 –
無法在我的PC上確認 - 循環一次使用時間= 2,z = 18 循環兩次使用時間= 5,z = 18. :-) – Smutje