2011-06-30 61 views
5

當你想從你的代碼中榨取性能的最後一點時,你會盡可能地利用JIT優化。例如,標記方法final以便簡化方法內聯,避免在關鍵位置出現多態性等。如何編寫Java JIT優化友好代碼?

但是我找不到任何參考或Java程序員可以使用'提示'JIT編譯器以更快的選項列表碼?我們不應該從JIT獲得低延遲性能的「最佳編程」練習列表嗎?

+0

不是您的問題的答案,但如果您對高性能Java感興趣,您可能會對鮮爲人知的[fastutil](http://fastutil.dsi.unimi.it/)庫感興趣。這是集合框架的高性能擴展。 –

+0

你能澄清你爲什麼對此感興趣嗎?你有性能問題嗎?或者純粹是學術嗎? :-) – drekka

+0

我可以通過調整GC或改進算法來解決性能問題。但是,如果我不得不超出這個範圍,例如圖像處理,模式識別等,我想知道我手中有哪些其他性能優化工具。你可以稱它爲學術。 – Sajid

回答

7

HotSpot的作者和其他人一再表示,最好的方法是編寫簡單直接的代碼。

+1

+1:JIT尋找它知道如何優化的常見模式。如果你編寫混亂的代碼或代碼時使用了不尋常的結構,它會混淆JIT(這很容易完成,它只是一個程序),它也不會優化代碼。 –

10

編寫JIT友好代碼的最好方法是編寫簡單直接的代碼,因爲這是JIT查找和知道如何優化的內容。沒有技巧!

另外不同的JVM有不同的JIT,所以爲了確保你的代碼能夠很好地適用於所有的JVM,你不能依賴它們中的任何一個。

提高JIT性能的常用方法是通過JVM的外部配置。由於目前大多數JVM都知道如何直接嵌入 代碼 小方法調用,大多數性能收益都來自配置垃圾收集器。這裏使用了很多努力來避免在收集時停止您的程序,並且您可以根據您對底層硬件配置方式的知識以及比其他方法更好的知識做出相應調整。但不是Java代碼,它需要簡單而直接。

+2

我建議您嘗試通過Cliff Click(Hotspot hacker,ex-Sun,曾在Azul Systems一段時間)找到幻燈片或PDF文件以查看「Java Technology Performance Myths Exposed」JavaOne talk。他的[博客](http://www.azulsystems.com/blog/)也總是有趣的JVM內部討論。而且,順便說一句,「make方法最終幫助內聯」「優化」只是一個神話。 – vanza

+0

@vanza那麼幻燈片很難找到。但是最後一個方法至少有一個好處:JIT不必以某種方式推斷沒有足夠的子類,但總是可以避免動態調用 - 在某些情況下應該獲得一些小的性能提升。這不是顯而易見的,但嘿;) – Voo

+1

@Voo:熱點已經儘可能避免動態調用(例如,接口或抽象類與單個具體類加載實現它),「最終」是不需要的。本着原始信息的精神,以及我一直聽到的JIT黑客的聲音:在代碼中有意義時使用「final」(和其他語言特性),而不是因爲您認爲它會使代碼更快。 – vanza