内联带来的性能提升?
1、避免开销大的方法调用。
2、调用间优化。某一方法的调用过程,基于对上下文场景更加全面的理解,使得编译器在源代码层面及机器代码层面对方法进行优化。
为啥不能内联全部方法?
1、内联所带来的代码膨胀有时是无法接受的。
2、单个内联方法拥有多个实例,每个实例都要有自身的地址空间,因此它们消耗的缓存也相互独立,这样将减少有效的缓存空间而造成命中率下降。而且,内联方法多个缓存实例被清除出并且需要重新加载的可能性更大。因此,内联产生的方法调用和返回方面的性能提升,可能会被因为内联而导致的缓存性能锐减所所抵消,在涉及大规模方法时,这类问题尤为突出。
3、如果方法的实现是易变的,则不应将其内联,否则修改将可能引起大规模的重新编译。
4、递归方法内联可能会导致死循环。