java中循环的混乱

sum*_*000 0 java for-loop

java中哪一个更快?

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

我一直在寻找答案的解释,这是选项a,任何人?任何帮助表示赞赏

Ósc*_*pez 7

有些情况下,Java中的反向循环可能稍微快一些.这是一个显示示例的基准.通常,差异通过递增/递减指令或循环终止比较指令中的实现细节来解释,两者都在底层处理器体系结构的上下文中.在更复杂的示例中,反转循环可以帮助消除依赖关系,从而启用其他优化,或者可以改善内存局部性和缓存,甚至垃圾收集行为.

对于所有情况,人们不能假设任何一种循环总是更快 - 对于具体情况,需要一个基准来确定哪一个在给定平台上表现更好.我甚至没有考虑JIT编译器与此有什么关系.

无论如何,这种微优化可以使代码更难以阅读,而不会提供明显的性能提升.因此,除非严格必要,否则最好避免使用它们,记住 - "过早优化是所有邪恶的根源".

  • 猜测,我会说基准测试只会更快,因为数组的最后一位仍然在缓存中./尤其不是1000万和1500万次运行在正向和反向运行之间都有完全相同的(31毫秒)时差. (2认同)