我聽到很多JVM JIT 可以做的事情,但沒有看到關於如何配置JIT實際上在給定的程序運行中實際執行的內容的很多信息。有很多關於使用-XX:+PrintCompilation
和-XX:+PrintOptoAssembly
的提示,但它會導致很難解釋的真正低級別的信息。一般來說,在優化過程中,我喜歡使用專用JIT預熱時間等基準測試套件進行通用操作,但我希望能夠看到哪些優化實際上正在觸發我的代碼。也許我的JVM考慮內聯一個特定的方法調用,但是關於它的一些事情使它決定不要,或者也許JIT無法避免在我的循環中進行數組邊界檢查,因爲我的表達式不明確和循環條件太模糊。我期望像YourKit這樣的工具支持某種形式的「JIT發生了什麼」,但我一直無法在YourKit或其他任何地方找到對它的支持。JVM JIT診斷工具和優化技巧
理想情況下,我只是想在JIT的優化程序運行過程中想到的一個大腦轉儲。假設我已經預熱了我的功能,並且決定將三種方法內聯到我的內部循環中,並將循環分成三部分,在中間部分沒有數組邊界檢查,我希望總結這些決定和動機爲他們。
我在這裏錯過了一些明顯的東西嗎? JVM性能感知型編程人員在優化緊密內部循環以確定發生了什麼時會執行什麼操作?當然,低級-XX
標誌不可能是唯一的選擇,他們可以嗎?我很高興提示如何在JVM上處理這種低級別的東西。不,這個問題不是過早優化的動機! :)
編輯:我想我想要的一些是-XX:+LogCompilation
,但我仍然好奇人們是否有這種活動的一般技巧和工具。
這個演講可能會給你一些關於如何可視化JVM內部的信息:http://www.infoq.com/presentations/Visualizing-Java-GC – sschaef 2013-04-28 02:29:02