揭露JDK,JRE,JVM三者不為人知的隱情
你對(duì)JDK,JRE,JVM的關(guān)系是否了解,JDK是SUN公司發(fā)布的用于開(kāi)發(fā)Java程序的工具包,JRE相當(dāng)于PC,各種Java類(lèi)庫(kù)(通常使用Java編寫(xiě))相當(dāng)于PC上的操作系統(tǒng),而JVM是Java虛擬機(jī),在window下作為動(dòng)態(tài)連接庫(kù)(jvm.dll)存在,用于解釋執(zhí)行Java字節(jié)碼。
JDK,JRE,JVM的關(guān)系
JDK(JavadevelopmemtKit):
是SUN公司發(fā)布的用于開(kāi)發(fā)Java程序的工具包,在它的bin目錄下有很多工具,常見(jiàn)的包括:javac.exe,java.exe,javadoc.exe等(其中有很多都是用Java編寫(xiě)的)各種版本的IDE工具也是需要使用JDK來(lái)完成編譯,打包,運(yùn)行等各種功能的。
JRE(JavaRuntimeEnvironment):
顧名思義,java的運(yùn)行環(huán)境,而JDK是開(kāi)發(fā)工具,在它的安裝目錄下包含了JRE目錄,其實(shí)在安裝JDK時(shí)(1.4版本以上),有一個(gè)安裝選項(xiàng),如果勾上時(shí),在Java的安裝目錄下會(huì)多一個(gè)JRE目錄,這里的JRE與JDK下的JRE目錄基本上是完全一致的,那么為什么需要兩個(gè)JRE呢?
前面已經(jīng)提到過(guò),JDK的bin目錄下的很多工具都是用Java編寫(xiě)的,使用這些工具的時(shí)候也是需要運(yùn)行環(huán)境的,通過(guò)這些.exe包裝器(這些包裝器提供了尋找tools.jar中的一些java類(lèi)的快捷方法,不需要輸入一長(zhǎng)串的包名和類(lèi)名)來(lái)使用那些工具時(shí),java會(huì)自動(dòng)尋找父目錄下的JRE,所以在這里放置了JRE。
JVM(JavaVirtureMatchine):
Java虛擬機(jī),在window下作為動(dòng)態(tài)連接庫(kù)(jvm.dll)存在,用于解釋執(zhí)行Java字節(jié)碼。在同一個(gè)版本的JRE中,虛擬機(jī)也有不同版本,如Client,Server之分。
三者的關(guān)系可以與PC,操作系統(tǒng),硬件之間的關(guān)系做比較:
JRE相當(dāng)于PC,各種Java類(lèi)庫(kù)(通常使用Java編寫(xiě))相當(dāng)于PC上的操作系統(tǒng),可以方便的操作硬件資源,而Java中的原生類(lèi)庫(kù)(通常使用C編寫(xiě))相當(dāng)于Windows操作系統(tǒng)中的win32API,而JVM就相當(dāng)于PC中的硬件了,負(fù)責(zé)運(yùn)行和計(jì)算。而JDK只是一個(gè)編寫(xiě)各種程序或者Java類(lèi)庫(kù)的工具。
平時(shí)我們一般只要知道:在輸入java-version命令時(shí),如果在系統(tǒng)PATH下存在java.exe這個(gè)可執(zhí)行文件,在命令行中會(huì)得到相應(yīng)Java的版本信息,如果沒(méi)有則會(huì)報(bào)錯(cuò)。但是它在尋找對(duì)應(yīng)的JRE時(shí),其實(shí)另有一段隱情:
1.首先它會(huì)尋找自己目錄下的JRE
2.尋找父目錄下的JRE
3.尋找注冊(cè)表中HKEY_LOCAL_MACHINE\Software\JavaSoft\Java\RuntimeEnvironment\(相應(yīng)版本)的值所指定的JRE,一般為Java目錄下JRE(非JDK目錄下的JRE)。
【編輯推薦】