<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [toc] ## **一、JVM整體結構** > * HotSpot VM是目前市面上高性能虛擬機的代表作之一。 > * 它采用解釋器與即時編譯器并存的架構。 > * 在今天,Java程序的運行性能早已脫胎換骨,已經達到了可以和C/C++程序一較高下的地步。 > * 本節內容可以配合[腦圖](https://naotu.baidu.com/file/d808de875921ab7d0d356119741923c7)進行學習。 首先,JVM的內存結構分為三個部分,類加載子系統、運行時數據區、執行引擎。整體結構如下圖: ![image-20200704183436495](http://gitee.com/cowboy2014/cloud2020-config/raw/master//pictures/image-20200704183436495.png) ### 1.1 **類加載子系統** 功能:字節碼文件的加載。 #### 雙親委派機制 ### 1.2 **運行時數據區** 運行時數據區中線程共享的內存區域是:方法區、堆; 其中方法區:常量池; 堆:存放新建的對象; #### 方法區 方法區是一個抽象概念。 ![](https://img.kancloud.cn/e8/f9/e8f9ad9f53d4023802e804c04bd3cfe2_788x306.png) JDK8以前,其實現為“永久代”,存儲類的元信息、運行時常量池、常量池、靜態變量等;JDK8以后,其實現為“元空間”,存儲類的元信息、運行時常量池,常量池、靜態變量放到了堆中。 > 這里需要注意:元空間代替了永久代,而不是代替了方法區。[【相關資料】](https://www.bilibili.com/video/BV1uQ4y1y7T2) #### **虛擬機棧(Java棧)和本地方法棧有什么區別?** 虛擬機棧又叫做Java棧,這樣從字面意義上看已經比較清楚了。Java棧是記錄線程執行位置,本地方法棧則是線程記錄native方法的程序位置。 ### 1.3 **執行引擎** 執行引擎包含三部分:解釋器,JIT及時編譯器,垃圾回收器。 JIT的編譯過程 ![](https://img.kancloud.cn/b6/da/b6dab3ebc19cf6351f8cb9f3c5a13406_1316x543.png) ## **總結** JVM內存結構用一個詳細圖描述如下: ![image-20210405174323652](https://gitee.com/cowboy2014/cloud2020-config/raw/master//pictures/image-20210405174323652.png) ## 面試題 ![](https://img.kancloud.cn/50/bf/50bfe26e6ce5ad12594ab80b546ffd6f_1210x260.png) ### class文件,誰負責加載到內存中? 1. 類加載器負責從文件系統或者網絡中加載Class文件; 2. 類的運行交給執行引擎決定。 ### 常量池區別 class常量池(靜態常量池)、運行時常量池、字符串常量池區別: 1. class常量池中存儲的是符號引用,而運行時常量池存儲的是被解析之后的直接引用。 2. class常量池存在于class文件中,運行時常量池和字符串常量池是存在于JVM內存中。 3. 運行時常量池具有動態性,java運行期間也可能將新的常量放入池中(String#intern()), 4. 字符串常量池邏輯上屬于運行時常量池的一部分,但是它和運行時常量池的區別在于,字符串常量池是全局唯一的,而運行時常量池是每個類一個。 ## 參考學習材料 1. [JVM內存結構和Java內存模型](https://zhuanlan.zhihu.com/p/38348646) 2. [字符串在JVM中如何存放 及常量池技術](https://blog.csdn.net/shimadear/article/details/99708840) 3. [運行時常量池、字符串常量池](https://blog.csdn.net/qq_26719997/article/details/110187881) > 參考教程:https://www.bilibili.com/video/BV1854y1H7nR?p=2
                  <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>

                              哎呀哎呀视频在线观看