全方位解讀JDK和JRE的區(qū)別及聯(lián)系
大家應(yīng)該都知道JDK和JRE是什么的縮寫,但是當(dāng)面試官問道 “請用你所學(xué)的java知識,告訴我JDK是干什么的?” , “JRE有什么作用?” , “這兩者有什么區(qū)別和聯(lián)系?” 等問題時,可能就說的不是很明白了。
下面我就詳細講述一下JDK和JRE之間的區(qū)別和聯(lián)系,為大家徹底理清JDK和JRE相關(guān)的知識。
話不多說,先上圖:

從圖中可以看出JDK是整個JAVA的核心,包括了Java運行環(huán)境JRE(Java Runtime Envirnment)、一堆Java開發(fā)工具(javac/java/jdb等)和Java基礎(chǔ)的類庫(即Java API 包),下面開始揭開JDK和JRE的神秘面紗。
一、概念
JDK全稱為Java Development Kit,顧名思義是java開發(fā)工具包,是程序員使用java語言編寫java程序所需的開發(fā)工具包。
JRE全稱為Java Runtime Environment,顧名思義是java運行時的環(huán)境,包含了java虛擬機,java基礎(chǔ)類庫,是使用java語言編寫的程序運行所需要的軟件環(huán)境。
二、區(qū)別
1、面向人群不同
JDK是提供給程序員使用的。JRE是提供給想運行java程序的用戶使用的。
2、重要程度不同
- 如果你需要編寫java程序,需要安裝JDK。
- 如果你需要運行java程序,只需要安裝JRE就可以了。
3、安裝目錄不同
如果安裝JDK,電腦會有兩套JRE,一套是JDK中的JRE,位于 \jre 目錄下。
另外一套是JRE自己的,在下載安裝時默認位于 C:\Program Files\Java\jre目錄下。
在這里博主當(dāng)時安裝JRE時是放到了D盤,如圖:
- E:\Java\jre

- D:\Java\jre

如果只安裝JRE,會默認在 C:\Program Files\Java 目錄下安裝唯一的一套JRE,位置可以選擇,這里博主放到了D盤:

三、聯(lián)系
1、包含關(guān)系
JDK包含了JRE,同時還包含了編譯java源碼的編譯器javac,還包含了很多java程序調(diào)試和分析的工具(JConsole,Web Services等工具軟件),還包含了Java基礎(chǔ)的類庫(即Java API 包括rt.jar)。
2、執(zhí)行關(guān)系
在這里首先就要提到JVM,JVM(Java Virtual Machine)就是我們常說的java虛擬機,它是整個java實現(xiàn)跨平臺的最核心的部分,所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執(zhí)行。
也就是說class并不直接與機器的操作系統(tǒng)相對應(yīng),而是經(jīng)過虛擬機間接與操作系統(tǒng)交互,由虛擬機將程序解釋給本地系統(tǒng)執(zhí)行。
只有JVM還不能成class的執(zhí)行,因為在解釋class的時候JVM需要調(diào)用解釋所需要的類庫lib,而jre包含lib類庫。
在JDK下面的的jre目錄里面有兩個文件夾bin和lib,在這里可以認為bin里的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和 lib和起來就稱為jre。
得到公式:jvm+lib=jre


JVM屏蔽了與具體操作系統(tǒng)平臺相關(guān)的信息,使得Java程序只需生成在Java虛擬機上運行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。
總而言之,我們利用JDK(調(diào)用JAVA API)開發(fā)了屬于我們自己的JAVA程序后,通過JDK中的編譯程序(javac)將我們的文本java文件編譯成JAVA字節(jié)碼,在JRE上運行這些JAVA字節(jié)碼,JVM解析這些字節(jié)碼,映射到CPU指令集或OS的系統(tǒng)調(diào)用。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot一鍵application.yml配置文件實踐
application-dev.yml文件是Spring Boot項目中用于定義開發(fā)環(huán)境配置的一個YAML格式文件,它包含了數(shù)據(jù)庫連接、服務(wù)器端口、日志級別、緩存配置等開發(fā)過程中常用的設(shè)置,通過這個文件,開發(fā)者可以在不同的環(huán)境中(如開發(fā)、測試、生產(chǎn))切換配置,而無需修改代碼2026-02-02
解決springboot運行出現(xiàn)錯誤:找不到或無法加載主類com.xxxx.xxxx.Application問題
文章介紹了在服務(wù)器上運行一個未使用的Java項目時遇到的“找不到或無法加載主類”錯誤,并提供了兩種解決方法:通過Maven install或build …、Goals輸入install并跳過測試來重新構(gòu)建項目2024-11-11
java 各種數(shù)據(jù)類型的互相轉(zhuǎn)換實例代碼
這篇文章主要介紹了java 各種數(shù)據(jù)類型的互相轉(zhuǎn)換實例代碼,需要的朋友可以參考下2020-10-10
Java中valueOf和parseInt的區(qū)別詳解
這篇文章主要介紹了Java中valueOf和parseInt的區(qū)別詳解,在編程中,遇到類型轉(zhuǎn)換,好像會經(jīng)常用到 parseInt 和 valueOf,當(dāng)然這里只拿 Integer 類型進行陳述,其他類型也是雷同的,需要的朋友可以參考下2024-01-01
Java生成訂單號或唯一id的高并發(fā)方案(4種方法)
本文主要介紹了Java生成訂單號或唯一id的高并發(fā)方案,包括4種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01

