1. 程式人生 > >一、JVM之jdk、jre、jvm的關係

一、JVM之jdk、jre、jvm的關係

一、Java概念圖

二、jdk、jre、jvm三者的關係

1、JDK

JDK(Java Development Kit) 是整個JAVA的核心,包括了Java執行環境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基礎的類庫(即Java API 包括rt.jar)。JDK包在目錄下面有六個資料夾、一個src類庫原始碼壓縮包、和其他幾個宣告檔案。其中,真正在執行java時起作用的是以下四個資料夾:bin、include、lib、 jre。(注意:這裡的bin、lib資料夾和jre裡的bin、lib是 不同的)

  • bin:最主要的是編譯器(javac.exe)
  • include:java和JVM互動用的標頭檔案
  • lib:類庫
  • jre:java執行環境

2、JRE

JRE(Java Runtime Environment,Java執行環境),包含JVM標準實現及Java核心類庫。JRE是Java執行環境,並不是一個開發環境,所以沒有包含任何開發工具(如編譯器和偵錯程式)。

3、JVM

JVM(Java Virtual Machine),即java虛擬機器, java執行時的環境,JVM是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。針對Java使用者,也就是擁有可執行的.class檔案包(jar或者war)的使用者。裡面主要包含了JVM和Java執行時基本類庫(rt.jar)。rt.jar可以簡單粗暴地理解為:它就是java原始碼編譯成的jar包。Java虛擬機器在執行位元組碼時,把位元組碼解釋成具體平臺上的機器指令執行。這就是Java的能夠“一次編譯,到處執行”的原因。

4、JDK、JRE、JVM三者的聯絡與區別

  • 1.三者聯絡:

JVM 不能單獨搞定 class 的執行,解釋 class 的時候 JVM 需要呼叫解釋所需要的類庫 lib。在 JDK 下面的的 jre 目錄裡面有兩個資料夾 bin 和 lib ,在這裡可以認為 bin 裡的就是 JVM,lib 中則是 JVM 工作所需要的類庫,而 JVM 和 lib 和起來就稱為 jre。JVM+lib=JRE。總體來說就是,我們利用JDK(呼叫 JAVA API)開發了屬於我們自己的 JAVA 程式後,通過 JDK 中的編譯程式(javac)將我們的文字 java 檔案編譯成 JAVA 位元組碼,在 JRE 上執行這些JAVA位元組碼,JVM 解析這些位元組碼,對映到 CPU 指令集或 OS 的系統呼叫。

  • 2.三者區別:

a.JDK 和 JRE 區別:在 bin 資料夾下會發現,JDK 有 javac.exe 而 JRE 裡面沒有,javac 指令是用來將 java 檔案編譯成 class 檔案的,這是開發者需要的,而使用者(只需要執行的人)是不需要的。JDK 還有 jar.exe, javadoc.exe 等等用於開發的可執行指令檔案。這也證實了一個是開發環境,一個是執行環境。
b.JRE 和 JVM 區別:JVM 並不代表就可以執行 class 了,JVM 執行 class 還需要 JRE 下的 lib 類庫的支援,尤其是 rt.jar。