我正在通过递增/递减运算符和我遇到过,如果我运行递减形式的循环,在这种情况下,它将以增量形式运行得比同样的循环更快。我期待这两个步骤都会持续相同的时间,因为同样的步骤将会被遵循。我通过网络搜索,但无法找到令人信服的答案。是否由于递减运算符比增量运算符需要更少的时间?为什么递减循环比递增循环运行得更快?
for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
我正在通过递增/递减运算符和我遇到过,如果我运行递减形式的循环,在这种情况下,它将以增量形式运行得比同样的循环更快。我期待这两个步骤都会持续相同的时间,因为同样的步骤将会被遵循。我通过网络搜索,但无法找到令人信服的答案。是否由于递减运算符比增量运算符需要更少的时间?为什么递减循环比递增循环运行得更快?
for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
这是因为在字节码中与0进行比较与用非零数进行比较是不同的操作。其实i < 10001
要求首先加载堆栈上的数字然后执行比较,而i > 0
作为一个操作执行。当然,由于JVM优化,在大多数情况下不会有速度差异。但是我们可以尝试使用-Xint选项运行代码(仅解释模式执行)。
的Piyush巴德瓦杰
我在网上编译器检测了两个圈,但我的增量循环执行速度更快,然后递减循环。
程序执行取决于许多因素。有时我们在同一台机器上运行相同的程序很多次,我们得到不同的执行时间。所以这取决于很多因素。
查看结果
for(int i = 1; i < 100001; i++) {
}
增量环 - http://ideone.com/irdY0e
for(int i = 100000; i > 0; i--) {
}
递减循环 - http://ideone.com/yDO9Jf
爵士叶夫根尼·Dorofeev给出了一个专家只能给的优秀解释。
最后,您需要考虑CPU的性能。在考虑基准来确定Java应用程序的整体性能时,请记住字节码执行,本机代码执行和图形各自发挥作用。它们的影响取决于具体应用的性质。
你的资源是什么? – alfasin 2013-05-10 06:04:20
很久以前,i> 0的测试比非null值的测试略快,但我严重怀疑这种优化仍然相关。 – 2013-05-10 06:04:52
看到存在的问题和答案: http://stackoverflow.com/questions/8968785/which-loop-has-better-performance-increment-or-decrement/8968842#8968842 – 2013-05-10 06:07:26