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

最近要從新抓一下java,大量掃技術文檔,保存下來供本身查閱。如下轉載自http://www.cnblogs.com/xiaofeixiang/p/4085159.htmlhtml

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

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程序用的。app

兩套JRE運行的時候究竟運行哪個呢,這個時候JDK中java.exe先從自身目錄中找,而後父級目錄中找,若是都沒有就去註冊表中找:jvm

因此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。spa

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了,最後用張網絡圖片總結下吧:

相關文章
相關標籤/搜索