自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

jdk和jre的區(qū)別,你真的懂嗎?

開發(fā) 后端
大家肯定在安裝JDK的時候會有選擇是否安裝單獨的jre,一般都會一起安裝,我也建議大家這樣做。因為這樣更能幫助大家弄清楚它們的區(qū)別。

 [[271589]]

大家肯定在安裝JDK的時候會有選擇是否安裝單獨的jre,一般都會一起安裝,我也建議大家這樣做。因為這樣更能幫助大家弄清楚它們的區(qū)別:

Jre 是java runtime environment, 是java程序的運行環(huán)境。既然是運行,當然要包含jvm,也就是大家熟悉的虛擬機啦,還有所有java類庫的class文件,都在lib目錄下打包成了jar。大家可以自己驗證。至于在windows上的虛擬機是哪個文件呢?學過MFC的都知道什么是dll文件吧,那么大家看看jre/bin/client里面是不是有一個jvm.dll呢?那就是虛擬機。

Jdk 是java development kit,是java的開發(fā)工具包,里面包含了各種類庫和工具。當然也包括了另外一個Jre. 那么為什么要包括另外一個Jre呢?而且jdk/jre/bin同時有client和server兩個文件夾下都包含一個jvm.dll。說明是有兩個虛擬機的。這一點不知道大家是否注意到了呢?

相信大家都知道jdk的bin下有各種java程序需要用到的命令,與jre的bin目錄最明顯的區(qū)別就是jdk下才有javac,這一點很好理解,因為 jre只是一個運行環(huán)境而已。與開發(fā)無關(guān),正因為如此,具備開發(fā)功能的jdk自己的jre下才會同時有client性質(zhì)的jvm和server性質(zhì)的 jvm, 而僅僅作為運行環(huán)境的jre下只需要client性質(zhì)的jvm.dll就夠了。

記得在環(huán)境變量path中設(shè)置jdk/bin路徑麼?這應(yīng)該是大家學習Java的第一步吧,老師會告訴大家不設(shè)置的話javac和java是用不了的。確實jdk/bin目錄下包含了所有的命令??墒怯袥]有人想過我們用的java命令并不是 jdk/bin目錄下的而是jre/bin目錄下的呢?不信可以做一個實驗,大家可以把jdk/bin目錄下的java.exe剪切到別的地方再運行 java程序,發(fā)現(xiàn)了什么?一切OK!

那么有人會問了?我明明沒有設(shè)置jre/bin目錄到環(huán)境變量中啊?

試想一下如果java為了提供給大多數(shù)人使用,他們是不需要jdk做開發(fā)的,只需要jre能讓java程序跑起來就可以了,那么每個客戶還需要手動去設(shè)置環(huán)境變量多麻煩啊?所以安裝jre的時候安裝程序自動幫你把jre的java.exe添加到了系統(tǒng)變量中,驗證的方法很簡單,大家看到了系統(tǒng)環(huán)境變量的 path最前面有“%SystemRoot%system32;%SystemRoot%;”這樣的配置,那么再去Windows/system32下面去看看吧,發(fā)現(xiàn)了什么?有一個java.exe。

如果強行能夠把jdk/bin挪到system32變量前面,當然也可以迫使使用jdk/jre里面的java,不過除非有必要,我不建議大家這么做。使用單獨的jre跑java程序也算是客戶環(huán)境下的一種測試。

[[271590]]

 

通俗點來說: jdk是java的開發(fā)包,其中包括jre;jre僅僅是java的運行時環(huán)境;而JDK包括了同版本的JRE,此外還包括有編譯器和其它工具

JDK是java開發(fā)工具包(java Development Kit)的縮寫。它是一種構(gòu)建在java平臺上發(fā)布的應(yīng)用程序、apple和組件的開發(fā)環(huán)境。JDK是一切java應(yīng)用程序的基礎(chǔ),所有的java應(yīng)用程序是構(gòu)建在這個之上的。它是一組API,也可以說是一些java Class。要成為一個Java程序員,JDK是必不可少的最基本的工具。

