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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 虛擬機(JVM),JDK 差異,JRE 和 JVM - 核心 Java > 原文: [https://beginnersbook.com/2013/05/jvm/](https://beginnersbook.com/2013/05/jvm/) Java 是一種高級編程語言。用高級語言編寫的程序不能直接在任何機器上運行。首先,需要將其翻譯成特定的機器語言。 **`javac`編譯器**做了這件事,它需要 java 程序(包含源代碼的`.java`文件)并將其轉換為機器代碼(稱為字節代碼或`.class`文件)。 Java 虛擬機(JVM)是??駐留在真實機器(您的計算機)中的虛擬機,而 JVM 的**機器語言是字節代碼**。這使編譯器更容易,因為它必須為 JVM 生成字節代碼,而不是為每種類型的機器生成不同的機器代碼。 JVM 執行編譯器生成的字節代碼并生成輸出。 **JVM 是獨立于 Java 平臺的**。 所以,現在我們知道 JVM 的主要功能是執行編譯器生成的字節代碼。 **每個操作系統都有不同的 JVM,但是在執行字節代碼后它們產生的輸出在所有操作系統中都是相同的。** 這意味著在 Windows 上生成的字節代碼可以在 Mac OS 上運行,反之亦然。這就是我們將 java 稱為平臺無關語言的原因。同樣的事情可以在下圖中看到: ![JVM](https://img.kancloud.cn/7c/27/7c27bcb8b1426fa3a771f701eefbcc81_650x250.jpg) > **總結一切:** Java 虛擬機(JVM)是??在實際機器(您的計算機)上運行并執行 Java 字節代碼的虛擬機。 JVM 不了解 Java 源代碼,這就是我們需要使用`javac`編譯器來編譯*`.java`文件以獲取包含 JVM 理解的字節代碼的*`.class`文件的原因。 JVM 使 java 可移植(一次編寫,隨處運行)。每個操作系統都有不同的 JVM,但是在執行字節代碼后它們產生的輸出在所有操作系統中都是相同的。 ## JVM 架構 ![jvm architecture](https://img.kancloud.cn/9c/c1/9cc1eb503f5bd5b0d171d7159d6f452d_600x400.jpg) **讓我們看看 JVM 是如何工作的**: **類加載器:**類加載器讀取`.class`文件并將字節代碼保存在**方法區域中**。 **方法區**:JVM 中只有一個方法區域在所有類之間共享。這保存了每個`.class`文件的類級別信息。 **堆**:堆是分配對象的 JVM 內存的一部分。 JVM 為每個`.class`文件創建一個`Class`對象。 **Stack** :棧也是 JVM 內存的一部分,但與堆不同,它用于存儲臨時變量。 **PC 寄存器**:用于跟蹤已執行的指令以及將要執行的指令。由于指令由線程執行,因此每個線程都有一個單獨的 PC 寄存器。 **本地方法堆棧:**本機方法可以訪問虛擬機的運行時數據區域。 **本地方法接口**:它使 java 代碼能夠被本機應用調用或調用。本機應用是特定于系統的硬件和操作系統的程序。 **垃圾收集**:類代碼由 java 代碼顯式創建,使用后會被垃圾收集自動銷毀以進行內存管理。 ## JVM 與 JRE 和 JDK 對比 JRE:JRE 是 java 虛擬機運行的環境。 JRE 包含 Java 虛擬機(JVM),類庫和其他文件,不包括編譯器和調試器等開發工具。 這意味著您可以在 JRE 中運行代碼,但無法在 JRE 中開發和編譯代碼。 JVM:如上所述,JVM 使用 JRE 提供的類,庫和文件來運行程序。 ![JRE](https://img.kancloud.cn/c2/c9/c2c98eae95d4e7c8820d212d8ead3e8f_500x280.jpg) JDK:JDK 是 JRE 的超集,它包含 JRE 與開發工具(如編譯器,調試器等)的所有內容。 ![JDK](https://img.kancloud.cn/2b/f6/2bf64abde0afd9727098d8d095ddfb06_600x310.jpg)
                  <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>

                              哎呀哎呀视频在线观看