2012-07-20 48 views
1

我知道,使用一种方法,而不是一行一行地做所有事情,所以让我们把这个假设分开。是否添加了许多方法来降低性能?

我在问自己,如果做同样的事情调用一个方法需要更多的时间(对于方法的调用),或者想不到,想象生成的字节代码是相同的。

回答

5

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

+0

当然,因为这是Java,所以要注意的另一件事是JVM将查看热点方法并花费更多时间来优化它们。 – Robert 2012-07-20 19:05:10

1

串行程序(一步一步)比运行方法快,因为你必须花时间扫描代码找到方法并运行它。然而这一次是小到对性能有任何影响。

2

的说法是正确的达到一定限度,如调用一个方法将导致建立一个运行时堆栈,其中包含行执行代码中,局部变量,的程序计数器,如果它的非静态,那么“this”也是。

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

此外,如果你是没有使用方法,那么这将是DRY原则的违反(一次且仅一次),其中指出,人们应该保持在一个单说理的地方所有的信息和行为。

1

确定模块化代码是一个好主意,它不应该在性能上产生显着差异。

除外。它可能会产生很大的差异,原因不得不与技术,但与人性。

是很自然的看线,如

a = b + c; 

Foo(bar); 

,并认为它们的价格差不多,他们可能,但可能没有。

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

然后,我在做性能调整时发现的是我抓取堆栈样本,对于他们来说20-30级的深度并不罕见。 如果我检查堆栈样本中的每个调用,几乎每个调用都很合理。

差不多。

只需要一个非真正必要的电话就可以完全击败表演。 如果我只在两(2)个堆栈样本上看到这样的事情,我知道我发现了一个很好的优化机会。 例如,如果我抽取三个样本并在其中两个样本上看到,则可以节省的时间比例在2/3附近。换句话说,加速因子可以在的三倍范围内

相关问题