SDK、JDK、JRE和JVM的關係

摘自:
2007年09月22日 星期六 16:14

簡單的說就是:

JRE = Java 運行時環境,有了它就能運行Java程序,可以理解爲java虛擬機。
JDK = Java 開發環境,除能運行Java程序外,有Java 標準API類庫,可以在此基礎上開發Java程序。

        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
Oracle8.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,不會造成版本混亂。

SDK(Software Develop Kit,軟件開發工具包),用於幫助開發人員的提高工作效率。各種不同類型的軟件開發,都可以有自己的SDK。Windows有Windows SDK,DirectX 有 DirectX 9 SDK,.NET開發也有Microsoft .NET Framework SDK。JAVA開發也不含糊,也有自己的Java SDK。

Java SDK最早叫Java Software Develop Kit,後來改名爲JDK,即Java Develop Kit。

JDK作爲Java開發工具包,主要用於構建在Java平臺上運行的應用程序、Applet 和組件等。

 

根據圖上顯示的關係,JDK包含JRE,JRE包含JVM。

1、爲什麼Sun要讓JDK安裝兩套相同的JRE?這是因爲JDK裏面有很多用Java所編寫的開發工具(如javac.exe、jar.exe等),而且都放置在 \lib\tools.jar 裏。從下面例子可以看出,先將tools.jar改名爲to ols1.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所編寫,所以也是Jav a應用程序,因此要使用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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章