JAVA中JDK與JRE的區別

  1. 定義
    這裏寫圖片描述
    從上圖我們已經可以簡單的看出JDK和JRE的區別。
    JRE(Java Runtime Enviroment)是Java的運行環境。面向Java程序的使用者,而不是開發者。如果你僅下載並安裝了JRE,那麼你的系統只能運行Java程序(安裝過程中會自動添加PTAH)。JRE是運行Java程序所必須環境的集合,包含JVM標準實現及Java核心類庫。它包括Java虛擬機、Java平臺核心類和支持文件。它不包含開發工具(編譯器、調試器等)。
    JDK(Java Development Kit)是Java開發工具包,它提供了Java的開發環境(提供了編譯器javac等工具,用於將java文件編譯爲class文件)和運行環境(提供了JVM和Runtime輔助包,用於解析class文件使其得到運行)。如果你下載並安裝了JDK(需要配置環境變量),那麼你不僅可以開發Java程序,也同時擁有了運行Java程序的平臺。JDK是整個Java的核心,包括了Java運行環境(JRE),一堆Java工具tools.jar和Java標準類庫(rt.jar)。
  2. JDK下的jre和主目錄下的jre
    安裝JDK的時候我們配置了環境變量,jdk、bin目錄下包含了所有的命令。但是我們用的java命令並不是jdk/bin目錄下的而是jre/bin目錄下的。驗證的方法很簡單:將jdk/bin目錄下的java命令刪除掉,還是可以運行java程序,這是因爲安裝jre的時候安裝程序自動把java.exe添加到系統變量中(也就是可以在Windows/system32中找到)。這也解釋了很多電腦沒有配置環境變量也可以運行java程序的原因(因爲它們有jre)。
    安裝JDK之後我們會發現兩個jre文件夾一個在jdk文件夾下,一個在java文件夾下,如下圖所示:
    這裏寫圖片描述
    這裏寫圖片描述
    爲什麼有兩套jre呢?這是因爲JDK裏面有很多用Java所編寫的開發工具(如javac.exe、jar.exe等),而且都放置在/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),而製作的目的是爲了讓開發者免於輸入太長的指命。而且可以發現/lib目錄下的程序都很小,不大於29K,從這裏我們可以得出一個結論。就是JDK裏的工具幾乎是用Java所編寫,所以也是Java應用程序,因此要使用JDK所附的工具來開發Java程序,也必須要自行附一套JRE才行,所以位於JDK目錄下的那套JRE就是用來運行一般Java程序的。
    我們安裝了JDK,運行java程序到底是使用jdk下的jre還是java下的jre呢?這個重大任務就落在java.exe身上。java.exe的工作就是找到合適的JRE來運行Java程序。java.exe依照以下的順序來查找JRE:1)自己的目錄下有沒有JRE;2)父目錄有沒有JRE;3)查詢註冊表:[HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment]。所以java.exe的運行結果與你的電腦裏面哪個JRE被執行有很大的關係。
    這裏寫圖片描述
    從註冊表中我們可以發現java程序使用的是java目錄下的jre。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章