java中循环的混乱

java中哪一个更快?

a) for(int i = 100000; i > 0; i--) {} b) for(int i = 1; i < 100001; i++) {} 

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

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

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

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

只是说出我的帽子,但我知道汇编语言具有零的特定比较,比注册值之间的比较花费更少的周期。

通常,Oracle HotSpot强调实际代码中的优化,这意味着前向循环优化比后向循环更有可能实现。 从机器代码的角度来看,递减循环可以保存指令,但它不太可能对性能产生重大影响,特别是在存在大量内存访问时。 我知道现代CPU或多或少都像向前一样快乐倒退(历史上曾经有一段时间他们更好地优化了前向访问)。 他们甚至会优化某些步幅访问模式。

(另外HotSpot(至少是Server / C2风格)能够删除空循环。)

你告诉我答案是这样的,我想答案是:java虚拟机将以更快的方式将比较“转换”为零。