解讀JDK、JRE、JVM的區(qū)別與聯(lián)系
一、jdk
JDK(Java Development Kit):
jdk是Java的開發(fā)工具包,是整個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)境,下載一個JDK。在jdk中有很多的文件,其中最主要的就是四個文件:bin、include、jre、lib。
- bin:bin目錄下有大量的可運(yùn)行exe文件,其中最主要的就是javac.exe文件,源碼編譯器。
- include:包含一些頭文件,用于java和JVM進(jìn)行交互。
- lib:類庫。
- jre:java程序運(yùn)行環(huán)境。
在jre目錄底下,還有一個bin文件和lib文件,這兩個文件與之前的不同,這里的bin文件可以認(rèn)為就是jvm,lib文件就是jvm運(yùn)行時需要的類庫。
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ī)不關(guān)心java源代碼如何寫的,它只關(guān)心java源程序編譯出的字節(jié)碼文件,jvm是java程序能實現(xiàn)跨平臺的核心,它不關(guān)心真實計算機(jī),也不關(guān)心操作系統(tǒng)等等,就像一個中間平臺,只負(fù)責(zé)將字節(jié)碼文件轉(zhuǎn)換成當(dāng)前計算機(jī)能理解的CPU指令集或系統(tǒng)調(diào)用。
jvm有自己完善的硬件架構(gòu),如處理器、棧區(qū)、寄存器等。
總結(jié):jvm是一個虛擬的中間平臺,只負(fù)責(zé)將編譯后的字節(jié)碼文件轉(zhuǎn)換成當(dāng)前計算機(jī)能理解并執(zhí)行的指令,其他都不關(guān)心。jvm是java“一次編譯,到處執(zhí)行”的原因。
四、關(guān)系圖
五、一個Java程序的執(zhí)行過程
- 我們利用JDK(通過調(diào)用一些Java API)寫出java源程序,然后儲存在.java文件中。
- JDK中的源碼編譯器javac將源代碼編譯成java字節(jié)碼,儲存在.class文件中。
- JRE加載、驗證、執(zhí)行Java字節(jié)碼。
- JVM將字節(jié)碼文件解析為機(jī)器碼映射到CPU指令集或者供系統(tǒng)調(diào)用。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹的原理及實現(xiàn)
紅黑樹是一種特殊的二叉查找樹,每個結(jié)點(diǎn)都要儲存位表示結(jié)點(diǎn)的顏色,或紅或黑。本文將通過示例為大家詳細(xì)講講紅黑樹的原理及Java實現(xiàn),感興趣的可以了解一下2022-09-09詳解java數(shù)組進(jìn)行翻轉(zhuǎn)的方法有哪些
這篇文章主要介紹了詳解java數(shù)組進(jìn)行翻轉(zhuǎn)的方法有哪些,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01