方法调用在执行操作时要求在执行前保护现场并记忆执行的地址,执行后要恢复现场,并按原来保存的地址继续执行。 因此,方法调用会产生一定的时间和空间方面的开销。尤其对于那些方法体代码不是很大,又频繁调用的方法来说,这个时间和空间的消耗会很大。这个时候会发生方法内联的优化行为,即把目标方法的代码复制到发起调用的方法之中,避免发生真实的方法调用。
java会把那些频繁调用的方法代码,自动识别为热点方法,并对这些代码进行方法内联优化。方法发生内联时会有一些判断规则,即:
-
经常执行的方法,默认情况下,方法体大小 < 325 字节的都会进行内联;
-
不是经常执行的方法,默认情况下,方法大小 < 35 字节才会进行内联;
针对以上规则,我们在编写代码时可以采用一些方式增加方法内联发生的机会,以达到提高代码性能的目的。如:
-
在编程中,避免在一个方法中写大量代码,习惯使用小方法体;
-
尽量使用 final、private、static 关键字修饰方法,编码方法因为继承,会需要额外的类型检查;