溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

學(xué)習(xí)java卻不知道JRE和JDK的區(qū)別?快進(jìn)來(lái)學(xué)習(xí)

發(fā)布時(shí)間:2020-05-23 00:32:01 來(lái)源:網(wǎng)絡(luò) 閱讀:154 作者:qq5dda6ecead5a8 欄目:編程語(yǔ)言

JRE和JDK的區(qū)別?
1.JRE是Java運(yùn)行時(shí)環(huán)境 。 它是運(yùn)行已編譯的Java程序所需的所有程序的包,包括Java虛擬機(jī)(JVM),Java類庫(kù), java命令和其他基礎(chǔ)結(jié)構(gòu)。 但是,它不能用于創(chuàng)建新程序。
JDK是Java Development Kit ,這是Java的全功能SDK。 它具有JRE擁有的所有內(nèi)容,還具有編譯器( javac )和工具(如javadoc和jdb )。 它能夠創(chuàng)建和編譯程序。
通常,如果只關(guān)心在計(jì)算機(jī)上運(yùn)行Java程序,則只會(huì)安裝JRE。 這就是您所需要的。 另一方面,如果您打算進(jìn)行一些Java編程,則需要安裝JDK。
學(xué)習(xí)java卻不知道JRE和JDK的區(qū)別?快進(jìn)來(lái)學(xué)習(xí)
有時(shí),即使您不打算在計(jì)算機(jī)上進(jìn)行任何Java開(kāi)發(fā),也仍然需要安裝JDK。 例如,如果要使用JSP部署Web應(yīng)用程序,則從技術(shù)上講,您只是在應(yīng)用程序服務(wù)器內(nèi)部運(yùn)行Java程序。 那為什么還要JDK呢? 因?yàn)閼?yīng)用服務(wù)器會(huì)將JSP轉(zhuǎn)換為Java servlet,并且需要使用JDK來(lái)編譯servlet。 我相信還有更多的例子。
2.顧名思義, JRE是一個(gè)環(huán)境 。 基本上,這是一堆包含Java相關(guān)文件的目錄,例如:
bin/包含Java的可執(zhí)行程序。 最重要的是java (對(duì)于Windows,也包括javaw ),它將啟動(dòng)JVM。 這里還有一些其他實(shí)用程序,例如keytool和policytool 。
conf/擁有用戶可編輯的配置文件,供Java專家使用。
lib/具有大量的支持文件:一些.jar ,配置文件,屬性文件,字體,翻譯,證書(shū)等–所有Java的“修整”。 最重要的是modules ,該文件包含Java標(biāo)準(zhǔn)庫(kù)的.class文件。
在某種程度上,Java標(biāo)準(zhǔn)庫(kù)需要調(diào)用本機(jī)代碼。 為此,JRE在bin/或lib/下包含一些.dll (Windows)或.dylib (macOS)或.so (Linux)文件,并帶有特定于系統(tǒng)的支持本機(jī)二進(jìn)制代碼。
JDK也是一組目錄。 它是JRE的超集,其中有一些補(bǔ)充:bin/已使用開(kāi)發(fā)工具進(jìn)行了擴(kuò)展。 其中最重要的是javac ; 其他包括jar , javadoc和jshell 。
jmods/ ,其中包含標(biāo)準(zhǔn)庫(kù)的JMOD文件。 這些文件允許標(biāo)準(zhǔn)庫(kù)與jlink一起使用。
3.從Java官方網(wǎng)站...
JRE(Java運(yùn)行時(shí)環(huán)境):
它是Java虛擬機(jī)*的實(shí)現(xiàn),它實(shí)際上執(zhí)行Java程序。
Java Runtime Environment是運(yùn)行Java程序所需的插件。
JRE比JDK小,因此需要更少的磁盤空間。
它包括JVM,Core庫(kù)和其他附加組件,以運(yùn)行用Java編寫(xiě)的應(yīng)用程序和applet。
JDK(Java開(kāi)發(fā)套件)
它是一整套軟件,可用于開(kāi)發(fā)基于Java的應(yīng)用程序。
開(kāi)發(fā)Java應(yīng)用程序需要Java Development Kit。
JDK需要更多的磁盤空間,因?yàn)樗琂RE以及各種開(kāi)發(fā)工具。它包括JRE,API類集,Java編譯器,Webstart以及編寫(xiě)Java applet和應(yīng)用程序所需的其他文件。
4.從調(diào)試的角度來(lái)看,有一個(gè)區(qū)別:
要調(diào)試Java系統(tǒng)類(例如String和ArrayList),您需要使用“調(diào)試信息”編譯的特殊版本的JRE。 JDK中包含的JRE提供了此信息,但常規(guī)JRE沒(méi)有提供。 常規(guī)JRE不包含此信息以確保更好的性能。
什么是調(diào)試信息?
現(xiàn)代的編譯器將其高級(jí)代碼縮進(jìn)和嵌套的控制結(jié)構(gòu)以及任意類型的變量轉(zhuǎn)換為一大堆稱為機(jī)器代碼(在Java中為字節(jié)碼)的位,就可以很好地轉(zhuǎn)換您的高級(jí)代碼。在目標(biāo)CPU(JVM的虛擬CPU)上盡可能快地運(yùn)行。 Java代碼被轉(zhuǎn)換為多個(gè)機(jī)器代碼指令。 變量到處都是-放入堆棧,寄存器或完全優(yōu)化。 結(jié)構(gòu)和對(duì)象甚至不存在于生成的代碼中–它們只是一種抽象,可以轉(zhuǎn)換為硬編碼的偏移量到內(nèi)存緩沖區(qū)中。
那么,當(dāng)您要求調(diào)試器在某個(gè)函數(shù)的入口處中斷時(shí),調(diào)試器如何知道在何處停止? 當(dāng)您詢問(wèn)變量值時(shí),如何設(shè)法找到要顯示的內(nèi)容? 答案是–調(diào)試信息。
調(diào)試信息由編譯器與機(jī)器代碼一起生成。 它表示可執(zhí)行程序和原始源代碼之間的關(guān)系。 該信息被編碼為預(yù)定義的格式,并與機(jī)器代碼一起存儲(chǔ)。 多年來(lái),針對(duì)不同的平臺(tái)和可執(zhí)行文件發(fā)明了許多此類格式。
5.JDK是JRE的超集,包含JRE中的所有內(nèi)容,以及開(kāi)發(fā)applet和應(yīng)用程序所需的工具,例如編譯器和調(diào)試器。 JRE提供了庫(kù),Java虛擬機(jī)(JVM)和其他組件,以運(yùn)行用Java編程語(yǔ)言編寫(xiě)的小程序和應(yīng)用程序。
更多java干貨,可評(píng)論或者私信我!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI