jdk和jre的區別

jdk和jre的區別

對於java初學者來說,往往不懂區分jdk和jre的區別,實際上這兩個東西差別很大的,有必要了解一下:

簡單的說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。

j2sdk jdk jre jvm的聯繫與區別(轉)

參考一:
    j2sdk (Software Development Kit for Java 2) ,簡稱JDK.它包括了JDK(Java Development Kit),JRE(Java Runtime Enviroment),Java Plug-in.我們通常所說的JDK以及下載並安裝的JDK就是指它了.
    JDK (Java Development Kit), Java開發工具包.JDK是一組API,也可以說是一些java Class。JDK是一切java應用程序的基礎,所有的java應用程序是構建在這個之上的。他位於"Java安裝目錄/jdk1.5.0_07".
    JRE (Java Runtime Environment),Java運行環境.
   細心的人可能會發現在Java安裝目錄有兩套JRE,一套位於"Java安裝目錄/jdk1.5.0_07/jre",一套位於"Java安裝目錄 /jre1.5.0_07",爲什麼會有兩套JRE呢?因爲JDK裏面有很多用Java所編寫的開發工具(如javac.exe、jar.exe等),而且都放置在 <JDK安裝目錄>/lib/tools.jar 裏,它們本身運行的時候也需要一套 JRE,也就是前者。而後者的JRE是用來執行我們自己編寫的JAVA程序。 當然,兩套JRE中的任何一套都可以用來執行我們自己編寫的JAVA程序,但是JDK裏面的工具只能由"Java安裝目錄/jdk1.5.x/"目錄下的JRE來執行。
既然在我們的電腦裏面至少有兩套JRE,那麼由誰來決定使用哪一套JRE呢?這個重擔就落在java.exe的身上。
   當我們在命令行輸入:java xxx的時候,java.exe的任務就是在我們電腦上衆多的JRE中找到合適的JRE來執行xxx。java.exe依據以下順序來尋找JRE:
(1)自己的目錄下有沒有JRE目錄;
(2)父目錄下有沒有JRE目錄;
(3)查詢註冊表HKEY_LOCAL_MACHINE/Software/JavaSoft/Java Runtime Environment/
所以java.exe的執行結果與我們電腦裏哪一個java.exe(搜索一下就會發現我們電腦裏面也不止一個java.exe)被執行以及哪套JRE來執行JVA程序有很大的關係。
另外,java.exe在找到合適的JRE以後,還有一個驗證版本的程序,也就是java.exe與JRE的版本一致纔可以執行。如果出現版本不一致的問題,一定要記得兩件事情:
(1)哪一個java.exe被執行;
(2)java.exe找到哪一套JRE。
只要這兩件事情確定了,我們就抓住了問題的來龍去脈,解決起來也就輕而易舉了。
JVM 是一個虛擬的計算機,能模擬各種計算機的功能,它有處理器、堆棧、寄存器等虛擬的硬件架構,同時還有相應的指令系統。JVM屏蔽了與具體操作系統平臺相關的信息,使得Java語言編譯程序只需生成在JVM上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行,從而實現Java程序的跨平臺特性。JRE目錄下的Bin目錄有兩個目錄:server與client。這就是真正的jvm.dll所在。jvm.dll無法單獨工作,當jvm.dll啓動後,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動態鏈接庫),而這些輔助用的動態鏈接庫(.dll)都必須位於jvm.dll所在目錄的父目錄之中。
因此想使用哪個JVM,只需要設置PATH,指向JRE所在目錄底下的jvm.dll。
 
參考二:
 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了。
發佈了18 篇原創文章 · 獲贊 0 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章