熱點JIT優化
回答
那麼,你應該掃描Brian Goetz的文章作爲例子。
簡言之,熱點可以和將:
- 內聯方法
- 加入在同一對象上相鄰塊
- 消除鎖如果顯示器不能從其他線程到達
- 消除死代碼(因此大多數微基準是無意義的)
- 刪除內存寫入非
volatile
變量 - 更換接口調用與直接法要求只執行一次方法
等等
跳轉到等效的本機機器碼,而不是JVM對操作碼的解釋。對於Java應用程序的高度使用部分(這相當於JVM的擴展),機器代碼中不需要模擬機器(JVM),可以提高速度。
當然,這是HotSpot的大部分。
this article有一箇舊的,但可能仍然有效的概述。
亮點似乎基於可用的運行時分析信息,以表演古典優化:
- JITting「熱點」爲本地代碼
- 自適應內聯 - 內聯最常調用實現對某個方法分派以避免龐大的代碼大小
而一些次要的代碼,如分配短生命的對象更便宜,以及各種其他較小的優化,再加上任何其他廣告自該文章發表以來。
還有一個更詳細的official whitepaper,和一個相當基本事實HotSpot Internals wiki page,其中列出瞭如何編寫快速Java代碼應該讓你推斷什麼用例進行了優化。
有上的Jikes RVM網站使用現代JVM在優化一個偉大的演講: ACACES’06 - Dynamic Compilation and Adaptive Optimization in Virtual Machines
它討論了架構,折衷,測量和技術。並且命名JVM至少20件事情來優化機器代碼。
我認爲有趣的東西是常規編譯器無法做到的與JIT相反的事情。內聯方法,消除死代碼,CSE,實時分析等。都是由你的普通C++編譯器完成的,在這裏沒有什麼「特別的」
但是基於樂觀的假設優化某些東西,然後如果它們最終會錯誤的時候去優化呢? (假設一個特定的類型,刪除分支,如果沒有完成,將會失敗,以後無論如何......)如果我們可以保證現在只存在一個類,那麼刪除虛擬調用(又是隻能可靠地與去最優化一起工作的東西)?自適應優化是我認爲真正區分JIT和運行C++編譯器的一件事。
也許還會提到由JIT完成的運行時概要分析,以分析應該應用哪種優化(儘管如此,並非所有配置文件指導的優化都是唯一的)。
- 1. 沒有JIT優化
- 2. JIT優化器是否優化乘法?
- 3. PyPy JIT調用優化
- 4. java.util.EmptyStackException在JIT /預熱
- 5. 優化jQuery熱鍵
- 6. JIT優化它僅修改sequentaly
- 7. 智能JVM和JIT微優化
- 8. JIT適用多少指令級優化?
- 9. Java優化:僅字節碼vs JIT
- 10. JVM閒置後JIT去優化
- 11. 印刷Java的熱點JIT的彙編代碼
- 12. 熱點JVM字節碼解釋器是一個跟蹤JIT嗎?
- 13. Webpack - 優化編譯時間(熱重載)
- 14. 優化Rails中的熱切加載
- 15. 使用構建優化器的AOT和JIT
- 16. 編譯器的邊界檢查/ JIT優化Java中環和C++
- 17. .NET JIT是否優化嵌套的try/catch語句?
- 18. 如何模擬JIT優化代碼並查看更改?
- 19. CLR語言優化。語言編譯器VS JIT編譯器
- 20. 的Android JIT編譯器:是編譯/方法優化
- 21. .NET JIT編譯器會優化一個方法調用嗎?
- 22. jit優化switch語句時分支太少嗎?
- 23. 有關Android優化的任何文檔 - JAVAC vs JIT vs Dalvik
- 24. 可以JIT優化這種不必要的呼叫嗎?
- 25. 如果優化已啓用,JIT將始終內聯此方法?
- 26. 如何編寫Java JIT優化友好代碼?
- 27. JVM JIT編譯器如何優化「重複」Java代碼?
- 28. 抑制模塊負載上的JIT優化(僅限管理)
- 29. C#編譯器和JIT都做了什麼樣的優化?
- 30. JIT可以防止優化方法調用嗎?
太棒了!感謝和+1。 – alf
似乎已死亡,請嘗試http://www.complang.tuwien.ac.at/andi/ACACES06.pdf – user60561