更新時(shí)間:2022-10-11 11:05:31 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2140次
Java 虛擬機(jī) (JVM)是一個(gè)引擎,它提供運(yùn)行時(shí)環(huán)境來(lái)驅(qū)動(dòng) Java 代碼或應(yīng)用程序。它將 Java 字節(jié)碼轉(zhuǎn)換為機(jī)器語(yǔ)言。JVM 是 Java 運(yùn)行時(shí)環(huán)境 (JRE) 的一部分。在其他編程語(yǔ)言中,編譯器為特定系統(tǒng)生成機(jī)器代碼。但是,Java 編譯器為稱為 Java 虛擬機(jī)的虛擬機(jī)生成代碼。
首先,Java 代碼被編譯成字節(jié)碼。這個(gè)字節(jié)碼在不同的機(jī)器上被解釋
在主機(jī)系統(tǒng)和 Java 源代碼之間,字節(jié)碼是一種中介語(yǔ)言。
Java中的JVM負(fù)責(zé)分配內(nèi)存空間。

現(xiàn)在在這個(gè) JVM 教程中,讓我們了解 JVM 的體系結(jié)構(gòu)。Java中的JVM架構(gòu)包含類加載器、內(nèi)存區(qū)域、執(zhí)行引擎等。

1.類加載器
類加載器是用于加載類文件的子系統(tǒng)。它執(zhí)行三個(gè)主要功能,即。加載、鏈接和初始化。
2.方法區(qū)
JVM 方法區(qū)存儲(chǔ)類結(jié)構(gòu),如元數(shù)據(jù)、常量運(yùn)行時(shí)池和方法代碼。
3.堆
所有的Objects及其相關(guān)的實(shí)例變量和數(shù)組都存儲(chǔ)在堆中。該內(nèi)存是通用的,并且在多個(gè)線程之間共享。
4.JVM語(yǔ)言棧
Java 語(yǔ)言堆棧存儲(chǔ)局部變量,它是部分結(jié)果。每個(gè)線程都有自己的 JVM 堆棧,在創(chuàng)建線程時(shí)同時(shí)創(chuàng)建。每當(dāng)調(diào)用方法時(shí)都會(huì)創(chuàng)建一個(gè)新框架,并在方法調(diào)用過程完成時(shí)將其刪除。
5.PC 寄存器
PC寄存器存儲(chǔ)當(dāng)前正在執(zhí)行的Java虛擬機(jī)指令的地址。在 Java 中,每個(gè)線程都有其單獨(dú)的 PC 寄存器。
6.原生方法棧
本機(jī)方法棧保存本機(jī)代碼的指令依賴于本機(jī)庫(kù)。它是用另一種語(yǔ)言而不是 Java 編寫的。
7.執(zhí)行引擎
它是一種用于測(cè)試硬件、軟件或完整系統(tǒng)的軟件。測(cè)試執(zhí)行引擎從不攜帶任何關(guān)于被測(cè)產(chǎn)品的信息。
8.原生方法接口
本機(jī)方法接口是一個(gè)編程框架。它允許在 JVM 中運(yùn)行的 Java 代碼被庫(kù)和本機(jī)應(yīng)用程序調(diào)用。
9.原生方法庫(kù)
本機(jī)庫(kù)是執(zhí)行引擎所需的本機(jī)庫(kù)(C、C++)的集合。
為了編寫和執(zhí)行軟件程序,您需要以下內(nèi)容
1.編輯器 ——要輸入你的程序,可以使用記事本
2.編譯器 - 將您的高級(jí)語(yǔ)言程序轉(zhuǎn)換為本機(jī)機(jī)器代碼
3.鏈接器 ——將主程序中不同的程序文件引用組合在一起。
4.加載器 ——將文件從您的輔助存儲(chǔ)設(shè)備(如硬盤、閃存驅(qū)動(dòng)器、CD)加載到 RAM 中以供執(zhí)行。執(zhí)行代碼時(shí)會(huì)自動(dòng)完成加載。
5.執(zhí)行– 由您的操作系統(tǒng)和處理器處理的代碼的實(shí)際執(zhí)行。
在此背景下,請(qǐng)參考以下視頻并了解 JVM(Java 虛擬機(jī))的 JVM 內(nèi)部工作和架構(gòu)。
現(xiàn)在在這個(gè) JVM 教程中,讓我們看看 JAVA 的過程。在你的主要,你有兩個(gè)方法 f1 和 f2。
main方法存放在文件a1.java中
f1 作為 a2.java 存儲(chǔ)在文件中
f2 作為 a3.java 存儲(chǔ)在文件中

編譯器將編譯這三個(gè)文件并生成 3 個(gè)對(duì)應(yīng)的由 BYTE 代碼組成的 .class 文件。 與 C 不同,沒有進(jìn)行鏈接。
Java VM 或 Java 虛擬機(jī)駐留在 RAM 上。在執(zhí)行期間,使用類加載器將類文件帶到 RAM 中。BYTE 代碼已針對(duì)任何安全漏洞進(jìn)行驗(yàn)證。

接下來(lái),執(zhí)行引擎會(huì)將 Bytecode 轉(zhuǎn)換為 Native 機(jī)器碼。這是及時(shí)編譯。這是Java相對(duì)較慢的主要原因之一。

注意: JIT或即時(shí)編譯器是 Java 虛擬機(jī) (JVM) 的一部分。它同時(shí)解釋具有相似功能的部分字節(jié)碼。如果大家對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下本站的Java視頻教程,里面的課程內(nèi)容細(xì)致全面,通俗易懂,適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)