JRE是Java運行環(huán)境(Java Runtime Enviroment)的縮寫。它基本上就和Java虛擬機是同一個概念。一般來說,在談?wù)撘粋€具體的產(chǎn)品的時候,可以說“JRE”,而說到理論中的一個模型的時候,我們常用的是“Java虛擬機”。要使用Java程序,JRE是必不可少的環(huán)境。

如果機子里安裝了多個版本的jdk,如下:

BEA Weblogic Server 7.0 自帶一套 JDK1.3.1_02

下載了一套最新的JDK1.4.1_02

JBuilder9自帶一套JKD1.4.1_02

Oracle8.1.7自帶一套JRE1.1.7

Ration Rose自帶一套JDK1.3

DreamWeaver自帶一套JDK1.3

6套JRE,每套JRE都被各自安裝到不同的目錄,不會互相影響。當在控制臺執(zhí)行java.exe,操作系統(tǒng)尋找JRE的方式如下:

先找當前目錄下有沒有JRE

再找父目錄下有沒有JRE

接著在PATH路徑中找JRE(一般運行時從path中查找,按照path設(shè)置前后順序,以前面為準)

注冊表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ 查看CurrentVersion的鍵值指向哪個JRE(一般XP下是這個:C:\Program Files\Java\jre6)

最常用的是在PATH路徑中找JRE,一般情況下,自己的程序運行之前都會先在批處理文件里面臨時設(shè)置PATH,把自己用的JRE放到PATH路徑最前面,所以肯定會運行自己帶的JRE,不會造成版本混亂。

[[271591]]

 

JDK就是Java Development Kit.簡單的說JDK是面向開發(fā)人員使用的SDK,它提供了Java的開發(fā)環(huán)境和運行環(huán)境。SDK是Software Development Kit 一般指軟件開發(fā)包,可以包括函數(shù)庫、編譯程序等。

JRE是Java Runtime Enviroment是指Java的運行環(huán)境,是面向Java程序的使用者,而不是開發(fā)者。

如果安裝了JDK,會發(fā)同你的電腦有兩套JRE,一套位于 \jre 另外一套位于 C:\Program Files\Java\jre1.5.0_15 目錄下,后面這套比前面那套少了Server端的Java虛擬機,不過直接將前面那套的Server端Java虛擬機復(fù)制過來就行了。而且在安裝JDK可以選擇是否安裝這個位于 C:\Program Files\Java 目錄下的JRE。如果你只安裝JRE,而不是JDK,那么只會在 C:\Program Files\Java 目錄下安裝唯一的一套JRE。

JRE的地位就象一臺PC機一樣,我們寫好的Win32應(yīng)用程序需要操作系統(tǒng)幫我們運行,同樣的,我們編寫的Java程序也必須要JRE才能運行。所以當你裝完JDK后,如果分別在硬盤上的兩個不同地方安裝了兩套JRE,那么你可以想象你的電腦有兩臺虛擬的Java PC機,都具有運行Java程序的功能。所以我們可以說,只要你的電腦安裝了JRE,就可以正確運行Java應(yīng)用程序。

1、為什么Sun要讓JDK安裝兩套相同的JRE?

這是因為JDK里面有很多用Java所編寫的開發(fā)工具(如javac.exe、jar.exe等),而且都放置在 \lib\tools.jar 里。從下面例子可以看出,先將tools.jar改名為tools1.jar,然后運行javac.exe,顯示如下結(jié)果: Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 這個意思是說,你輸入javac.exe與輸入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一樣的,會得到相同的結(jié)果。從這里我們可以證明javac.exe只是一個包裝器(Wrapper),而制作的目的是為了讓開發(fā)者免于輸入太長的指命。而且可以發(fā)現(xiàn)\lib目錄下的程序都很小,不大于2 9K,從這里我們可以得出一個結(jié)論。就是JDK里的工具幾乎是用Java所編寫,所以也是Java應(yīng)用程序,因此要使用JDK所附的工具來開發(fā)Java程序,也必須要自行附一套JRE才行,所以位于C:\Program Files\Java目錄下的那套JRE就是用來運行一般Java程序用的。

