JDK、JRE、JVM之間的關系


JDKJREJVM之間的關系:

首先看看JDKJRE的區別,如下圖所示:

 

JKD1.4版本與JDK1.3版本會有一點點不同:

 

從上圖知,如果您安裝了JDK,那么你的電腦地下一定會有兩套JRE、一套位於<jdk安裝目錄>\jre底下,另一套位於C:\Program File\JavaSoft底下(JDK1.4則是放在C:\Program File\Java底下)。如果你只下載了JRE而非JDK,那么就只會在C:\Program File\JavaSoft底下安裝唯一的一套JRE

 

 

 

那么JRE的作用是什么?如圖JREPC的類比:

 

由圖可知JRE的地位就像一台PC一樣,WIN32程序需要作業系統來幫我們執行,同樣,Java應用程序需要JRE才能幫我們執行。當安裝完JDK之后,如果分別在硬盤的不同地方安裝了兩套JRE,那么你可以想象你的電腦有兩台虛擬的Java PC,都具有執行Java程序的功能。所以Java虛擬機只是JRE其中的一個成員而已,以更技術的角度來看,Java虛擬機只是JRE里頭的一個動態連結函數庫。

 

那么為什么會有兩套JRE?真正原因是-JDK里面也附上了很多用Java寫的開發工具(例如javac.exejar.exe等),而且它們都放置在<jdk安裝目錄\lib\tools.jar>之中。有人會問用Java編寫的應用程序不是.class才對嗎?其實在命令提示符中輸入javac.exe和輸入java -classpath

d:\j2sdk1.4.0\lib\tools.jar com.sun.tools.javac.Main會得到相同的結果,javac.exe只是一個包裝器而已。JDK還有很多開發工具采用包裝器的概念,在<jdk安裝目錄\bin>中可以看到。

 

JDK里面的工具幾乎都是用Java所撰寫的,所以JDK本身就是Java應用程序,因此要使用JDK附的工具來開發Java程序,也必需要自行附一套JRE才行,這就是<jdk安裝目錄>\jre底下需要一套JRE的原因。而位於Program File\底下那套JRE就是哪來執行我們自己撰寫的Java應用程序。不過,兩套JRE都可以用來執行我們自己寫的程序,可以JDK內附的開發工具預設置使用包裝器啟動的情況下,都會自己去選擇用<jdk安裝目錄>\jre底下的那套JRE

 

 

這樣又有新的問題了,像myeclipse等開發工具也有集成JRE,那么電腦就有很多套JRE,同樣執行java.exe有可能會得到不同的結果。

那么我們執行的是那一個java.exe

當我們輸入java XXX的時候,java.exe的工作就是找到合適的JRE來執行。Java.exe依照下面的邏輯來尋找JRE

1,自己的目錄下有沒有JRE目錄

2,父目錄底下JRE子目錄

3,查詢windows registry(HKEY_LOCAL_MACHINE\Software\JavaSoft\Java\Runtime Environment\)

 

我們可以用path來指定執行哪個java.exe。當我們指定了path=d:\j2skd1.4.0\bin是,執行java.exe一定是d:\j2skd1.4.0\bin底下的java.exe,所以java.exe選到的是父目錄d:\j2skd1.4.0底下的JRE。打開d:\j2skd1.4.0\jre\bin這個目錄,您會看到clientserver兩個目錄,里面都會分別看到jvm.dll,這就是Java虛擬機所在。

 

因此,在我們開發Java應用程序或是執行Java程序的時候,一定要記住兩件事:

1,那一個java.exe被執行。

2java.exe找到哪一套JRE


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM