Java8—有许多方法会消耗更多的资源吗?

Java8—有许多方法会消耗更多的资源吗?,java,optimization,java-8,mathematical-optimization,Java,Optimization,Java 8,Mathematical Optimization,例如,当在显微镜下观察代码时,第一个代码块比第二个代码块使用更多的计算时间吗 代码块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; } 非常简单,但我想看看这里是否

例如,当在显微镜下观察代码时,第一个代码块比第二个代码块使用更多的计算时间吗

代码块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有类似于增量延迟的东西吗?

可能有,可能没有。通过一个称为内联的过程,JVM可以像执行第二个代码一样执行第一个代码。看


无论如何,在编写非平凡的应用程序时,您应该关注可读性和可维护性,而不是最小的性能增益。在大多数情况下,资源使用方面的差异即使有,也很难明显。另一方面,对于人类读者来说,执行太多不同操作的长方法可能是一个真正的难题。

这实际上取决于
method2()
中的内容以及堆栈上有多少参数。经验法则是,通过降低代码可维护性将方法组合在一起从来都不是一个好主意,速度上的罕见节约接近于统计上的侥幸,而在逻辑上引入错误或减速的机会要高得多

如果您真的那么关心性能,我建议您学习JMH和微基准测试,例如。这将是非常有启发性的,随着时间的推移,你将了解某些模式


例如,以某种方式编码可以使数据完全驻留在CPU缓存中,从而提供数量级的速度,而在绝对最坏的情况下,额外的方法调用可能只需要一个百分点。

不要浪费时间担心这一点,直到您可以通过基准测试证明这是您遇到的最严重的性能问题。JIT将内联方法,如果它认为这样更好;您应该专注于编写可读的、可维护的代码。通过使用简短的方法,您实际上可以获得性能。有一次,我手动拆分了一个很长的方法,并获得了40%的速度。JIT可以内联,但不能“概述”方法,因此可读性和性能通常是正相关的。