<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                目前主流的兩款商用Java虛擬機(HotSpot、OpenJ9)里,Java程序最初都是通過解釋器(Interpreter)進行解釋執行的,當虛擬機發現某個方法或代碼塊的運行特別頻繁,就會把這些代碼認定為“熱點代碼”(Hot Spot Code),為了提高熱點代碼的執行效率,在運行時,虛擬機將會把這些代碼編譯成本地機器碼,并以各種手段盡可能地進行代碼優化,運行時完成這個任務的后端編譯器被稱為即時編譯器 ### JIT編譯器 即時編譯(Just-in-time Compilation,JIT)是一種通過在運行時將字節碼翻譯為機器碼,從而改善字節碼編譯語言性能的技術。在HotSpot實現中有多種選擇:C1、C2和C1+C2,分別對應client、server和分層編譯。 1. C1編譯速度快,優化方式比較保守; 2. C2編譯速度慢,優化方式比較激進; 3. C1+C2在開始階段采用C1編譯,當代碼運行到一定熱度之后采用C2重新編譯; 解釋器與編譯器搭配使用的方式在虛擬機中被稱為“混合模式”(Mixed Mode),用戶也可以使用參數“-Xint”強制虛擬機運行于“解釋模式”(Interpreted Mode),這時候編譯器完全不介入工作,全部代碼都使用解釋方式執行。另外,也可以使用參數“-Xcomp”強制虛擬機運行于“編譯模式”(Compiled Mode),這時候將優先采用編譯方式執行程序,但是解釋器仍然要在編譯無法進行的情況下介入執行過程 ### JIT參數配置 TieredCompilation:表示是否開啟JVM分層編譯(JDK8+默認開啟,JDK8以前的版本默認關閉) ``` -XX:+TieredCompilation --開啟 -XX:-TieredCompilation --關閉 ``` ### 編譯閾值 即時編譯JIT只在代碼段執行足夠次數才會進行優化,在執行過程中不斷收集各種數據,作為優化的決策,所以在優化完成之前,例子中的User對象還是在堆上進行分配。 那么一段代碼需要執行多少次才會觸發JIT優化呢?通常這個值由-XX:CompileThreshold參數進行設置: 1. 使用client編譯器時,默認為1500; 2. 使用server編譯器時,默認為10000; 意味著如果方法調用次數或循環次數達到這個閾值就會觸發標準編譯,更改CompileThreshold標志的值,將使編譯器提早(或延遲)編譯。 除了標準編譯,還有一個叫做OSR(On Stack Replacement)棧上替換的編譯,如上述例子中的main方法,只執行一次,遠遠達不到閾值,但是方法體中執行了多次循環,OSR編譯就是只編譯該循環代碼,然后將其替換,下次循環時就執行編譯好的代碼,不過觸發OSR編譯也需要一個閾值,可以通過以下公式得到。 ``` -XX:CompileThreshold = 10000 -XX:OnStackReplacePercentage = 140 -XX:InterpreterProfilePercentage = 33 OSR trigger = (CompileThreshold * (OnStackReplacePercentage - InterpreterProfilePercentage)) / 100 = 10700 ``` 其中trigger即為OSR編譯的閾值 參考資料 [https://www.jianshu.com/p/20bd2e9b1f03](https://www.jianshu.com/p/20bd2e9b1f03) http://www.infoq.com/cn/articles/OpenJDK-HotSpot-What-the-JIT
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看