假设调用静态方法与分配和垃圾收集整数的速度相比是否正确?
或者,换句话说,fh1或fh2会更好吗?在fh1中,避免了分配,但fh2似乎更简单。在这种情况下,G.f()是一种相对简单的方法,经常被调用。 fh2和fh1也会经常被调用(可能每秒多达30次)。
伪代码:
class G {
static method int f() {.......}
}
class H {
method fh1(){
somemethod1(G.f());
somemethod2(G.f());
somemethod3(G.f());
}
method fh2(){
int a = G.f();
somemethod1(a);
somemethod2(b);
.....
}
}
答案 0 :(得分:1)
我在这种特殊情况下使用静态方法的原因是int值是否有可能发生变化。换句话说,如果G.f()执行某些逻辑并且第一次调用可能与第10次调用不同,请确保使用静态方法。诸如此类的静态方法提供了一种通过重用逻辑并将逻辑保持在可管理状态来减少代码的方法,因此如果需要更改逻辑,则只需在一个位置更改它。
话虽如此,在方法fh1中,如果G.f()在fh1()中三次单独调用G.f()所需的时间跨度会发生变化,那么改变结果的可能性是多少?可能非常小,但仍值得考虑。
我可能会选择fh2()来保持一致性。性能差异可能微不足道。
答案 1 :(得分:1)
话虽如此,fh2会更有效率,分配比函数调用更便宜。
答案 2 :(得分:1)
你的例子中没有“分配”或“垃圾收集”整数。
相反,在fh2中,生活在堆栈上,并且不需要额外的时间来分配/解除分配它。
方法调用完成所需的时间取决于方法的代码。单独的呼叫很快,但仍然比没有慢。因此,我会使用fh2版本。
答案 3 :(得分:0)
我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源。然而,我们不应该放弃那个关键的3%的机会。一个好的程序员不会因为这样的推理而自满,他会明智地仔细研究关键代码;但只有在识别出代码之后
©Donald Knuth