为什么递减循环比递增循环运行得更快?

Piy*_*waj 21 java operators

我正在通过递增/递减运算符,我遇到了如果我以递减形式运行循环,在这种情况下,它将比增量形式的相同循环运行得更快.我期待两者都会花费相同的时间,因为将遵循相同数量的步骤.我在网上搜索但是找不到令人信服的答案.是否因为与增量运算符相比减量运算符花费的时间更少?

for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
Run Code Online (Sandbox Code Playgroud)

Evg*_*eev 43

这是因为在字节码中,与0比较的操作与使用非零数字进行比较的操作不同.实际上i < 10001需要首先在堆栈上加载数字然后执行比较,同时i > 0作为一个操作执行.当然,由于JVM优化,在大多数情况下不存在速度差异.但是我们可以尝试通过使用-Xint选项运行代码使其可见(仅限解释模式执行).

  • @StinePike:CPU必须加载2个操作数来比较2个数字.有与0比较的特殊指令,因此只需要将一个操作数加载到寄存器中. (7认同)
  • 要验证这一点,请将循环更改为`for(int i = -100000; i <0; i ++){}`.这消除了这种影响并减少了增量与减量之间的差异(这应该没有区别). (5认同)
  • 为什么0更快? (2认同)