天天看点

Java 之 内联函数

       突然看到一个词----Inline Method(内联函数), 对于我这个菜鸟来说是不明白的,赶紧查了下资料。大致是这样的。

       所谓内联函数就是指函数在被调用的地方直接展开,编译器在调用时不用像一般函数那样,参数压栈,返回时参数出栈以及资源释放等,这样提高了程序执行速度。

       C++,内联函数这个概念,一般用inline关键字修饰;在C++定义类时,写中Class定义里面的函数,也被编译器当做内联函数处理。C++中是否为内联函数由自己决定,而在java中,则是由编译器决定的。

       Java不支持直接声明为内联函数的,如果想让他内联,只能够向编译器提出请求,最后是不是内联函数,是由编译器说了算。

        那么怎么申请呢?

       1.使用final,如

public final void function(){
    //TODO
}
           

        该方法在被调用时,会在调用处直接展开使用,从而提高程序执行速度。此外final关键字还有一个作用,防止fucntion方法在子类中被覆盖,如果你希望function是一个最终行为的话,那它应该被设计成final。

    内联不一定好,当被指定为内联的方法体很大时,展开的开销可能就已经超过了普通函数调用调用的时间,引入了内联反而降低了性能,因为在选择这个关键字应该慎重些,不过,在以后高版本的JVM中,在处理内联时做出了优化,它会根据方法的规模来确定是否展开调用。

    2.函数为private,也可能是内联

     总的来说,一般的函数都不会被当做内联函数,只有声明了final后,编译器才会考虑是不是要把函数变成内联函数。      

   本文是整理了一下两篇文章而来的,

  http://qaohao.iteye.com/blog/450299

  http://www.2cto.com/kf/201211/165952.html

  我认为他们都解释的很简单易懂,所以很多是这两篇文章的原话。如果有哪位大牛看到后认为哪里理解有误,或是有更好的理解,敬请赐教

继续阅读