java的JVM、JRE與JDK的作用和關係

首先,我們先對java編程語言的編譯和執行進行一個整體的瞭解。我們可以用兩個階段來概括:

一是java代碼的編譯階段,二是java程序的運行階段。

在java代碼的編譯階段,主要的任務是將編寫好的xxx.java的源代碼文件在dos命令窗口中使用java的編譯器工具javac將.java後綴的java源文件編譯爲一個或者多個.class後綴的字節碼文件(這裏的字節碼文件並非是二進制文件)。

當使用Java編譯器編譯Java程序時,生成的是與平臺無關的字節碼,這些字節碼不面向任何具體平臺,只面向JVM。

不同平臺,上的JVM都是不同的,但它們都提供了相同的接口。JVM是Java程序跨平臺的關鍵部分,只要爲不同平臺實現了相應的虛擬機,編譯後的Java字節碼就可以在該平臺上運行。

顯然,相同的字節碼程序需要在不同的平臺上運行,這幾乎是“不可能的”,只有通過中間的轉換器纔可以實現,JVM就是這個轉換器。

JVM的作用很容易理解,就像有兩支不同的筆,但需要把同一個筆帽套在兩支不同的筆上,只有爲這兩支筆分別提供一個轉換器,這個轉換器向上的接口相同,用於適應同一個筆帽;向下的接口不同,用於適應兩支不同的筆。在這個類比中,可以近似地理解兩支不同的筆就是不同的操作系統,而同一個筆帽就是Java字節碼程序,轉換器角色則對應JVM。類似地,也可以認爲JVM分爲向上和向下兩個部分,所有平臺上的JVM向上提供給Java字節碼程序的接口完全相同,但向下適應不同平臺的接口則互不相同。

 

緊接着就是java程序的運行階段,在java運行階段,需要使java.exe的運行工具將編譯後的.class後綴的字節碼文件加載到java虛擬機JVM中,此時java虛擬機JVM會啓動加載器classloader,classloader會在硬盤中搜索.class 的字節碼文件,並能夠將該字節碼文件裝載到JAVA虛擬機JVM中並解釋爲二進制文件,然後JAVA虛擬機JVM會執行該二進制文件和底層硬件平臺進行交互。這就是整個java編程的編譯和執行過程。

這樣我們瞭解了java編程的編譯和執行過程後,我們再來看JDK、JRE、JVM的作用和關係。

JDK :英文名稱(Java Development Kit),JDK是Java開發工具包,是Sun Microsystems針對Java開發員的產品Java 開發工具包,是整個 Java 開發的核心,集成了JRE 和一些其它的工具。例如:javac.exe,java.exe,jar.exe 等。

JRE :英文名稱(Java Runtime Environment),根據翻譯,直接直接理解爲Java 運行時環境,是運行基於Java語言編寫的程序所不可缺少的運行環境。也是通過它,Java的開發者才得以將自己開發的程序發佈到用戶手中,讓用戶使用,它主要包含兩個部分,jvm 的標準實現和 Java 的一些基本類庫。

JVM :英文名稱(Java Virtual Machine),也就是我們常說的 Java 虛擬機。它是整個java實現跨平臺的最核心的部分,所有的java程序會首先被編譯爲.class的類文件,這種類文件可以在虛擬機上執行。也就是說class並不直接與機器的操作系統相對應,而是經過虛擬機間接與操作系統交互,由虛擬機將程序解釋給操作系統執行。

從概念上理解了JDK、JRE、JVM各自的作用後,我們不難看出之間的關係也就很清楚了,對於JVM是java程序與操作系統交換的必要環境,而JRE運行環境是java程序能夠被java虛擬機JVM調用和執行的運行環境。對於JDK來說,更多的作用是編寫java程序,是開發環境,只不過JDK包含了JER,它的範圍更大。

簡單的說,jre包含了JVM,一般而言,如果只是運行java程序,只需要安裝jre,無需安裝jdk,如果需要開發java程序,則需要安裝jdk,當然,安裝了jdk之後,也就包含了jre了

總結就是:JRE是運行環境,JDK是個開發環境。編寫Java程序的時需要JDK,而運行Java程序的時候需要JRE;JDK裏面已經包含JRE,若安裝了JDK,就可以既編輯Java程序,又可以運行Java程序,無需單獨的JRE。對於JDK而言,包含了許多與運行無關的內容,佔用的空間較大,因此運行普通的Java程序無須安裝JDK,而只需要安裝JRE即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章