JDK JRE區別

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就提供了這麼一個環境。
----------------------------------------------------------------------------html

JDK就是Java Development Kit.簡單的說JDK是面向開發人員使用的SDK,它提供了Java的開發環境和運行環境。SDK是Software Development Kit 通常指軟件開發包,能夠包括函數庫、編譯程序等。java

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。windows

JRE的地位就象一臺PC機同樣,咱們寫好的Win32應用程序須要操做系統幫咱們運行,一樣的,咱們編寫的Java程序也必需要JRE才能運行。 因此當你裝完JDK後,若是分別在硬盤上的兩個不一樣地方安裝了兩套JRE,那麼你能夠想象你的電腦有兩臺虛擬的Java PC機,都具備運行Java程序的功能。因此咱們能夠說,只要你的電腦安裝了JRE,就能夠正確運行Java應用程序。app

一、爲何Sun要讓JDK安裝兩套相同的JRE?eclipse

這是由於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程序用的。jvm

二、若是一臺電腦安裝兩套以上的JRE,誰來決定呢?ide

這個重大任務就落在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應用程序。 

一、爲何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程序用的。 

二、若是一臺電腦安裝兩套以上的JRE,誰來決定呢?這個重大任務就落在java.exe身上。Java.exe的工做就是找到合適的JRE來運行 Java程序。 Java.exe依照底下的順序來查找JRE:本身的目錄下有沒有JRE;父目錄有沒有JRE;查詢註冊表: [HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment] 因此java.exe的運行結果與你的電腦裏面哪一個JRE被執行有很大的關係。 

三、介紹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

 

轉自:http://blog.csdn.net/yuyulover/article/details/4427527

相關文章
相關標籤/搜索