1

我知道使用一种方法而不是一行一行地做所有事情要清楚得多,所以让我们把这个假设分开。

我在问自己做同样的事情调用一个方法是否需要更多时间(用于调用该方法),想象生成的字节码是相同的。

4

4 回答 4

5

从理论上讲,是的,在大多数情况下,您正在创建一个新的堆栈框架来执行计算。实际上,不,您几乎不会注意到性能受到影响。对这个问题的完整讨论有点复杂,它与生成的字节码和运行它的机器/虚拟机的底层性能有关。

于 2012-07-20T19:00:03.167 回答
2

1.你的论点有一定的限制,因为调用一个方法会导致创建一个运行时堆栈,其中包含执行代码的行局部变量程序计数器,如果它是非静态的,那么“this “也。

2.但这不会对高速处理器和强大的 IDE 产生任何影响。

3.此外,如果您不使用这些方法,那么将违反 DRY 原则(不要重复自己),该原则规定应将所有信息和行为保存在一个合理的地方。

于 2012-07-20T19:02:02.493 回答
1

当然,将代码模块化是个好主意,而且它不应该对性能产生明显的影响。

除了。它很可能会产生很大的不同,原因与技术无关,而与人性有关。

看起来像这样的线条是很自然的

a = b + c;

Foo(bar);

并认为它们的成本大致相同,它们可能会,但可能不会。

问题是,方法是额外代码的磁铁,包括额外的方法调用。

然后我在进行性能调优时发现我抓取了堆栈样本,它们的深度为 20-30 层并不罕见。如果我检查堆栈样本上的每个调用,几乎每个调用都非常合理。

几乎。

只需要从 20 到 30 人中打出一次并非真正必要的电话,就可以彻底打击性能。如果我在少至两 (2) 个堆栈样本上看到这样的东西,我知道我找到了一个优化的大好机会。例如,如果我取三个样本并在其中两个上看到,可以节省的时间分数在 2/3 附近。换句话说,加速因子可能在三倍的范围内。

于 2012-07-20T21:05:40.830 回答
1

串行程序(逐步)比运行方法更快,因为您必须花时间扫描代码以查找方法并运行它。然而,这个时间太小了,不会对性能产生任何影响。

于 2012-07-20T18:55:56.680 回答