解讀JDK、JRE、JVM的區(qū)別與聯(lián)系
一、jdk
JDK(Java Development Kit):
jdk是Java的開發(fā)工具包,是整個(gè)java開發(fā)的核心。
其中主要包含了三方面的內(nèi)容:
- Java程序的運(yùn)行環(huán)境-JRE
- Java的基礎(chǔ)類庫(Java API)
Java API是Java的應(yīng)用程序接口,里面有很多已經(jīng)寫好的Java class,包含一些重要的語法結(jié)構(gòu)和基本的線程、圖形和IO等。
我們可以直接拿來使用。
Java的一些工具包(其中包含了javac源碼編譯器,還有一些其他的命令:jdb,javah,jmp等)。
在學(xué)習(xí)java之前,一般都是安裝運(yùn)行環(huán)境,下載一個(gè)JDK。在jdk中有很多的文件,其中最主要的就是四個(gè)文件:bin、include、jre、lib。

- bin:bin目錄下有大量的可運(yùn)行exe文件,其中最主要的就是javac.exe文件,源碼編譯器。
- include:包含一些頭文件,用于java和JVM進(jìn)行交互。
- lib:類庫。
- jre:java程序運(yùn)行環(huán)境。
在jre目錄底下,還有一個(gè)bin文件和lib文件,這兩個(gè)文件與之前的不同,這里的bin文件可以認(rèn)為就是jvm,lib文件就是jvm運(yùn)行時(shí)需要的類庫。
JVM+ lib庫=JRE。
二、jre
JRE(Java Runtime Environment—java運(yùn)行環(huán)境):
jre是java程序的運(yùn)行環(huán)境,所有的Java程序必須依賴jre才能運(yùn)行。jre中包含jvm,但是只有jvm是不能完全解釋字節(jié)碼文件的,還需要一些核心的類庫。
這些類庫都存放在jre目錄底下的lib文件中。所以jre就包括了兩部分:解釋字節(jié)碼的jvm+一些核心類庫(存放于lib文件中)
三、jvm
JVM(Java Virtual Machine–java虛擬機(jī)):
jvm是jre的一部分,jvm是虛擬出的一臺計(jì)算機(jī),這臺計(jì)算機(jī)不關(guān)心java源代碼如何寫的,它只關(guān)心java源程序編譯出的字節(jié)碼文件,jvm是java程序能實(shí)現(xiàn)跨平臺的核心,它不關(guān)心真實(shí)計(jì)算機(jī),也不關(guān)心操作系統(tǒng)等等,就像一個(gè)中間平臺,只負(fù)責(zé)將字節(jié)碼文件轉(zhuǎn)換成當(dāng)前計(jì)算機(jī)能理解的CPU指令集或系統(tǒng)調(diào)用。
jvm有自己完善的硬件架構(gòu),如處理器、棧區(qū)、寄存器等。
總結(jié):jvm是一個(gè)虛擬的中間平臺,只負(fù)責(zé)將編譯后的字節(jié)碼文件轉(zhuǎn)換成當(dāng)前計(jì)算機(jī)能理解并執(zhí)行的指令,其他都不關(guān)心。jvm是java“一次編譯,到處執(zhí)行”的原因。
四、關(guān)系圖

五、一個(gè)Java程序的執(zhí)行過程
- 我們利用JDK(通過調(diào)用一些Java API)寫出java源程序,然后儲存在.java文件中。
- JDK中的源碼編譯器javac將源代碼編譯成java字節(jié)碼,儲存在.class文件中。
- JRE加載、驗(yàn)證、執(zhí)行Java字節(jié)碼。
- JVM將字節(jié)碼文件解析為機(jī)器碼映射到CPU指令集或者供系統(tǒng)調(diào)用。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JDK下載安裝配置環(huán)境變量實(shí)現(xiàn)方式
本文詳細(xì)介紹了如何從Oracle官網(wǎng)下載JDK,并將其安裝到本地計(jì)算機(jī)上,安裝完成后,文章還指導(dǎo)了如何配置環(huán)境變量,以便在Windows系統(tǒng)中能夠正常使用Java2026-01-01
基于java下載中g(shù)etContentLength()一直為-1的一些思路
下面小編就為大家?guī)硪黄趈ava下載中g(shù)etContentLength()一直為-1的一些思路。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Java final 修飾符知識點(diǎn)總結(jié)(必看篇)
下面小編就為大家?guī)硪黄狫ava final 修飾符知識點(diǎn)總結(jié)(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
Java開發(fā)之內(nèi)部類對象的創(chuàng)建及hook機(jī)制分析
這篇文章主要介紹了Java開發(fā)之內(nèi)部類對象的創(chuàng)建及hook機(jī)制,結(jié)合實(shí)例形式分析了java基于hook機(jī)制內(nèi)部類對象的創(chuàng)建與使用,需要的朋友可以參考下2018-01-01
nacos實(shí)現(xiàn)配置多個(gè)配置文件(共享配置)
文章介紹了在Spring Cloud Nacos中配置共享配置文件和擴(kuò)展配置文件的方法,包括使用`shared-configs`和`extension-configs`屬性,并詳細(xì)解釋了這些屬性的使用方式和區(qū)別,文章還提到舊版本的配置方式已經(jīng)被棄用,建議使用新的配置方式2026-03-03
SpringBoot中忽略實(shí)體類中的某個(gè)屬性不返回給前端的方法(示例詳解)
本文介紹了在Spring Boot中使用Jackson和Fastjson忽略實(shí)體類屬性不返回給前端的方法,在Jackson中,同時(shí)使用@JsonProperty和@JsonIgnore時(shí),@JsonIgnore可能失效,Fastjson中可以使用@JSONField(serialize=false)來實(shí)現(xiàn),本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友參考下吧2024-11-11
SpringBoot項(xiàng)目集成依賴Mybatis步驟
在本篇文章中小編給大家分享了關(guān)于SpringBoot項(xiàng)目如何集成依賴Mybatis的相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-06-06

