天天看點

大資料必學Java基礎(九):JDK,JRE,JVM的差別​JDK,JRE,JVM的差別

​JDK,JRE,JVM的差別

一、JDK,JRE,JVM的關系

大資料必學Java基礎(九):JDK,JRE,JVM的差別​JDK,JRE,JVM的差別

二、 先說JDK和JRE

初學JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先從概念上了解一下吧,JDK(Java Development Kit)簡單了解就是Java開發工具包,JRE(Java Runtime Enviroment)是Java的運作環境,JVM( java virtual machine)也就是常常聽到Java虛拟機。JDK是面向開發者的,JRE是面向使用JAVA程式的使用者,上面隻是簡單的差別

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

從側面證明:

利用javac.exe進行編譯:

大資料必學Java基礎(九):JDK,JRE,JVM的差別​JDK,JRE,JVM的差別

然後我将C:\Program Files\Java\jdk1.8.0_151\lib\tools.jar改個名字,再去編譯:

大資料必學Java基礎(九):JDK,JRE,JVM的差別​JDK,JRE,JVM的差別

證明:dt.jar和tools.jar是兩個java最基本的包,裡面包含了從java最重要的lang包到各種進階功能如可視化的swing包,是java必不可少的。而path下面的bin裡面都是java的可執行的編譯器及其工具,如java,javadoc等,報錯的原因就是輸入的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基礎(九):JDK,JRE,JVM的差別​JDK,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。

大資料必學Java基礎(九):JDK,JRE,JVM的差別​JDK,JRE,JVM的差別

JVM+Lib=JRE,如果講的具體點就是bin目錄下的jvm.dll檔案, jvm.dll無法單獨工作,當jvm.dll啟動後,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動态連結庫),而這些輔助用的動态連結庫(.dll)都必須位 于jvm.dll所在目錄的父目錄之中。是以想使用哪個JVM,隻需要設定PATH,指向JRE所在目錄下的jvm.dll。

大資料必學Java基礎(九):JDK,JRE,JVM的差別​JDK,JRE,JVM的差別