例如,在显微镜下查看代码时,第一个代码块是否比第二个代码块使用更多的计算时间?
代码块1:
method1() {
do something;
call method2;
}
method2() {
do something simple like assign a variable value;
}
代码块2:
method1(){
do something;
do something simple like assign a variable value;
}
非常简单,但是我想看看这里是否有人知道考虑这一点的价值是什么(例如,以最短的计算时间优化程序)。
作为一个例子,我了解到电路中的门具有有限的“Delta延迟”,在该延迟中,可以加起来看到在考虑设计中的时钟速度时电路将具有的最大延迟。 Java有类似于Delta延迟的东西吗?
答案 0 :(得分:6)
也许,也许不是。通过一个称为内联的进程,JVM可以执行第一个代码,就像它是第二个代码一样。见What is method inlining?
无论如何,在编写非平凡的应用程序时,您应该专注于可读性和可维护性,而不是最小的性能提升。在大多数情况下,资源使用方面的差异很难(如果有的话)显而易见。另一方面,对于人类读者来说,做太多不同事情的长方法可能是一种真正的痛苦。
答案 1 :(得分:4)
这实际上取决于method2()
中的内容以及堆栈上有多少参数。经验法则是,通过降低代码可维护性将方法结合在一起从来都不是一个好主意,速度的罕见节省接近统计侥幸,而在逻辑中引入错误或减速的机会要高得多。
如果你真的非常关心性能,我建议你学习JMH和使用例如微观基准测试。 this tutorial。这将是非常有启发性的,随着时间的推移,您将了解某些模式。
E.g。以某种风格进行编码可以使您的数据完全驻留在CPU缓存中,从而提供数量级的加速,相对于额外的方法调用,在绝对最坏的情况下可能只需要一个小百分点。