2011-08-03 29 views
2

像其他語言一樣,Java是否可以在編譯時或在JIT時間內嵌入一個方法?Java是否有一個編譯器指令來內聯一個方法?

我們有很多方法只調用超級方法。這表明它不會忘記重寫該方法。

例如,您已經覆蓋了equals方法,但使用了與超級實現相同的哈希碼。這爲後來的開發人員清楚,哈希碼方法不會忘記實現。這同樣適用於setter和getter或者添加和刪除。

但是編譯器應該內聯這個方法。

+0

可能重複[是否有內聯函數在java](http://stackoverflow.com/questions/2096361/are-there-inline-functions-in-java)? – jw013

回答

4

Java編譯器在編譯時做了很少的優化。

相反,JIT在運行時根據應用程序的實際使用情況進行大多數優化。它可以內聯方法,甚至可以使用兩種「虛擬」方法。

1

沒有java不。這在Java上並不是一個有意義的概念。

至於hashCode和equals的討論,一些IDE和風格檢查器會警告你這類錯誤,但我沒有看到它與'inline'有什麼關係。

1

我不認爲這可以在Java編譯期間內聯,因爲Java中的所有函數都是虛擬的,並且直到運行時才知道實際調用了哪個方法,它可能是子類中的一個。

但是,我不認爲你需要擔心這些事情,因爲HotSpot編譯器應該非常適合優化在應用程序運行時隨時隨地調用的代碼。

0

將方法標記爲final爲JIT編譯器提供了一個關於如何處理此方法的重要提示。你不能強迫它內聯該方法,但給JIT更多的明確信息只能提供幫助。

相關問題