【发布时间】:2014-02-14 06:56:56
【问题描述】:
我尝试了以下代码:
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
【问题讨论】:
-
快速提问 - 如果在代码中交换两个循环会产生什么结果?
-
How do I write a correct micro-benchmark in Java? 的可能副本 - 因为您的测量方式不太可能产生任何有用的信息。
-
无法在我的电脑上确认 - 循环一使用时间 = 2,z = 18 循环二使用时间 = 5,z = 18。:-)
-
我改变了两个循环,现在循环一个更短了!!循环二使用时间 = 219,z = 18 循环一使用时间 = 69,z = 18。它喜欢第一个循环使用更长的时间。
-
因此,将 Brians 的评论作为答案,人们可以说:“你测量错误。你得到的数字并不意味着任何有用的东西。”。这取决于操作系统和 JVM 做什么,它使用什么样的 JIT 编译等等。
标签: java function methods microbenchmark