亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JVM如何決定JIT編譯方法(將方法歸類為“熱”)?

JVM如何決定JIT編譯方法(將方法歸類為“熱”)?

ABOUTYOU 2019-11-13 14:23:05
我已經使用過-XX:+PrintCompilation,并且我知道JIT編譯器的基本技術以及為什么使用JIT編譯。但是我仍然沒有找到JVM如何決定JIT編譯方法的方法,即“何時到了JIT編譯方法的正確時間”。我假設每個方法都開始被解釋,并且只要不將其歸類為“熱方法”,就不會編譯嗎?我腦海里有些東西我讀到,當一個方法執行至少10.000次(解釋該方法10.000次后,將被編譯)時,該方法被視為“熱”,但我必須承認不知道這個或我在哪里讀過。所以總結一下我的問題:(1)是否對每種方法都進行了解釋,只要它沒有被歸類為“熱”方法(因此已經被編譯),或者即使不是“熱”方法也有理由被編譯嗎?(2)JVM如何將方法分為“非熱”和“熱”方法?執行次數?還要別的嗎?(3)如果“熱”方法有某些閾值(如執行次數),是否有Java標志(-XX:...)設置該閾值?
查看完整描述

3 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

HotSpot編譯策略相當復雜,尤其是對于分層編譯而言,它在Java 8中是默認啟用的。它既不是執行次數,也不是CompileThreshold參數。


最佳解釋(顯然是唯一合理的解釋)可以在HotSpot源代碼中找到,請參閱advancedThresholdPolicy.hpp。


我將總結此高級編譯策略的要點:


執行從第0層(解釋器)開始。

編譯的主要觸發因素是

方法調用計數器i;

后柜臺b。向后分支通常表示代碼中的循環。

每次計數器達到一定的頻率值(TierXInvokeNotifyFreqLog,TierXBackedgeNotifyFreqLog),編譯政策被稱為決定下一步與當前正在運行的方法做什么。取決于的值i,b而C1和C2的編譯器線程的當前負載,可以決定


繼續在解釋器中執行;

開始分析翻譯;

在第3層使用C1編譯方法,并提供進一步重新編譯所需的完整配置文件數據;

C1在第2層的編譯方法,沒有概要文件,但有可能重新編譯(不太可能);

最后在第1層使用C1編譯方法,沒有配置文件或計數器(也是不太可能)。

這里的關鍵參數是TierXInvocationThreshold和TierXBackEdgeThreshold??梢愿鶕幾g隊列的長度為給定方法動態調整閾值。


編譯隊列不是FIFO,而是優先級隊列。


具有概要數據(第3層)的C1編譯代碼的行為類似,不同之處在于切換到下一個級別(C2,第4層)的閾值要大得多。例如,解釋的方法可以在調用約200次后在第3層進行編譯,而C1編譯的方法則需要在調用5000次以上后在第4層進行重新編譯。


特殊策略用于方法內聯。即使它們不是“熱”的,它們也可以內聯到調用者中。只有頻繁調用()時InlineFrequencyRatio,才可以內聯更大的方法InlineFrequencyCount。


查看完整回答
反對 回復 2019-11-13
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

控制此的主要參數是 -XX:CompileThreshold=10000

Java 8熱點現在默認使用分層編譯,默認情況下使用從1級到4級的多個編譯階段。我相信1并不是最優化的。級別3為C1(基于客戶端客戶端),級別4為C2(基于服務器編譯器)

這意味著可以比您預期的更早進行一些優化,并且可以在達到10K閾值后繼續進行優化。我看到的最高級別是轉義分析,在一百萬次調用后消除了StringBuilder。

注意:循環多次會觸發編譯器。例如,一個10K次的循環就足夠了。

1)在方法被認為足夠熱之前,將對其進行解釋。但是,某些JVM(例如Azul Zing)可以在啟動時編譯方法,并且您可以強制Hotspot JVM通過內部API編譯方法。Java 9可能還具有AOT(提前)編譯器,但AFAIK仍在研究中

2)調用次數或迭代次數。

3)是-XX:CompileThreshold=的。


查看完整回答
反對 回復 2019-11-13
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

您還有其他資料可供我閱讀嗎?我知道C1和C2,但我還沒有聽說過1-4級編譯(Interpeter,C1,C2為3級)。而且,您基本上可以說,在下方可以認為一種方法很熱門CompilerThreshold。那么這個門檻是多少?我是否可以期待某個方法被稱為“ Times ”時最晚被認為是熱門方法CompilerThreshold?

查看完整回答
反對 回復 2019-11-13
  • 3 回答
  • 0 關注
  • 793 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號