更新時間:2022-10-11 11:05:31 來源:動力節(jié)點 瀏覽1783次
Java 虛擬機 (JVM)是一個引擎,它提供運行時環(huán)境來驅(qū)動 Java 代碼或應(yīng)用程序。它將 Java 字節(jié)碼轉(zhuǎn)換為機器語言。JVM 是 Java 運行時環(huán)境 (JRE) 的一部分。在其他編程語言中,編譯器為特定系統(tǒng)生成機器代碼。但是,Java 編譯器為稱為 Java 虛擬機的虛擬機生成代碼。
首先,Java 代碼被編譯成字節(jié)碼。這個字節(jié)碼在不同的機器上被解釋
在主機系統(tǒng)和 Java 源代碼之間,字節(jié)碼是一種中介語言。
Java中的JVM負責(zé)分配內(nèi)存空間。
現(xiàn)在在這個 JVM 教程中,讓我們了解 JVM 的體系結(jié)構(gòu)。Java中的JVM架構(gòu)包含類加載器、內(nèi)存區(qū)域、執(zhí)行引擎等。
1.類加載器
類加載器是用于加載類文件的子系統(tǒng)。它執(zhí)行三個主要功能,即。加載、鏈接和初始化。
2.方法區(qū)
JVM 方法區(qū)存儲類結(jié)構(gòu),如元數(shù)據(jù)、常量運行時池和方法代碼。
3.堆
所有的Objects及其相關(guān)的實例變量和數(shù)組都存儲在堆中。該內(nèi)存是通用的,并且在多個線程之間共享。
4.JVM語言棧
Java 語言堆棧存儲局部變量,它是部分結(jié)果。每個線程都有自己的 JVM 堆棧,在創(chuàng)建線程時同時創(chuàng)建。每當(dāng)調(diào)用方法時都會創(chuàng)建一個新框架,并在方法調(diào)用過程完成時將其刪除。
5.PC 寄存器
PC寄存器存儲當(dāng)前正在執(zhí)行的Java虛擬機指令的地址。在 Java 中,每個線程都有其單獨的 PC 寄存器。
6.原生方法棧
本機方法棧保存本機代碼的指令依賴于本機庫。它是用另一種語言而不是 Java 編寫的。
7.執(zhí)行引擎
它是一種用于測試硬件、軟件或完整系統(tǒng)的軟件。測試執(zhí)行引擎從不攜帶任何關(guān)于被測產(chǎn)品的信息。
8.原生方法接口
本機方法接口是一個編程框架。它允許在 JVM 中運行的 Java 代碼被庫和本機應(yīng)用程序調(diào)用。
9.原生方法庫
本機庫是執(zhí)行引擎所需的本機庫(C、C++)的集合。
為了編寫和執(zhí)行軟件程序,您需要以下內(nèi)容
1.編輯器 ——要輸入你的程序,可以使用記事本
2.編譯器 - 將您的高級語言程序轉(zhuǎn)換為本機機器代碼
3.鏈接器 ——將主程序中不同的程序文件引用組合在一起。
4.加載器 ——將文件從您的輔助存儲設(shè)備(如硬盤、閃存驅(qū)動器、CD)加載到 RAM 中以供執(zhí)行。執(zhí)行代碼時會自動完成加載。
5.執(zhí)行– 由您的操作系統(tǒng)和處理器處理的代碼的實際執(zhí)行。
在此背景下,請參考以下視頻并了解 JVM(Java 虛擬機)的 JVM 內(nèi)部工作和架構(gòu)。
現(xiàn)在在這個 JVM 教程中,讓我們看看 JAVA 的過程。在你的主要,你有兩個方法 f1 和 f2。
main方法存放在文件a1.java中
f1 作為 a2.java 存儲在文件中
f2 作為 a3.java 存儲在文件中
編譯器將編譯這三個文件并生成 3 個對應(yīng)的由 BYTE 代碼組成的 .class 文件。 與 C 不同,沒有進行鏈接。
Java VM 或 Java 虛擬機駐留在 RAM 上。在執(zhí)行期間,使用類加載器將類文件帶到 RAM 中。BYTE 代碼已針對任何安全漏洞進行驗證。
接下來,執(zhí)行引擎會將 Bytecode 轉(zhuǎn)換為 Native 機器碼。這是及時編譯。這是Java相對較慢的主要原因之一。
注意: JIT或即時編譯器是 Java 虛擬機 (JVM) 的一部分。它同時解釋具有相似功能的部分字節(jié)碼。如果大家對此比較感興趣,想了解更多相關(guān)知識,不妨來關(guān)注一下本站的Java視頻教程,里面的課程內(nèi)容細致全面,通俗易懂,適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對大家能夠有所幫助。
相關(guān)閱讀