JDK,JRE,JVM區別與聯絡

weixin_34126215發表於2013-12-30

http://java-mzd.iteye.com/blog/838514

很多朋友可能跟我一樣,已經使用JAVA開發很久了,可是對JDK,JRE,JVM這三者的聯絡與區別,一直都是模模糊糊的。

今天特寫此文,來整理下三者的關係。 

JDK : Java Development ToolKit(Java開發工具包)。

JDK是整個JAVA的核心,包括了Java執行環境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基礎的類庫(即Java API 包括rt.jar)。

最主流的JDK是Sun公司釋出的JDK,除了Sun之外,還有很多公司和組織都開發了屬於自己的JDK,

例如國外IBM公司開發了屬於自己的JDK,國內淘寶也開發了屬於自己的JDK,

各個組織開發自己的JDK都是為了在某些方面得到一些提高,以適應自己的需求,

比如IBM的JDK據說執行效率就比SUN的JDK高的多。但不管怎麼說,我們還是需要先把基礎的Sun JDK掌握好。

JDK有以下三種版本:

J2SE,standard edition,標準版,是我們通常用的一個版本

J2EE,enterpsise edtion,企業版,使用這種JDK開發J2EE應用程式

J2ME,micro edtion,主要用於移動裝置、嵌入式裝置上的java應用程式

我們常常用JDK來代指Java API,Java API是Java的應用程式介面,其實就是前輩們寫好的一些java Class,

包括一些重要的語言結構以及基本圖形,網路和檔案I/O等等 ,我們在自己的程式中,呼叫前輩們寫好的這些Class,

來作為我們自己開發的一個基礎。當然,現在已經有越來越多的效能更好或者功能更強大的第三方類庫供我們使用。

 

JRE:Java  Runtime  Enviromental(java執行時環境)。

也就是我們說的JAVA平臺,所有的Java程式都要在JRE下才能執行。包括JVM和JAVA核心類庫和支援檔案。

與JDK相比,它不包含開發工具——編譯器、偵錯程式和其它工具。

 

JVM:Java Virtual Mechinal(JAVA虛擬機器)。

JVM是JRE的一部分,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。

JVM有自己完善的硬體架構,如處理器、堆疊、暫存器等,還具有相應的指令系統。

JVM 的主要工作是解釋自己的指令集(即位元組碼)並對映到本地的 CPU 的指令集或 OS 的系統呼叫。

Java語言是跨平臺執行的,其實就是不同的作業系統,使用不同的JVM對映規則,讓其與作業系統無關,完成了跨平臺性。

JVM 對上層的 Java 原始檔是不關心的,它關注的只是由原始檔生成的類檔案( class file)。

類檔案的組成包括 JVM 指令集,符號表以及一些補助資訊。

 

下圖很好的表面了JDK,JRE,JVM三者間的關係:

我們開發的實際情況是:

我們利用JDK(呼叫JAVA API)開發了屬於我們自己的JAVA程式後,

通過JDK中的編譯程式(javac)將我們的文字java檔案編譯成JAVA位元組碼,

JRE上執行這些JAVA位元組碼,JVM解析這些位元組碼,對映到CPU指令集或OS的系統呼叫。

 

 

相關文章