Java 哪种处理两个重复操作的方式完成得更快?

Java 哪种处理两个重复操作的方式完成得更快?,java,performance,for-loop,Java,Performance,For Loop,一般来说,这两个示例代码段的处理速度是否有显著差异,如果有,哪些应该完成得更快?假设“processA(int)”和“processB(int)”是两个示例共有的空白 for(int x=0;x<1000;x++){ processA(x); processB(x); } for(int x=0;x单循环案例将包含更少的指令,因此将运行得更快 但是,除非processA和processB是非常快速的函数,否则这种实质性的重构将给您带来微不足道的性能提升 如果这是生产代码,

一般来说,这两个示例代码段的处理速度是否有显著差异,如果有,哪些应该完成得更快?假设“processA(int)”和“processB(int)”是两个示例共有的空白

for(int x=0;x<1000;x++){
    processA(x);
    processB(x);
}

for(int x=0;x单循环案例将包含更少的指令,因此将运行得更快

但是,除非
processA
processB
是非常快速的函数,否则这种实质性的重构将给您带来微不足道的性能提升


如果这是生产代码,您也应该小心,因为可能会有副作用。您应该在测试相关代码的单元测试框架的上下文中进行更改。在C++中,例如,代码>代码>代码>可以通过引用传递,并且可以通过函数修改,当然java没有这样的危险,但是可能还有其他原因,为什么所有的代码>进程< /COD>函数必须在所有进程B < /C>函数之前运行,程序注释可能无法说明这一点。.

当然,融合这两个循环会更快。(一些编译器会自动进行优化。)速度有多快?这取决于循环运行的迭代次数。除非迭代次数非常高,否则可以预期改进将是最小的。

第一段代码速度更快,因为它只有一个for循环


但是,如果您需要在processA()执行n次之后和processB()之前执行某些操作的循环开始时,第二种选择将是理想的。

第一种情况将比第二种情况稍快一些,因为for循环本身对性能有影响。但是,您应该问自己的主要问题是:这种影响对我的程序有意义吗?如果没有,您应该选择清晰可读的代码

在这种情况下需要记住的一点是,JVM(Java虚拟机)进行了大量优化,在您的情况下,JVM甚至可以摆脱for循环,并将代码重写为1000个对processA()和processB()的连续调用。因此,即使您有两个for循环,JVM也可以摆脱这两个循环,使您的程序比第一种情况更优化

要基本了解方法调用、成本和JVM,您可以阅读以下短文:


第一个循环(同时运行两个循环的单个循环)会更快(假设A、B是独立的,并且代码是连续的,中间没有遗漏的东西)。这只是简单地计算操作数,因为在一个循环中,您保存了1000个对+++的调用。除此之外,我不知道有什么区别。您还保存了1000个x到1000的比较。@BrettOkken@Elayeek我很确定编译器/JVM会完成1000个对x的比较(以及1000个对+++的调用)(尤其是因为
1000
是硬编码的)因此,第一个示例相对于第二个示例的改进充其量是微不足道的。@Ceiling Gecko我只是简单地指出,虽然Elayeek只提到了对++x的调用,但也有x与1000的比较。我同意,性能上可能没有什么差异,特别是如果执行得足够优化的话。
for(int x=0;x<1000;x++){
    processA(x);
}
for(int x=0;x<1000;x++){
    processB(x);
}