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

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

- D:\Java\jre

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

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


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

