Java 为什么降序循环比升序循环快?

Java 为什么降序循环比升序循环快?,java,performance,loops,Java,Performance,Loops,我在一些博客上看到了这个问题。下面给出了两个循环,问题是哪一个更快 for(int i = 100000; i > 0; i--) {} for(int i = 1; i < 100001; i++) {} 为什么第一个比第二个快 在某些处理器上,在某些编译器生成的代码中,第一个可能更快,因为该值与零相比。正如@DeadMG所指出的,它适用于1985年之前的x86处理器 但事实是: 过早的优化,不要仅仅因为这个原因而将第一行更改为第二行!唐纳德·克努斯曾经说过,我完全同意他的观点

我在一些博客上看到了这个问题。下面给出了两个循环,问题是哪一个更快

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

为什么第一个比第二个快

在某些处理器上,在某些编译器生成的代码中,第一个可能更快,因为该值与零相比。正如@DeadMG所指出的,它适用于1985年之前的x86处理器

但事实是:

过早的优化,不要仅仅因为这个原因而将第一行更改为第二行!唐纳德·克努斯曾经说过,我完全同意他的观点 我们应该忘记小效率,比如说97%的时间: 过早优化是万恶之源

一个不可移植的优化-在某些特定情况下,它只在某些特定处理器上工作得更快!而且它很有可能在其他体系结构上工作得不一样,甚至更慢。
警告您。

在某些编译器生成的代码中的某些处理器上,第一个可能会更快,因为该值与零相比。正如@DeadMG所指出的,它适用于1985年之前的x86处理器

但事实是:

过早的优化,不要仅仅因为这个原因而将第一行更改为第二行!唐纳德·克努斯曾经说过,我完全同意他的观点 我们应该忘记小效率,比如说97%的时间: 过早优化是万恶之源

一个不可移植的优化-在某些特定情况下,它只在某些特定处理器上工作得更快!而且它很有可能在其他体系结构上工作得不一样,甚至更慢。
您将收到警告。

基准测试或它没有发生。差异(如果有)将以纳秒为单位测量。这可能更多地取决于您在循环中所做的事情,而不是循环本身。如果你要走这种微观优化路线,你知道吗?@Bohemian的速度比+++@i快,这意味着在Java中,由于15毫秒的时钟分辨率,它们是不可测量的。可能是重复基准测试,或者根本没有发生。区别,如果有的话,它可能更多地取决于你在循环中所做的事情,而不是循环本身。如果你沿着这条微观优化路线走,你知道吗?@Bohemian++i比i++快,这意味着在Java中,由于15毫秒的时钟分辨率,它们无法测量。可能重复-更具体地说,这仅在1985年之前的x86处理器上出现过。因此,你可能想更具体地说明你认为这适用于什么处理器,这是C语言的一个延续,你可以将条件编码为简单的i,即forint i=100000;我更具体地说,1985年之前的x86处理器就是这样。因此,你可能想更具体地说明你认为这适用于什么处理器,这是C语言的一个延续,你可以将条件编码为简单的i,即forint i=100000;我我-