1. 程式人生 > 其它 >Java基礎(3)-JDK、JRE、JVM區別與聯絡

Java基礎(3)-JDK、JRE、JVM區別與聯絡

一、簡介

JDK(Java Development Kit,Java開發工具包),是整個JAVA的核心,包括了Java執行環境JRE(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基礎的類庫

),包含JVM標準實現及Java核心類庫。

JRE(Java Runtime Environment Java執行環境),是 JDK 的子集,也就是包括 JRE 所有內容,以及開發應用程式所需的編譯器和偵錯程式等工具。

JVM(Java Virtual Machine,Java虛擬機器), 是JRE的一部分。它是整個Java實現跨平臺的最核心的部分,負責解釋執行位元組碼檔案,是可執行Java位元組碼檔案的虛擬計算機。

Java1.8.*版本官方文件地址:https://docs.oracle.com/javase/8/docs/index.html

關於 JDK、JRE、JVM 之間是什麼關係,其實在 Java 平臺標準中已經明確定義

Oracle has two products that implement Java Platform Standard Edition (Java SE) 8: Java SE Development Kit (JDK) 8 and Java SE Runtime Environment (JRE) 8.

JDK 8 is a superset of JRE 8, and contains everything that is in JRE 8, plus tools such as the compilers and debuggers necessary for developing applets and applications. JRE 8 provides the libraries, the Java Virtual Machine (JVM), and other components to run applets and applications written in the Java programming language. Note that the JRE includes components not required by the Java SE specification, including both standard and non-standard Java components.


The following conceptual diagram illustrates the components of Oracle's Java SE products:

二、瞭解JDK、JRE、JVM

2.1 JDK

JDK(Java Development Kit, Java開發工具包),JDK是提供給Java開發人員使用的。它提供了Java的開發工具、編譯、執行Java程式所需的各種工具和資源,包括Java編譯器、Java執行時環境,以及常用的Java類庫等,所以安裝了JDK,就不用在單獨安裝JRE了。JDK的安裝目錄裡面有bin、include、jre、lib等目錄。

其中

bin目錄:Java工具的可執行檔案,包括: java、Java編譯器javac、反編譯.class檔案javap、金鑰管理工具keytool、Java文件工具javadoc等。
include目錄:.h標頭檔案,C語言開發時用到的標頭檔案。比如jni.h是開發jni程式時必須引用的標頭檔案。
jre目錄:Java執行環境。
legal目錄:用markdown寫的法律檔案,供人閱讀的,類似於readme、license之類的檔案
lib目錄:Java類庫,我們經常看到的dt.jar和tools.jar就在這個目錄下。
COPYRIGHT檔案:版權資訊。
src.zip檔案:Java類庫原始碼,包括了rt.jar庫中的關鍵部分;除了Java類庫,還包含了啟動器(launcher)的原始碼(C語言實現)。

2.2 JRE

JRE(Java Runtime Environment Java執行環境)是 JDK 的子集,也就是包括 JRE 所有內容,以及開發應用程式所需的編譯器和偵錯程式等工具。JRE 提供了庫、Java 虛擬機器(JVM)和其他元件,用於執行 Java 程式語言、小程式、應用程式。JRE的安裝目錄裡面有兩個資料夾bin和lib。

其中

bin目錄:包含Java平臺所使用工具和類庫的可執行檔案和DLL檔案。
lib目錄:Java執行時環境所使用的核心類庫。
legal目錄:用markdown寫的法律檔案,供人閱讀的,類似於readme、license之類的檔案

2.3 JVM

JVM(Java Virtual Machine Java虛擬機器),Java虛擬機器,是JRE的一部分。它是整個java實現跨平臺的最核心的部分。JVM可以理解為是一個虛擬出來的計算機,是可執行java位元組碼檔案的虛擬計算機。

它主要負責把 Java 程式生成的位元組碼檔案,解釋成具體系統平臺上的機器指令,讓其在各個平臺執行。當使用Java編譯器編譯Java程式時,生成的是與平臺無關的位元組碼,這些位元組碼只面向JVM。

不同平臺的JVM都是不同的,但它們都提供了相同的介面。JVM是Java程式跨平臺的關鍵部分,只要為不同平臺實現了相應的虛擬機器,編譯後的Java位元組碼就可以在該平臺上執行。要想在不同的作業系統上執行Java程式,就需要在不同作業系統上安裝對應的JVM。所以,JVM有Windows版本、MAC版本、Linux版本等。

三、區別和聯絡

JDK=Java開發工具+JRE

JRE=JVM+Java類庫

  • JDK 用於開發,JRE 用於執行Java程式 ;如果只是執行Java程式,可以只安裝JRE,無序安裝JDK。

  • JDk包含JRE,JDK 和 JRE 中都包含 JVM。

  • JVM 是 Java 程式語言的核心並且具有平臺獨立性。

四、若干問題

4.1 為什麼我們的電腦在裝完 jdk 後會有兩個版本的 jre

我們會發現, jdk 安裝成功後,在安裝目錄會是這樣的

但是呢,而 jdk 的子目錄下也存在一個 jre,那兩個目錄的 jre 相互之間有什麼聯絡嗎?

答案是沒有聯絡的。甚至準確的來說,它倆是一樣的,無論是用哪一個都是可以的。只是很多人習慣將會單獨安裝另一個 jre,雖然單獨安裝的 jre 也並沒有被使用,原因可能就是剛開始大家都不清楚 jdk 和 jre 之間的關係,所以就預設的都安裝上了。

很明顯,jdk 是我們的開發工具包,它集成了 jre ,因此我們在安裝 jdk 的時候可以選擇不再安裝 jre 而直接使用 jdk 中的 jre 執行我們的 Java 程式。(但是大部分人都預設將兩個都裝上了)。但是如果你的電腦不是用來開發 Java 程式的,而僅僅是用來部署和執行 Java 程式的,那麼完全可以不用安裝 jdk,只需要安裝 jre 即可。

4.2 Java 為什麼能跨平臺,實現一次編寫,多處執行?

Java 能夠跨平臺執行的核心在於 JVM 。不是 Java 能夠跨平臺,而是它的 JVM能夠跨平臺。我們知道,不同的作業系統向上的 API 肯定是不同的,那麼如果我們想要寫一段程式碼呼叫系統的聲音裝置,就需要針對不同系統的 API 寫出不同的程式碼來完成動作。

而 Java 引入了位元組碼的概念,JVM 只能認識位元組碼,並將它們解釋到系統的 API 呼叫。針對不同的系統有不同的 jvm 實現,有 Linux 版本的 JVM實現,也有 Windows 版本的 JVM實現,但是同一段程式碼在編譯後的位元組碼是一樣的。引用上面的例子,在 Java API 層面,我們呼叫系統聲音裝置的程式碼是唯一的,和系統無關,編譯生成的位元組碼也是唯一的。但是同一段位元組碼,在不同的 JVM實現上會對映到不同系統的 API 呼叫,從而實現程式碼的不加修改即可跨平臺執行。