1. 程式人生 > >JDK安裝路徑下的JRE與獨立安裝的JRE區別

JDK安裝路徑下的JRE與獨立安裝的JRE區別

      在JDK安裝目錄下的子檔案下,已經預設安裝了一個jre。且與獨立安裝的JRE6所包含的檔案幾乎完全一樣。

       JDK裡面內建的JRE和獨立的JRE是有一點差別的:
 在JDK安裝檔案中包含了一個完整的獨立版本的JRE,他會在JDK安裝過程中自動被執行。 

     JDK裡面的工具也是用JAVA編寫的,它們本身執行的時候也需要一套JRE,如C:/Program Files/Java/jdk1.5.x/目錄下的JRE。而C:/Program Files/Java/目錄下的JRE是用來執行我們自己編寫的JAVA程式。當然,兩套JRE中的任何一套都可以用來執行我們自己編寫的JAVA程式,但是JDK裡面的工具只能由C:/Program Files/Java/jdk1.5.x/目錄下的JRE來執行。

一個是java開發包(java develop kit),一個是java執行時環境(java runtime environment)


 

JDK JRE區別 

 

JDK裡面的工具也是用JAVA編寫的,它們本身執行的時候也需要一套JRE,如C:/Program Files/Java/jdk1.5.x/目錄下的JRE。而C:/Program Files/Java/目錄下的JRE是用來執行我們自己編寫的JAVA程式。當然,兩套JRE中的任何一套都可以用來執行我們自己編寫的JAVA程式, 但是JDK裡面的工具只能由C:/Program Files/Java/jdk1.5.x/目錄下的JRE來執行。


也就是說
jdk(java development kit)是開發工具包,相當於是一個編譯器。
jre(java runtime environment)是執行環境,相當於jvm虛擬機器。jdk開發出來的java程式必須在jvm中執行,jre就提供了這麼一個環境。
----------------------------------------------------------------------------

JDK就是Java Development Kit.簡單的說JDK是面向開發人員使用的SDK,它提供了Java的開發環境和執行環境。SDK是Software Development Kit 一般指軟體開發包,可以包括函式庫、編譯程式等。

JRE是Java Runtime Enviroment是指Java的執行環境,是面向Java程式的使用者,而不是開發者。

如果安裝了JDK,會發同你的電腦有兩套JRE,一套位於 /jre 另外一套位於 C:/Program Files/Java/jre1.5.0_15 目錄下,後面這套比前面那套少了Server端的Java虛擬機器,不過直接將前面那套的Server端Java虛擬機器複製過來就行了。而且在安裝JDK可 以選擇是否安裝這個位於 C:/Program Files/Java 目錄下的JRE。如果你只安裝JRE,而不是JDK,那麼只會在 C:/Program Files/Java 目錄下安裝唯一的一套JRE。

JRE的地位就象一臺PC機一樣,我們寫好的Win32應用程式需要作業系統幫我們執行,同樣的,我們編寫的Java程式也必須要JRE才能執行。 所以當你裝完JDK後,如果分別在硬碟上的兩個不同地方安裝了兩套JRE,那麼你可以想象你的電腦有兩臺虛擬的Java PC機,都具有執行Java程式的功能。所以我們可以說,只要你的電腦安裝了JRE,就可以正確執行Java應用程式。

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

這是因為JDK裡面有很多用Java所編寫的開發工具(如javac.exe、jar.exe等),而且都放置在 /lib/tools.jar 裡。從下面例子可以看出,先將tools.jar改名為tools1.jar,然後執行javac.exe,顯示如下結果: 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 是一樣的,會得到相同的結果。從這裡我們可以證明javac.exe只是一個包裝器(Wrapper),而製作的目的是為了讓開發者免於輸入太長的指命。 而且可以發現/lib目錄下的程式都很小,不大於2 9K,從這裡我們可以得出一個結論。就是JDK裡的工具幾乎是用Java所編寫,所以也是Java應用程式,因此要使用JDK所附的工具來開發Java程 序,也必須要自行附一套JRE才行,所以位於C:/Program Files/Java目錄下的那套JRE就是用來執行一般Java程式用的。

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