2、如果一臺電腦安裝兩套以上的JRE,誰來決定呢?

這個重大任務(wù)就落在java.exe身上。Java.exe的工作就是找到合適的JRE來運行Java程序。 Java.exe依照底下的順序來查找JRE:自己的目錄下有沒有JRE;父目錄有沒有JRE;查詢注冊表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 所以java.exe的運行結(jié)果與你的電腦里面哪個JRE被執(zhí)行有很大的關(guān)系。

ADD:(小結(jié))

1.JVM -- java virtual machineJVM就是我們常說的java虛擬機,它是整個java實現(xiàn)跨平臺的最核心的部分,所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執(zhí)行,也就是說class并不直接與機器的操作系統(tǒng)相對應(yīng),而是經(jīng)過虛擬機間接與操作系統(tǒng)交互,由虛擬機將程序解釋給本地系統(tǒng)執(zhí)行。

2.JRE -- java runtime environmentJRE是指java運行環(huán)境。光有JVM還不能成class的執(zhí)行,因為在解釋class的時候JVM需要調(diào)用解釋所需要的類庫lib。在JDK的安裝目錄里你可以找到j(luò)re目錄,里面有兩個文件夾bin和lib,在這里可以認為bin里的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和 lib和起來就稱為jre。所以,在你寫完java程序編譯成.class之后,你可以把這個.class文件和jre一起打包發(fā)給朋友,這樣你的朋友就可以運行你寫程序了。(jre里有運行.class的java.exe)

3.JDK -- java development kitJDK是java開發(fā)工具包,基本上每個學java的人都會先在機器上裝一個JDK,那他都包含哪幾部分呢?讓我們看一下JDK的安裝目錄。在目錄下面有六個文件夾、一個src類庫源碼壓縮包、和其他幾個聲明文件。其中,真正在運行java時起作用的是以下四個文件夾:bin、include、lib、 jre。現(xiàn)在我們可以看出這樣一個關(guān)系,JDK包含JRE,而JRE包含JVM。bin:最主要的是編譯器(javac.exe)include:java和JVM交互用的頭文件lib:類庫jre:java運行環(huán)境(注意:這里的bin、lib文件夾和jre里的bin、lib是不同的)總的來說JDK是用于java程序的開發(fā),而jre則是只能運行class而沒有編譯的功能。

eclipse、idea等其他IDE有自己的編譯器而不是用JDK bin目錄中自帶的,所以在安裝時你會發(fā)現(xiàn)他們只要求你選中jre路徑就ok了。

歡迎工作一到五年的Java工程師朋友們加入Java技術(shù)交流群:659270626

群內(nèi)提供免費的Java架構(gòu)學習資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構(gòu)資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

責任編輯:龐桂玉 來源: 今日頭條
相關(guān)推薦

2009-07-08 17:59:51

JDK JRE

2010-09-25 14:58:12

JVMJDKJRE

2022-06-21 09:53:03

FedoraUbuntuLinux

2022-02-15 20:08:41

JDKJavaWindows

2022-06-27 08:24:34

JDKJavaJRE

2021-03-30 09:59:52

支付寶加密數(shù)據(jù)泄露

2019-11-13 23:33:16

工業(yè)物聯(lián)網(wǎng)IIOT物聯(lián)網(wǎng)

2020-09-10 14:33:18

計算機

2010-09-26 14:32:34

JDKJREJVM

2022-09-28 18:16:34

JavaJDK

2022-04-07 16:03:36

JavaScriptTypeScript

2009-07-08 10:23:29

2018-05-10 09:06:24

2009-06-25 14:46:50

JDKJREJVM

2023-01-11 09:01:00

集群小文件存儲

2022-05-06 09:21:21

TypeScriptinterfacetype

2023-09-27 08:46:44

Java 技術(shù)編程語言

2019-02-01 09:38:16

2023-04-28 07:49:13

Javawaitsleep

2024-10-16 17:10:41

點贊
收藏

51CTO技術(shù)棧公眾號