91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么優化JIT

發布時間:2021-08-24 17:39:05 來源:億速云 閱讀:164 作者:chen 欄目:編程語言

本篇內容介紹了“怎么優化JIT”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

什么是JIT

JIT 是 just in time 的縮寫, 也就是即時編譯編譯器。

在運行時 JIT 會把翻譯過的機器碼保存起來,以備下次使用,因此從理論上來說,采用該 JIT 技術可以接近以前純編譯技術。下面我們看看,JIT 的工作過程。

怎么優化JIT

備注:寄存器的使用是編譯器的一個非常普遍的優化。寄存器的速度比主存快很多。

怎么優化JIT編譯

  • 初級調優:客戶模式或服務器模式

  • 中級編譯器調優 (-cient,-server 或是-xx:+TieredCompilation)

    • 優化代碼緩存 (–XX:ReservedCodeCacheSize)

    • 編譯閾值 (-XX:CompileThreshold)

    • 檢查編譯過程 (XX:+PrintCompilation)

  • 高級編譯器調優

    • 編譯線程 (-XX:CICompilerCount)

從優化的角度講,最簡單的選擇就是使用 server 編譯器的分層編譯技術,這將解決大約 90%左右的與編譯器直接相關的性能問題。最后,請保證代碼緩存的大小設置的足夠大,這樣編譯器將會提供最高的編譯性能。

HotSpot中的JIT編譯器

1.1 編譯器和解釋器

HotSpot中有編譯器和解釋器并存。

HotSpot中內置兩個JIT編譯器:

JVM根據自身版本和機器硬件性能自動選擇

  • Client Compiler,簡稱C1,-client參數強制

  • Server Compiler,簡稱C2, -server參數強制

解釋器和編譯器搭配使用成為混合模式(Mixed Mode)

  • 用-Xint參數強制JVM運行與解釋模式,全部用解釋方式,編譯器不介入

  • 用-Xcomp強制JVM運行于編譯模式,優先采用編譯方式

分層編譯:根據比那一起編譯,優化的規模耗時,劃分出不同的編譯層次

  • 第0層,程序解釋執行,解釋器不開啟性能監測功能,觸發第一層編譯

  • 第1層,也叫C1編譯,將字節碼編譯為本地代碼,進行簡單, 可靠的優化,如有必要,加入性能監測的邏輯

  • 第2層(或者2層以上),也叫C2編譯,將字節碼比那一位本地代碼,但會開啟一些編譯耗時較長的優化,甚至根據性能監控信息進行一些不可靠的激進優化

分層編譯后,Client Compiler和Server Compiler將會同時工作,代碼可能會被多次編譯,用Client獲得更高的編譯速度,用Server獲得更好的編譯質量,解釋執行的時候無需搜集性能監控信息

1.2 編譯對象和觸發條件

熱點代碼有兩類:

  • 多次調用的方法

  • 多次執行的循環體,實際上也會以整個方法作為編譯對象

判斷熱點的方法主要有兩種:

基于采樣的熱點探測(Sample Based Hot Spot Detection):周期性檢查各個線程的棧頂,發現某個(某些)方法經常出現在棧頂,就是熱點方法 有點簡單高效,可以獲取方法調用關系(將調用堆棧展開即可) 缺點是很難精確確認方法熱度,容易受到線程阻塞等外界因素影響 基于計數器的熱點探測(Counter Based Hot Spot Detection):為每個方法(甚至代碼塊)建立計數器,統計方法調用次數,如果執行超過閾值就認為是熱點方法。缺點是實現較為困難。優點是結果更精確。

基于計數器的探測: Client模式下默認1500次,Server下默認10000次,根據參數-XX:CompileThreshold設定。 調用一個方法,先檢查是否存在JIT編譯版本本地代碼,存在優先使用本地代碼,不存在將計數器加1。然后判斷調用計數器和回邊計數器之和是否大于閾值,如果超過,用JIT編譯器提交編譯請求。JIT編譯完成后方法調用入口就被系統換成新的。下次調用已編譯版本。 計數器熱度衰減(Counter Decay超過一定的時間限度,方法的調用次數仍未達到閾值,方法計數器減少一半。在垃圾收集期間執行,用-UseCounterDecay來關閉,以統計絕對次數。用-XX:CounterHalfLifeTime設置半半衰周期。 回邊計數器:統計方法中方法體代碼執行的次數,在字節碼中遇到控制流向后跳動的指令成為回邊(Back Edge)。 回邊計數器閾值可以用-XX:OnStackReplacePercentage來間接調整。 回邊計數器沒有熱度衰減過程。

1.3 編譯過程

JVM默認情況下對于即時編譯請求在編譯完成之前,都按照解釋方式執行,編譯動作在后臺線程執行

參數-XX:-BackgroundCompilation禁止后臺編譯,此時編譯請求會等待,直到編譯完成后直接執行本地代碼

  • Client Compiler:關注局部優化,簡單快速,放棄耗時的長時優化

  • Server Compiler:面向服務端,高性能,復雜,較緩慢

“怎么優化JIT”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jit
AI

左权县| 康马县| 呼图壁县| 武穴市| 天津市| 五台县| 昔阳县| 永靖县| 汕尾市| 丰城市| 阿图什市| 永寿县| 永新县| 太仆寺旗| 巴塘县| 兴城市| 红安县| 普兰县| 丰原市| 呼伦贝尔市| 柘城县| 防城港市| 临西县| 东港市| 阿城市| 临高县| 天峻县| 陆良县| 泸水县| 岑巩县| 临沧市| 宣城市| 安义县| 潞城市| 景泰县| 青河县| 广安市| 广德县| 太原市| 德庆县| 哈巴河县|