<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                文章出處鏈接:https://www.zhihu.com/question/19748817/answer/88610988 參考文章:[Jvm系列1—運行時內存結構](http://gityuan.com/2015/10/17/java-memory/) 這個問題,要從線程和內存兩個角度來講解。 **一、線程** 線程從linux角度來看就是task\_struct結構體,是一段可執行的代碼,CPU調度的最小單位,這個不是樓主問題的重點,這里就不展開了; **二、其次關于Java棧和的寄存器問題,先來看看jvm的內存模型** jvm內存模型:Java代碼是運行在Java虛擬機之上的,由Java虛擬機通過解釋執行(解釋器)或編譯執行(即時編譯器)來完成,故Java內存模型,也就是指Java虛擬機的運行時內存模型。 運行時內存模型,分為線程私有和共享數據區兩大類,其中線程私有的數據區包含程序計數器、虛擬機棧、本地方法區,所有線程共享的數據區包含Java堆、方法區,在方法區內有一個常量池。java運行時的內存模型圖,如下: ![](https://pic4.zhimg.com/50/be87523a50083ebbbd8fa83649568e48_hd.jpg?source=1940ef5c) 從圖中,可知內存分為線程私有和共享兩大類: (1)線程私有區,包含以下3類: * 程序計數器,記錄正在執行的虛擬機字節碼的地址; * 虛擬機棧:方法執行的內存區,每個方法執行時會在虛擬機棧中創建棧幀; * 本地方法棧:虛擬機的Native方法執行的內存區; (2)線程共享區,包含以下2類 * Java堆:對象分配內存的區域; * 方法區:存放類信息、常量、靜態變量、編譯器編譯后的代碼等數據; * 常量池:存放編譯器生成的各種字面量和符號引用,是方法區的一部分。 樓主提到的Java棧,一般而言是指圖中的虛擬機棧,在代碼中的方法調用過程中,往往需要從一個方法跳轉到另一個方法,執行完再返回,那么在跳轉之前需要在當前方法的基本信息壓入棧中保存再跳轉。 **三、關于寄存器的問題** 對于java最常用的虛擬機,sun公司提供的hotspot虛擬機,是基于棧的虛擬機;而對于android的虛擬機,則采用google提供的dalvik,art兩種虛擬機,在android 5.0以后便默認采用art虛擬機,這是基于寄存器的虛擬機。 樓主問的是jvm(即java vm),這是基于棧的虛擬機。那么關于虛擬機棧,這塊內存的內容,我們再進一步詳細分析,如下圖: ![](https://pic4.zhimg.com/50/96c5e28ae772a6f0e732cebd39ef57aa_hd.jpg?source=1940ef5c) 可以看到,在虛擬機棧有一幀幀的 棧幀組成,而棧幀包含局部變量表,操作棧等子項,那么線程在運行的時候,代碼在運行時,是通過程序計數器不斷執行下一條指令。真正指令運算等操作時通過控制操作棧的操作數入棧和出棧,將操作數在局部變量表和操作棧之間轉移。
                  <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>

                              哎呀哎呀视频在线观看