java中哪个for循环更快?为什么
从下面的for循环中,哪一个在java中更快java中哪个for循环更快?为什么,java,Java,从下面的for循环中,哪一个在java中更快 for(inti=100000;i>0;i--){} for(inti=1;i
for(inti=100000;i>0;i--){}
for(inti=1;i<100001;i++){}
请提供速度提高的重要原因。这确实有助于提高应用程序的性能。没有指定执行某些语句所需的时间,因此您的问题没有答案
一个足够聪明的编译器可以自由地将这两个语句编译为无操作,并且仍然是兼容的。事实上,JIT很可能在这两种情况下都会这样做。我想这没关系。它们都以相同的方式执行。为什么?嗯,有一种叫做Java虚拟机的东西,我很确定它经过了优化,可以将两者识别为同一句话 我非常怀疑这是否会影响应用程序的性能 在优化应用程序之前,请使用查找工具找出应用程序中的瓶颈所在
你问这个问题的事实表明你犯了“过早优化”的错误。与其浪费时间,不如直接编写代码,让它工作起来,然后使用实际输入对其进行分析。使用探查器输出来指导您如何花时间进行手动优化。增量和减量之间的差异无关紧要,然而,当你准确地考虑到在循环体中执行的是什么时,这两者之间很可能有一个重要的区别——显然没有办法给出任何关于这一点的一般性陈述。我不能肯定地说,但我认为JVM会优化类似的东西,不管你使用什么。如果你能测量差异,我会给你买一个松饼。“这真的有助于我提高应用程序的性能”-不,不会的。@Vulcan-跟我说。“我必须在测量前预热JVM”。您很可能看到JIT编译过程的一个工件。@alpha123-相反,它很可能会将它们优化为零。嗯,我不明白这一点。我很确定JLS也没有指定
inti=0++一,
比100万个字符串的冒泡时间要长,但我很有信心它不会。底线是,如果没有关于编译器、硬件、JVM(如果前面提到的编译器甚至针对java字节码)、JIT编译器等的进一步信息,就不可能知道了。对于类似OP的问题,我完全同意。我想说的是,仅仅因为JLS没有指定某些东西,并不意味着你不能合理地预测它的性能特征。如果问题询问递增一个int是否比排序一百万个字符串并将其写入磁盘慢,JLS仍然没有指定每个字符串需要多长时间,但在实践中肯定有答案。@yshavit-您的论点是正确的,但没有帮助。我们无法做出任何合理预测的真正原因是可能执行的优化的可变性和复杂性。。。取决于平台、JVM版本等。此答案没有帮助,相同问题的更好答案可以在此处找到: