日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java内联_JAVA中的内联函数

發布時間:2024/7/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java内联_JAVA中的内联函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在說內聯函數之前,先說說函數的調用過程。

調用某個函數實際上將程序執行順序轉移到該函數所存放在內存中某個地址,將函數的程序內容執行完后,再返回到

轉去執行該函數前的地方。這種轉移操作要求在轉去前要保護現場并記憶執行的地址,轉回后先要恢復現場,并按原來保

存地址繼續執行。也就是通常說的壓棧和出棧。因此,函數調用要有一定的時間和空間方面的開銷。那么對于那些函數體

代碼不是很大,又頻繁調用的函數來說,這個時間和空間的消耗會很大。

那怎么解決這個性能消耗問題呢,這個時候需要引入內聯函數了。內聯函數就是在程序編譯時,編譯器將程序中出現

的內聯函數的調用表達式用內聯函數的函數體來直接進行替換。顯然,這樣就不會產生轉去轉回的問題,但是由于在編譯

時將函數體中的代碼被替代到程序中,因此會增加目標程序代碼量,進而增加空間開銷,而在時間代銷上不象函數調用時

那么大,可見它是以目標代碼的增加為代價來換取時間的節省。

在大學里學習寫C代碼時,我們都學到將一些簡短的邏輯定義在宏里。這樣做的好處是,在編譯器編譯的時候會將用

到該宏的地方直接用宏的代碼替換。這樣就不再需要象調用方法那樣的壓棧、出棧,傳參了。性能上提升了。內聯函數的

處理方式與宏類似,但與宏又有所不同,內聯函數擁有函數的本身特性(類型、作用域等等)

寫過C++代碼的應該都知道,在C++里有個內聯函數,使用inline關鍵字修飾。另外,寫在Class定義內的函數也會被

編譯器視為內聯函數。

那么,在java中的內聯函數長什么模樣呢?在java中使用final關鍵字來指示一個函數為內聯函數,例如:

Java代碼 ?

public?final?void?method1()?{

//TODO?something

}

這個指示并不是必需的。final關鍵字只是告訴編譯器,在編譯的時候考慮性能的提升,可以將final函數視為內聯函數。

但最后編譯器會怎么處理,編譯器會分析將final函數處理為內聯和不處理為內聯的性能比較了。

總結

以上是生活随笔為你收集整理的java内联_JAVA中的内联函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。