在性能方面,什么';在Java中,使用多个操作执行一个for或每个操作执行多个for的影响是什么?

在性能方面,什么';在Java中,使用多个操作执行一个for或每个操作执行多个for的影响是什么?,java,time-complexity,Java,Time Complexity,我关心的是提高源代码的可读性,它涉及到通过将大型方法分解为更小(简洁)的方法来减小它们的大小。简而言之,假设我有一个非常单一的方法,可以做很多不同的事情,例如: public void verHugeMethod(列出人员){ 用于(人:人){ totalAge+=person.getAge(); totalHeight+=person.getHeight(); totalWeight+=person.getWeight(); //更多关于类变量的计算。。。 } } 我想把方法改成这样: pu

我关心的是提高源代码的可读性,它涉及到通过将大型方法分解为更小(简洁)的方法来减小它们的大小。简而言之,假设我有一个非常单一的方法,可以做很多不同的事情,例如:

public void verHugeMethod(列出人员){
用于(人:人){
totalAge+=person.getAge();
totalHeight+=person.getHeight();
totalWeight+=person.getWeight();
//更多关于类变量的计算。。。
}
}
我想把方法改成这样:

public void calculateTotalAge(列出人员){
用于(人:人){
totalAge+=person.getAge();
}
}
公共空间计算总高度(列出人员){
用于(人:人){
totalHeight+=person.getHeight();
}
}
公共void calculateTotalWeight(列出人员){
用于(人:人){
totalWeight+=person.getWeight();
}
}
//更多关于类变量的计算。。。
我关心的是应用这种重构时的性能(时间和内存)。对于一小部分人来说,这当然不是一个问题,但我担心这个列表的渐进增长

例如,对于更老式的
For
,我可以看到以下影响:

//选项1
公共void方法1(){//O(1)+O(3n)
int i=0;//O(1)
while(inti
我知道Java如何将指令转换为
iterables
。 因此,我的问题是:

  • Java在执行或编译方面是否有一些优化
  • 我应该关注这种性能问题吗

  • 注意:我知道在渐进增长和Big-O表示法方面,我们应该忽略常量,但我只是想知道这种情况如何应用于Java。

    如果您完成Big-O分析,您将看到这两个选项都减少到
    O(n)
    。它们具有相同的复杂性

    它们可能没有相同的性能,但复杂性和复杂性分析(以及Big-O表示法)不用于测量或预测性能。实际上,对于足够小的
    n
    值,
    O(n)
    算法可能比
    O(1)
    算法性能更好


    Java在执行或编译方面是否有一些优化

    对。JIT编译器(在运行时)进行大量优化。然而,我们无法预测选项1和选项2是否具有同等的性能

    我应该关注这种性能问题吗

    是和否

    这取决于性能对项目是否/有多重要。对于许多项目1,与其他项目相比,应用程序性能并不重要;e、 g.满足所有功能要求,始终计算正确答案,不崩溃,不丢失更新等

    当性能成为关注点时,这段代码(在代码库中的成百上千行代码中)不一定值得优化。并非所有代码都是相等的。如果此代码只是偶尔执行,那么优化它可能对总体性能的影响最小

    标准准则是避免过早优化。等到你的代码正常工作。然后创建一个基准,用于测量实际工作中应用程序的性能。然后分析运行基准测试的应用程序,找出代码的哪些部分是性能热点。。。并将优化工作重点放在热点上


    1-关键是必须在项目的所有其他要求和约束条件下考虑性能。如果你过早地在绩效上花费太多时间,你很可能会错过最后期限,等等。更不用说在优化错误代码上浪费精力了