JDK、JRE 和 JVM 有什么用,它們是怎樣運(yùn)行的
JDK如何運(yùn)作?
JDK 功能
以下是JDK的重要組件:
- JDK 和 JRE:程序員通過使用JDK 創(chuàng)建由 JRE 運(yùn)行的 Java 程序,其中包括 JVM 和類庫。
- 類庫:是一組可動(dòng)態(tài)加載的庫,Java 程序在運(yùn)行時(shí)調(diào)用。
- 編譯器:是一個(gè)Java程序,開發(fā)人員的文本文件通過編譯器編譯成Java類文件。編譯器給出的常見輸出形式,包含Java字節(jié)碼。在 Java 中,主要的編譯器是 Javac。
- 調(diào)試器:調(diào)試器是一個(gè) Java 程序,開發(fā)人員通過調(diào)試器測試和調(diào)試 Java 程序。
- JavaDoc: JavaDoc 是 Sun Microsystems 為 Java 制作的文檔。JavaDoc 可用于從源程序生成 HTML 文件中的 API 文檔
JRE如何運(yùn)作?
JRE 功能
JRE 有一個(gè) JVM 實(shí)例、庫類和開發(fā)工具。編寫和編譯 Java 代碼后,編譯器會(huì)生成一個(gè)包含字節(jié)碼的類文件。
以下是 JRE 的重要組成部分:
- 類加載器:類加載器加載運(yùn)行 Java 程序所需的各種類。JVM 使用三個(gè)類加載器,稱為引導(dǎo)類加載器、擴(kuò)展類加載器和系統(tǒng)類加載器。
- 字節(jié)碼驗(yàn)證器:字節(jié)碼驗(yàn)證器驗(yàn)證字節(jié)碼,使代碼不會(huì)干擾解釋器。
- 解釋器:一旦加載類并驗(yàn)證代碼,解釋器就會(huì)逐行讀取代碼。
- 運(yùn)行時(shí)間:運(yùn)行時(shí)間是主要用于編程的系統(tǒng),用于描述特定程序運(yùn)行的時(shí)間段。
- 硬件:一旦你編譯了 Java 本機(jī)代碼,它就會(huì)在特定的硬件平臺(tái)上運(yùn)行。
這樣,Java 程序就在 JRE 中運(yùn)行。
JVM如何運(yùn)作?
JVM 功能
以下是 JVM 的重要組件:
1) 類加載器
類加載器是用于加載類文件的子系統(tǒng)。它執(zhí)行三個(gè)主要功能:加載、鏈接和初始化。
2) 方法區(qū)
JVM 方法區(qū)存儲(chǔ)類的結(jié)構(gòu),如元數(shù)據(jù)、Java 方法的代碼和常量運(yùn)行時(shí)池。
3) 堆
所有對象、數(shù)組和實(shí)例變量都存儲(chǔ)在堆中。此內(nèi)存在多個(gè)線程之間共享。
4)JVM語言棧
Java 語言堆棧存儲(chǔ)局部變量及其部分結(jié)果。每個(gè)線程都有自己的 JVM 語言堆棧,在創(chuàng)建線程時(shí)同時(shí)創(chuà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ī)庫。它在本機(jī)堆上分配內(nèi)存或使用任何類型的堆棧。
7) 執(zhí)行引擎
它是一種用于測試軟件、硬件或完整系統(tǒng)的軟件。測試執(zhí)行引擎從不攜帶任何關(guān)于被測產(chǎn)品的信息。
8) 原生方法API
本機(jī)方法接口是一個(gè)編程框架。它允許在 JVM 中運(yùn)行的 Java 代碼由庫和本機(jī)應(yīng)用程序調(diào)用。
9) 原生API庫
本機(jī)庫是執(zhí)行引擎所需的本機(jī)庫(C、C++)的集合。
JDK、JRE 和 JVM 的區(qū)別
以下是 JDK、JRE 和 JVM 之間的主要區(qū)別:
JDK | JRE | 虛擬機(jī) |
JDK 英文全稱是 Java Development Kit。 | JRE 英文全稱是 Java 運(yùn)行時(shí)環(huán)境。 | JVM英文全稱是Java虛擬機(jī)。 |
JDK 是一個(gè)用 Java 開發(fā)應(yīng)用程序的軟件開發(fā)工具包。 | 它是一個(gè)軟件包,為 Java 類庫提供運(yùn)行 Java 代碼所需的組件。 | JVM 執(zhí)行 Java 字節(jié)碼并提供執(zhí)行它的環(huán)境。 |
JDK 依賴于平臺(tái)。 | JRE 也依賴于平臺(tái)。 | JVM 高度依賴于平臺(tái)。 |
它包含用于開發(fā)、調(diào)試和監(jiān)控 Java 代碼的工具。 | 它包含 JVM 執(zhí)行程序所需的類庫和其他支持文件。 | JVM 中不包含軟件開發(fā)工具。 |
它是 JRE 的超集 | 它是 JDK 的子集。 | JVM 是 JRE 的子集。 |
JDK 使開發(fā)人員能夠創(chuàng)建可由 JRE 和 JVM 執(zhí)行和運(yùn)行的 Java 程序。 | JRE 是創(chuàng)建 JVM 的 Java 部分。 | 它是執(zhí)行源代碼的 Java 平臺(tái)組件。 |
JDK 附帶安裝程序。 | JRE 只包含執(zhí)行源代碼的環(huán)境。 | JVM 捆綁在軟件 JDK 和 JRE 中。 |
JDK 附帶安裝程序。 | JRE 只包含執(zhí)行源代碼的環(huán)境。 | JVM 捆綁在軟件 JDK 和 JRE 中。 |