第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

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

3 回答

?
臨摹微笑

TA貢獻1982條經(jīng)驗 獲得超2個贊

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


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


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


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

編譯的主要觸發(fā)因素是

方法調(diào)用計數(shù)器i;

后柜臺b。向后分支通常表示代碼中的循環(huán)。

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


繼續(xù)在解釋器中執(zhí)行;

開始分析翻譯;

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

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

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

這里的關鍵參數(shù)是TierXInvocationThreshold和TierXBackEdgeThreshold。可以根據(jù)編譯隊列的長度為給定方法動態(tài)調(diào)整閾值。


編譯隊列不是FIFO,而是優(yōu)先級隊列。


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


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


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

TA貢獻1862條經(jīng)驗 獲得超7個贊

控制此的主要參數(shù)是 -XX:CompileThreshold=10000

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

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

注意:循環(huán)多次會觸發(fā)編譯器。例如,一個10K次的循環(huán)就足夠了。

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

2)調(diào)用次數(shù)或迭代次數(shù)。

3)是-XX:CompileThreshold=的。


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

TA貢獻1851條經(jīng)驗 獲得超5個贊

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

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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號