這個重大任務就落在java.exe身上。Java.exe的工作就是找到合適的JRE來執行Java程式。 Java.exe依照底下的順序來查詢JRE:自己的目錄下有沒有JRE;父目錄有沒有JRE;查詢登錄檔: [HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment] 所以java.exe的執行結果與你的電腦裡面哪個JRE被執行有很大的關係。


ADD:(小小結)

1.JVM -- java virtual machine
JVM就是我們常說的java虛擬機器,它是整個java實現跨平臺的最核心的 部分,所有的java程式會首先被編譯為.class的類檔案,這種類檔案可以在虛擬機器上執行,也就是說class並不直接與機器的作業系統相對應,而是 經過虛擬機器間接與作業系統互動,由虛擬機器將程式解釋給本地系統執行。
2.JRE -- java runtime environment
JRE 是指java執行環境。光有JVM還不能成class的執行,因為在解釋class的時候JVM需要呼叫解釋所需要的類庫lib。在JDK的安裝目錄裡你 可以找到jre目錄,裡面有兩個資料夾bin和lib,在這裡可以認為bin裡的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和lib和起 來就稱為jre。所以,在你寫完java程式編譯成.class之後,你可以把這個.class檔案和jre一起打包發給朋友,這樣你的朋友就可以執行你 寫程式了。(jre裡有執行.class的java.exe)
3.JDK -- java development kit
JDK是 java開發工具包,基本上每個學java的人都會先在機器上裝一個JDK,那他都包含哪幾部分呢?讓我們看一下JDK的安裝目錄。在目錄下面有六個檔案 夾、一個src類庫原始碼壓縮包、和其他幾個宣告檔案。其中,真正在執行java時起作用的是以下四個資料夾:bin、include、lib、jre。現 在我們可以看出這樣一個關係,JDK包含JRE,而JRE包含JVM。
bin:最主要的是編譯器(javac.exe)
include:java和JVM互動用的標頭檔案
lib:類庫
jre:java執行環境
(注意:這裡的bin、lib資料夾和jre裡的bin、lib是不同的)總的來說JDK是用於java程式的開發,而jre則是隻能執行class而沒有編譯的功能。

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

-----------------------------------------------------------

關於jdk和jre

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

Jre 是java runtime environment, 是java程式的執行環境。既然是執行,當然要包含jvm,也就是大家熟悉的虛擬機器啦,還有所有java類庫的class檔案,都在lib目錄下打包成了 jar。大家可以自己驗證。至於在windows上的虛擬機器是哪個檔案呢?學過MFC的都知道什麼是dll檔案吧,那麼大家看看jre/bin /client裡面是不是有一個jvm.dll呢?那就是虛擬機器。

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

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

記得在環境 變數path中設定jdk/bin路徑麼?這應該是大家學習Java的第一步吧,老師會告訴大家不設定的話javac和java是用不了的。確實jdk /bin目錄下包含了所有的命令。可是有沒有人想過我們用的java命令並不是 jdk/bin目錄下的而是jre/bin目錄下的呢?不信可以做一個實驗,大家可以把jdk/bin目錄下的java.exe剪下到別的地方再執行 java程式,發現了什麼?一切OK!

那麼有人會問了?我明明沒有設定jre/bin目錄到環境變數中啊?

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

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

------------------------------------------------------------------

簡單的說JDK是面向開發人員使用的SDK,它提供了Java的開發環境和執行環境。SDK是Software Development Kit 一般指軟體開發包,可以包括函式庫、編譯程式等。 
JDK就是Java Development Kit 
JRE是Java Runtime Enviroment是指Java的執行環境,是面向Java程式的使用者,而不是開發者。 

如果安裝了JDK,會發同你的電腦有兩套JRE,一套位於 /jre 另外一套位於 C:/Program Files/Java/j2re1.4.1_01 目錄下,後面這套比前面那套少了Server端的Java虛擬機器,不過直接將前面那套的Server端Java虛擬機器複製過來就行了。而且在安裝JDK可 以選擇是否安裝這個位於 C:/Program Files/Jav a 目錄下的JRE。如果你只安裝JRE,而不是JDK,那麼只會在 C:/Program Files/Java 目錄下安裝唯一的一套JRE。 

