以前用過C++,知道它裏面有一個內聯函數這個概念,一般情況用inline關鍵字修飾,在C++定義類時,那種寫中Class定義裏面的函數,也被編譯器當做內聯函數處理。
說了這麼多,還沒說什麼是內聯函數。所謂內聯函數就是指函數在被調用的地方直接展開,編譯器在調用時不用像一般函數那樣,參數壓棧,返回時參數出棧以及資源釋放等,這樣提高了程序執行速度。
現在該說Java了,對應Java語言中也有一個關鍵字final來指明那個函數是內聯的,例:
public final void doSomething() {
// to do something
}
內聯不一定好,當被指定爲內聯的方法體很大時,展開的開銷可能就已經超過了普通函數調用調用的時間,引入了內聯反而降低了性能,因爲在選擇這個關鍵字應該慎重些,不過,在以後高版本的JVM中,在處理內聯時做出了優化,它會根據方法的規模來確定是否展開調用。