JDK、JRE,、JVM之間的關系 如果安裝了JDK,,會發(fā)同你的電腦有兩套JRE, 一套位于 <JDK安裝目錄>\jre 另外一套位于 C:\Program Files\Java\j2re1.4.1_01 目錄下 后面這套比前面那套少了Server端的Java虛擬機,,不過直接將前面那套的Server端Java虛擬機復制過來就行了,。而且在安裝JDK可以選擇是否安裝這個位于 C:\Program Files\Java 目錄下的JRE。 如果你只安裝JRE,,而不是JDK,,那么只會在 C:\Program Files\Java 目錄下安裝唯一的一套JRE,。 JRE的地位就象一臺PC機一樣,,我們寫好的Win32應用程序需要操作系統(tǒng)幫我們運行,同樣的,,我們編寫的Java程序也必須要JRE才能運行,。所以當你裝完JDK后,,如果分別在硬盤上的兩個不同地方安裝了兩套JRE,那么你可以想象你的電腦有兩臺虛擬的Java PC機,,都具有運行Java程序的功能,。所以我們可以說,只要你的電腦安裝了JRE,,就可以正確運行Java應用程序,。 1、為什么Sun要讓JDK安裝兩套相同的JRE,? 這是因為JDK里面有很多用Java所編寫的開發(fā)工具(如javac.exe,、jar.exe等),而且都放置在 <JDK安裝目錄>\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),,而制作的目的是為了讓開發(fā)者免于輸入太長的指命。而且可以發(fā)現(xiàn)<JDK安裝目錄>\lib目錄下的程序都很小,,不大于29K,,從這里我們可以得出一個結論。就是JDK里的工具幾乎是用Java所編寫,,所以也是Java應用程序,,因此要使用JDK所附的工具來開發(fā)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被執(zhí)行有很大的關系,。 3,、介紹JVM JRE目錄下的Bin目錄有兩個目錄:server與client。這就是真正的jvm.dll所在,。 jvm.dll無法單獨工作,,當jvm.dll啟動后,,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動態(tài)鏈接庫),而這些輔助用的動態(tài)鏈接庫(.dll)都必須位于jvm.dll所在目錄的父目錄之中,。 因此想使用哪個JVM,,只需要設置PATH,指向JRE所在目錄底下的jvm.dll,。 2,、如果一臺電腦安裝兩套以上的JRE,誰來決定呢,?
javac is Sun‘s version of java compiler, not a wrapper. Like any other executables, it uses other libraries such as some dll on windows, some shared libraies on Unix. It also uses some jar files came with it. That is just how it is, and how it works.
javachina wrote:
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=360157 |
|