JDK和JRE的區別 .
--搭建Java執行環境我只安裝JRE即可--
1. 定義
JRE(Java Runtime Enviroment)是Java的執行環境。面向Java程式的使用者,而不是開發者。如果你僅下載並安裝了JRE,那麼你的系統只能執行Java程式。JRE是執行Java程式所必須環境的集合,包含JVM標準實現及Java核心類庫。它包括Java虛擬機器、Java平臺核心類和支援檔案。它不包含開發工具(編譯器、偵錯程式等)。
JDK(Java Development Kit)又稱J2SDK(Java2 Software Development Kit),是Java開發工具包,它提供了Java的開發環境(提供了編譯器javac等工具,用於將java檔案編譯為class檔案)和執行環境(提供了JVM和Runtime輔助包,用於解析class檔案使其得到執行)。如果你下載並安裝了JDK,那麼你不僅可以開發Java程式,也同時擁有了執行Java程式的平臺。JDK是整個Java的核心,包括了Java執行環境(JRE),一堆Java工具tools.jar和Java標準類庫(rt.jar)。
2. 區別
JRE主要包含:java類庫的class檔案(都在lib目錄下打包成了jar)和虛擬機器(jvm.dll);JDK主要包含:java類庫的class檔案(都在lib目錄下打包成了jar)並自帶一個JRE。那麼為什麼JDK要自帶一個JRE呢?而且jdk/jre/bin下的client和server兩個資料夾下都包含jvm.dll(說明JDK自帶的JRE有兩個虛擬機器)。
記得在環境變數path中設定jdk/bin路徑麼?老師會告訴大家不設定的話javac和java是用不了的。確實jdk/bin目錄下包含了所有的命令。可是有沒有人想過我們用的java命令並不是jdk/bin目錄下的而是jre/bin目錄下的呢?不信可以做一個實驗,大家可以把jdk/bin目錄下的java.exe剪下到別的地方再執行java程式,發現了什麼?一切OK!(JRE中沒有javac命令,原因很簡單,它不是開發環境)那麼有人會問了?我明明沒有設定jre/bin目錄到環境變數中啊?試想一下如果java為了提供給大多數人使用,他們是不需要jdk做開發的,只需要jre能讓java程式跑起來就可以了,那麼每個客戶還需要手動去設定環境變數多麻煩啊?所以安裝jre的時候安裝程式自動幫你把jre的java.exe新增到了系統變數中,驗證的方法很簡單,去Windows/system32下面去看看吧,發現了什麼?有一個java.exe。
3. 難點
如果安裝了JDK,你的電腦就有兩套JRE(JRE本身和JDK中的JRE),前面這套比後面那套少了Server端的Java虛擬機器。
(1)為什麼Sun要讓JDK安裝兩套相同的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程式的。
(2)如果一臺電腦安裝兩套以上的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被執行有很大的關係。
(3)JDK-->JRE-->Bin目錄下有兩個資料夾:server與client,這是真正的jvm.dll所在。jvm.dll無法單獨工作,當jvm.dll啟動後,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動態連結庫),而這些輔助用的動態連結庫(.dll)都必須位於jvm.dll所在目錄的父目錄之中。因此想使用哪個JVM,只需要設定PATH,指向JRE所在目錄下的jvm.dll。
4. 最主流的JDK是Sun公司釋出的JDK,除了Sun之外,還有很多公司和組織都開發了自己的JDK,例如IBM公司開發的JDK,BEA公司的Jrocket,還有GNU組織開發的JDK等等。
1. 定義
JRE(Java Runtime Enviroment)是Java的執行環境。面向Java程式的使用者,而不是開發者。如果你僅下載並安裝了JRE,那麼你的系統只能執行Java程式。JRE是執行Java程式所必須環境的集合,包含JVM標準實現及Java核心類庫。它包括Java虛擬機器、Java平臺核心類和支援檔案。它不包含開發工具(編譯器、偵錯程式等)。
JDK(Java Development Kit)又稱J2SDK(Java2 Software Development Kit),是Java開發工具包,它提供了Java的開發環境(提供了編譯器javac等工具,用於將java檔案編譯為class檔案)和執行環境(提供了JVM和Runtime輔助包,用於解析class檔案使其得到執行)。如果你下載並安裝了JDK,那麼你不僅可以開發Java程式,也同時擁有了執行Java程式的平臺。JDK是整個Java的核心,包括了Java執行環境(JRE),一堆Java工具tools.jar和Java標準類庫(rt.jar)。
2. 區別
JRE主要包含:java類庫的class檔案(都在lib目錄下打包成了jar)和虛擬機器(jvm.dll);JDK主要包含:java類庫的class檔案(都在lib目錄下打包成了jar)並自帶一個JRE。那麼為什麼JDK要自帶一個JRE呢?而且jdk/jre/bin下的client和server兩個資料夾下都包含jvm.dll(說明JDK自帶的JRE有兩個虛擬機器)。
記得在環境變數path中設定jdk/bin路徑麼?老師會告訴大家不設定的話javac和java是用不了的。確實jdk/bin目錄下包含了所有的命令。可是有沒有人想過我們用的java命令並不是jdk/bin目錄下的而是jre/bin目錄下的呢?不信可以做一個實驗,大家可以把jdk/bin目錄下的java.exe剪下到別的地方再執行java程式,發現了什麼?一切OK!(JRE中沒有javac命令,原因很簡單,它不是開發環境)那麼有人會問了?我明明沒有設定jre/bin目錄到環境變數中啊?試想一下如果java為了提供給大多數人使用,他們是不需要jdk做開發的,只需要jre能讓java程式跑起來就可以了,那麼每個客戶還需要手動去設定環境變數多麻煩啊?所以安裝jre的時候安裝程式自動幫你把jre的java.exe新增到了系統變數中,驗證的方法很簡單,去Windows/system32下面去看看吧,發現了什麼?有一個java.exe。
3. 難點
如果安裝了JDK,你的電腦就有兩套JRE(JRE本身和JDK中的JRE),前面這套比後面那套少了Server端的Java虛擬機器。
(1)為什麼Sun要讓JDK安裝兩套相同的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程式的。
(2)如果一臺電腦安裝兩套以上的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被執行有很大的關係。
(3)JDK-->JRE-->Bin目錄下有兩個資料夾:server與client,這是真正的jvm.dll所在。jvm.dll無法單獨工作,當jvm.dll啟動後,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動態連結庫),而這些輔助用的動態連結庫(.dll)都必須位於jvm.dll所在目錄的父目錄之中。因此想使用哪個JVM,只需要設定PATH,指向JRE所在目錄下的jvm.dll。
4. 最主流的JDK是Sun公司釋出的JDK,除了Sun之外,還有很多公司和組織都開發了自己的JDK,例如IBM公司開發的JDK,BEA公司的Jrocket,還有GNU組織開發的JDK等等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27144762/viewspace-1302066/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jdk和jre的區別JDK
- JRE 和 JDK 的區別詳解JDK
- Jdk、Jre Jvm的區別和聯絡JDKJVM
- JDK JRE JVM 的區別JDKJVM
- jdk與jre的區別JDK
- JRE與JDK的區別與聯絡JDK
- JDK,JRE,JVM區別與聯絡JDKJVM
- JDK和JREJDK
- JDK,JRE和JVMJDKJVM
- JDK、JRE和JVMJDKJVM
- jre 和 jdk的關係JDK
- JDK.JRE和JVMJDKJVM
- JDK、JRE和JVM簡述JDKJVM
- 搜尋引擎第一步(Java之JDK,JRE區別)JavaJDK
- JDK與JREJDK
- JDK,JRE,JVMJDKJVM
- JDK JRE JVMJDKJVM
- jdk1.4和jdk1.5的有那些區別JDK
- SDK、JDK、JRE 和JVM 之間的關係JDKJVM
- Jdk代理和CGLIB代理的區別JDKCGLib
- Dubbo和JDK的SPI究竟有何區別?JDK
- 動態代理jdk和cglib的區別JDKCGLib
- JRE與JDK簡介JDK
- JVM、JDK、JRE三者的關係JVMJDK
- JDK 和 CGLib 實現動態代理和區別JDKCGLib
- JDK裡面的JRE是什麼JDK
- JDK、JRE、J2SE SDKJDK
- jdk8安裝後兩個資料夾,分別是jre、jdk表示什麼?JDK
- JDK內建執行緒池的共同點和區別JDK執行緒
- 【4】JDK和CGLIB生成動態代理類的區別JDKCGLib
- Jre庫包含的jar檔案(jdk1.6)JARJDK
- JDK、JRE、JVM,是什麼關係?JDKJVM
- jdk、jre、jvm三者關係JDKJVM
- 不同JDK版本之間的intern()方法的區別-JDK6 VS JDK6+JDK
- Java的JDK下Hashtable與HashMap的區別JavaJDKHashMap
- Java 基本概念:jvm、jdk、jre、jseJavaJVMJDKJS
- 【Eclipse】--Eclipse.ini,JDK,JRE,JVMEclipseJDKJVM
- 徹底搞清楚ConcurrentHashMap的實現原理(含JDK1.7和JDK1.8的區別)HashMapJDK