1. 程式人生 > >Java中JDK,JRE和JVM之間的關係-(轉載)

Java中JDK,JRE和JVM之間的關係-(轉載)

初學JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先從概念上理解一下吧,JDK(Java Development Kit)簡單理解就是Java開發工具包,JRE(Java Runtime Enviroment)是Java的執行環境,JVM( java virtual machine)也就是常常聽到Java虛擬機器。JDK是面向開發者的,JRE是面向使用JAVA程式的使用者,上面只是簡單的區別,一般網上好多都講概念,我就不講了,直接截圖應該會更清晰一點,我安裝的JDK1.8,效果如圖:

JDK和JRE

通過上圖發現發現有兩個JRE資料夾,如果細看裡面的內容基本上是一樣的,如果是隻是Java程式使用者,那麼只會有最外層的那個JRE目錄,JDK中是JRE自帶的,你如果安裝了JDK必然裡面會有一個JRE.那麼問題來了,為什麼會有兩套JRE呢?

最開始使用JAVA的時候設定JAVA環境變數的時候除了設定JAVA_Home中JDK的路徑之外,還會需要設ClassPath,%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;dt.jar和tools.jar是兩個java最基本的包,裡面包含了從java最重要的lang包到各種高階功能如視覺化的swing包,是java必不可少的。而path下面的bin裡面都是java的可執行的編譯器及其工具,如java,javadoc等,你在任意的資料夾下面執行cmd鍵入javac,系統就能自動召見java的編譯器就是歸功於這個環境變數的設定  ;如果修改其中tools.jar的名字,cmd執行的時候會報錯:

報錯的原因就是輸入的javac的命令不是去JDK中bin目錄去找的javac.exe,而是去JDK中lib目錄中的tools.jar中com.sun.tools.javac.Main中執行,因此javac.exe只是一個包裝器(Wrapper),存在的目的是為了讓開發者免於輸入過長的指命。這個時候發現JDK裡的工具幾乎是用Java所編寫,同屬於Java應用程式,因此要使用JDK所附的工具來開發Java程式,所以自身需要附一套JRE才能執行。上圖中與jdk同級目錄下的JRE就是用來執行一般Java程式用的。

兩套JRE執行的時候究竟執行哪一個呢,這個時候JDK中java.exe先從自身目錄中找,然後父級目錄中找,如果都沒有就去登錄檔中找:

 所以java.exe的執行結果與你的電腦裡面哪個JRE被執行有很大的關係,JDK和JRE應該算是說完了,下面說說JRE和JVM.

JRE和JVM

JVM -- java virtual machineJVM就是我們常說的java虛擬機器,它是整個java實現跨平臺的最核心的部分,所有的java程式會首先被編譯為.class的類檔案,這種類檔案可以在虛擬機器上執行,class檔案並不直接與機器的作業系統相對應,而是經過虛擬機器間接與作業系統互動,由虛擬機器將程式解釋給本地系統執行,類似於C#中的CLR。

JVM不能單獨搞定class的執行,解釋class的時候JVM需要呼叫解釋所需要的類庫lib。在JDK下面的的jre目錄裡面有兩個資料夾bin和lib,在這裡可以認為bin裡的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和 lib和起來就稱為jre。JVM+Lib=JRE,如果講的具體點就是bin目錄下的jvm.dll檔案, jvm.dll無法單獨工作,當jvm.dll啟動後,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動態連結庫),而這些輔助用的動態連結庫(.dll)都必須位 於jvm.dll所在目錄的父目錄之中。因此想使用哪個JVM,只需要設定PATH,指向JRE所在目錄下的jvm.dll。

 

JDK在目前為止還是模糊的概念,這個時候可以通過JDK的目錄檔案來看下:

在目錄下面有五個資料夾、一個src類庫原始碼壓縮包和幾個宣告檔案,其他五個資料夾分別是:bin、db、include、lib、 jre,db這個檔案看業務需求~

bin:最主要的是編譯器(javac.exe);

db:jdk從1.6之後內建了Derby資料庫,它是是一個純用Java實現的記憶體資料庫,屬於Apache的一個開源專案。用Java實現的,所以可以在任何平臺上執行;另外一個特點是體積小,免安裝,只需要幾個小jar包就可以運行了。

include:java和JVM互動用的標頭檔案;

lib:常用類庫

jre:java執行環境

JDK包含JRE,而JRE包含JVM,總的來說JDK是用於java程式的開發,而jre則是隻能執行class而沒有編譯的功能,Eclipse、IntelliJ IDEA等其他IDE有自己的編譯器而不是用JDK bin目錄中自帶的,所以在安裝時只需選中jre路徑就ok了,最後用張網路圖片總結下吧:

