JDK、JRE、JVM之間的關係

JDKJREJVM之間的關係:

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

 

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

 

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

 

 

 

那麼JRE的做用是什麼?如圖JREPC的類比: jvm

 

由圖可知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>中能夠看到。 post

 

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

 

 

這樣又有新的問題了,像myeclipse等開發工具也有集成JRE,那麼電腦就有不少套JRE,一樣執行java.exe有可能會獲得不一樣的結果。 spa

那麼咱們執行的是那一個java.exe server

當咱們輸入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

相關文章
相關標籤/搜索