JRE的地位就象一臺PC機一樣,我們寫好的 Win32應用程式需要作業系統幫我們執行,同樣的,我們編寫的Java程式也必須要JRE才能執行。所以當你裝完JDK後,如果分別在硬碟上的兩個不同 地方安裝了兩套JRE,那麼你可以想象你的電腦有兩臺虛擬的Java PC機,都具有執行Java程式的功能。所以我們可以說,只要你的電腦安裝了JRE,就可以正確執行Jav a應用程式。 

1、為什麼Sun要讓JDK安裝兩套相同的JRE?這是因為JDK裡面有很多用Java所編寫的開發工具(如javac.exe、jar.exe等),而 且都放置在 /lib/tools.jar 裡。從下面例子可以看出,先將tools.jar改名為tools1.jar,然後執行javac.exe,顯示如下結果: 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 是一樣的,會得到相同的結果。從這裡我們可以證明javac.exe只是一個包裝器(Wrapper),而製作的目的是為了讓開發者免於輸入太長的指命。 而且可以發現/lib目錄下的程式都很小,不大於2 9K,從這裡我們可以得出一個結論。就是JDK裡的工具幾乎是用Java所編寫,所以也是Java應用程式,因此要使用JDK所附的工具來開發Java程 序,也必須要自行附一套JRE才行,所以位於C:/Program Files/Java目錄下的那套JRE就是用來執行一般Java程式用的。 

2、如果一臺電腦安裝兩套以上的JRE,誰來決定呢?這個重大任務就落在java.exe身上。Java.exe的工作就是找到合適的JRE來執行 Java程式。 Java.exe依照底下的順序來查詢JRE:自己的目錄下有沒有JRE;父目錄有沒有JRE;查詢登錄檔: [HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment] 所以java.exe的執行結果與你的電腦裡面哪個JRE被執行有很大的關係。 

3、介紹JVM JRE目錄下的Bin目錄有兩個目錄:server與client。這就是真正的jvm.dll所在。 jvm.dll無法單獨工作,當jvm.dll啟動後,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動態連結庫),而這些輔助用的動態連結庫(.dll)都必須位 於jvm.dll所在目錄的父目錄之中。因此想使用哪個JVM,只需要設定PATH,指向JRE所在目錄底下的jvm.dll。
---------------------------------------------------------------

 

之前學java安裝的都是jdk,而在公司安裝的是j2re,有點搞不清楚兩者關係,上網搜了一下,如下:

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

    JDK是java開發工具包(java Development Kit)的縮寫。它是一種構建在java平臺上釋出的應用程式、apple和元件的開發環境。JDK是一切java應用程式的基礎,所有的java應用程 序是構建在這個之上的。它是一組API,也可以說是一些java Class。要成為一個Java程式設計師,JDK是必不可少的最基本的工具。

    JRE是Java執行環境(Java Runtime Enviroment)的縮寫。它基本上就和Java虛擬機器是同一個概念。一般來說,在談論一個具體的產品的時候,可以說“JRE”,而說到理論中的一個 模型的時候,我們常用的是“Java虛擬機器”。要使用Java程式,JRE是必不可少的環境。

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

BEA Weblogic Server 7.0 自帶一套 JDK1.3.1_02 
下載了一套最新的JDK1.4.1_02 
JBuilder9自帶一套JKD1.4.1_02 
Oracle 8.1.7自帶一套JRE1.1.7 
Ration Rose自帶一套JDK1.3 
DreamWeaver自帶一套JDK1.3

      6套JRE,每套JRE都被各自安裝到不同的目錄,不會互相影響。當在控制檯執行java.exe, 作業系統 尋找JRE的方式如下:

先找當前目錄下有沒有JRE 
再找父目錄下有沒有JRE 
接著在PATH路徑中找JRE 
登錄檔HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment/ 檢視CurrentVersion的鍵值指向哪個JRE

      最常用的是在PATH路徑中找JRE,一般情況下,自己的程式執行之前都會先在批處理檔案裡面臨時設定PATH,把自己用的JRE放到PATH路徑最前面,所以肯定會執行自己帶的JRE,不會造成版本混亂。