我知道使用一种方法而不是一行一行地做得更清楚,所以让我们把这个假设分开。
我问自己,调用方法做同样的事情需要花费更多时间(对于方法的调用),想象生成的字节码是相同的。
答案 0 :(得分:5)
理论上,是的,在大多数情况下,您正在创建一个新的堆栈框架来执行计算。实际上,你几乎不会注意到性能的提升。对这个问题的完整讨论有点复杂,它与生成的字节代码和运行的机器/虚拟机的引擎盖性能有关。
答案 1 :(得分:2)
1。您的参数达到了一定限度,因为调用方法会导致创建运行时堆栈,其中包含行执行代码,本地变量,程序计数器,如果非静态,则“this”。
2. 但这不会对HighSpeed处理器和强大的IDE产生任何影响。
3. 此外,如果你没有使用这些方法,那么就是违反DRY原则(不要重复自己),这表明应该保留所有信息和行为在一个明智的地方。
答案 2 :(得分:1)
好的串行程序(一步一步)比运行方法更快,因为你必须花时间扫描代码并找到方法并运行它。但是,这个时间要小到对性能产生任何影响。
答案 3 :(得分:1)
确保模块化代码是一个好主意,它不应该在性能上产生明显的差异。
除了。它可能会产生很大的不同,原因不是技术,而是人性。
看看像
这样的行是很自然的a = b + c;
和
Foo(bar);
并且认为它们的成本大致相同,但它们可能会,但可能不会。
问题是,方法是附加代码的磁铁,包括额外的方法调用。
然后我在进行性能调整时发现的是抓取堆栈样本,并且它们的深度为20-30级并不罕见。 如果我检查堆栈样本上的每个调用,几乎每个调用都很有意义。
近。
所有这一切都是为了完全打击表现而从那些20-30中不必要的召唤。 如果我在两(2)个堆栈样本上看到这样的东西,我知道我已经找到了一个很好的优化机会。 例如,如果我拍摄三个样本并在其中两个样本上看到,那么可以节省的时间部分就在2/3附近。 换句话说,加速因子可以在三次的范围内。