Java JDK、JRE?JVM的區別與聯繫

不少朋友可能跟我同樣,已經使用JAVA開發好久了,但是對JDK,JRE,JVM這三者的聯繫與區別,一直都是模模糊糊的。java

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

 

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

    最主流的JDKSun公司發佈的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 APIJava API是Java的應用程序接口,其實就是前輩們寫好的一些java Class,包括一些重要的語言結構以及基本圖形,網絡和文件I/O等等 ,咱們在本身的程序中,調用前輩們寫好的這些Class,來做爲咱們本身開發的一個基礎。固然,如今已經有愈來愈多的性能更好或者功能更強大的第三方類庫供咱們使用。spa

 

    JRE:Java  Runtime  Enviromental(java運行時環境)。也就是咱們說的JAVA平臺,全部的Java程序都要在JRE下才能運行。包括JVMJAVA核心類庫和支持文件。與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的系統調用。