作者:FlyElephant
出處: http://www.cnblogs.com/xiaofeixiang

初學JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先從概念上理解一下吧,JDK(Java Development Kit)簡單理解就是Java開發工具包,JRE(Java Runtime Enviroment)是Java的執行環境,JVM( java virtual machine)也就是常常聽到Java虛擬機器。JDK是面向開發者的,JRE是面向使用JAVA程式的使用者,上面只是簡單的區別,一般網上好多都講概念,我就不講了,直接截圖應該會更清晰一點,我安裝的JDK1.8,效果如圖:

JDK和JRE

通過上圖發現發現有兩個JRE資料夾,如果細看裡面的內容基本上是一樣的,如果是隻是Java程式使用者,那麼只會有最外層的那個JRE目錄,JDK中是JRE自帶的,你如果安裝了JDK必然裡面會有一個JRE.那麼問題來了,為什麼會有兩套JRE呢?

最開始使用JAVA的時候設定JAVA環境變數的時候除了設定JAVA_Home中JDK的路徑之外,還會需要設ClassPath,%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;dt.jar和tools.jar是兩個java最基本的包,裡面包含了從java最重要的lang包到各種高階功能如視覺化的swing包,是java必不可少的。而path下面的bin裡面都是java的可執行的編譯器及其工具,如java,javadoc等,你在任意的資料夾下面執行cmd鍵入javac,系統就能自動召見java的編譯器就是歸功於這個環境變數的設定  ;如果修改其中tools.jar的名字,cmd執行的時候會報錯:

報錯的原因就是輸入的javac的命令不是去JDK中bin目錄去找的javac.exe,而是去JDK中lib目錄中的tools.jar中com.sun.tools.javac.Main中執行,因此javac.exe只是一個包裝器(Wrapper),存在的目的是為了讓開發者免於輸入過長的指命。這個時候發現JDK裡的工具幾乎是用Java所編寫,同屬於Java應用程式,因此要使用JDK所附的工具來開發Java程式,所以自身需要附一套JRE才能執行。上圖中與jdk同級目錄下的JRE就是用來執行一般Java程式用的。

兩套JRE執行的時候究竟執行哪一個呢,這個時候JDK中java.exe先從自身目錄中找,然後父級目錄中找,如果都沒有就去登錄檔中找:

 所以java.exe的執行結果與你的電腦裡面哪個JRE被執行有很大的關係,JDK和JRE應該算是說完了,下面說說JRE和JVM.

JRE和JVM

JVM -- java virtual machineJVM就是我們常說的java虛擬機器,它是整個java實現跨平臺的最核心的部分,所有的java程式會首先被編譯為.class的類檔案,這種類檔案可以在虛擬機器上執行,class檔案並不直接與機器的作業系統相對應,而是經過虛擬機器間接與作業系統互動,由虛擬機器將程式解釋給本地系統執行,類似於C#中的CLR。

JVM不能單獨搞定class的執行,解釋class的時候JVM需要呼叫解釋所需要的類庫lib。在JDK下面的的jre目錄裡面有兩個資料夾bin和lib,在這裡可以認為bin裡的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和 lib和起來就稱為jre。JVM+Lib=JRE,如果講的具體點就是bin目錄下的jvm.dll檔案, jvm.dll無法單獨工作,當jvm.dll啟動後,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動態連結庫),而這些輔助用的動態連結庫(.dll)都必須位 於jvm.dll所在目錄的父目錄之中。因此想使用哪個JVM,只需要設定PATH,指向JRE所在目錄下的jvm.dll。

 

JDK在目前為止還是模糊的概念,這個時候可以通過JDK的目錄檔案來看下:

在目錄下面有五個資料夾、一個src類庫原始碼壓縮包和幾個宣告檔案,其他五個資料夾分別是:bin、db、include、lib、 jre,db這個檔案看業務需求~

bin:最主要的是編譯器(javac.exe);

db:jdk從1.6之後內建了Derby資料庫,它是是一個純用Java實現的記憶體資料庫,屬於Apache的一個開源專案。用Java實現的,所以可以在任何平臺上執行;另外一個特點是體積小,免安裝,只需要幾個小jar包就可以運行了。

include:java和JVM互動用的標頭檔案;

lib:常用類庫

jre:java執行環境

JDK包含JRE,而JRE包含JVM,總的來說JDK是用於java程式的開發,而jre則是隻能執行class而沒有編譯的功能,Eclipse、IntelliJ IDEA等其他IDE有自己的編譯器而不是用JDK bin目錄中自帶的,所以在安裝時只需選中jre路徑就ok了,最後用張網路圖片總結下吧: