很多朋友可能跟我一樣已經使用JAVA開發很久了可是對JDKJREJVM這三者的聯系與區別一直都是模模糊糊的
今天特寫此文來整理下三者的關系
JDK : Java Development ToolKit(Java開發工具包)JDK是整個JAVA的核心包括了Java運行環境(Java Runtime Envirnment)一堆Java工具(javac/java/jdb等)和Java基礎的類庫(即Java API 包括rtjar)
最主流的JDK是Sun公司發布的JDK除了Sun之外還有很多公司和組織都開發了屬於自己的JDK例如國外IBM公司開發了屬於自己的JDK國內淘寶也開發了屬於自己的JDK各個組織開發自己的JDK都是為了在某些方面得到一些提高以適應自己的需求比如IBM的JDK據說運行效率就比SUN的JDK高的多但不管怎麼說我們還是需要先把基礎的Sun JDK掌握好
JDK有以下三種版本
JSEstandard edition標准版是我們通常用的一個版本JEEenterpsise edtion企業版使用這種JDK開發JEE應用程序JMEmicro edtion主要用於移動設備嵌入式設備上的java應用程序
我們常常用JDK來代指Java APIJava API是Java的應用程序接口其實就是前輩們寫好的一些java Class包括一些重要的語言結構以及基本圖形網絡和文件I/O等等 我們在自己的程序中調用前輩們寫好的這些Class來作為我們自己開發的一個基礎當然現在已經有越來越多的性能更好或者功能更強大的第三方類庫供我們使用
JRE:Java Runtime Enviromental(java運行時環境)也就是我們說的JAVA平台所有的Java程序都要在JRE下才能運行包括JVM和JAVA核心類庫和支持文件與JDK相比它不包含開發工具——編譯器調試器和其它工具
JVMJava Virtual Mechinal(JAVA虛擬機)JVM是JRE的一部分它是一個虛構出來的計算機是通過在實際的計算機上仿真模擬各種計算機功能來實現的JVM有自己完善的硬件架構如處理器堆棧寄存器等還具有相應的指令系統JVM 的主要工作是解釋自己的指令集(即字節碼)並映射到本地的 CPU 的指令集或 OS 的系統調用Java語言是跨平台運行的其實就是不同的操作系統使用不同的JVM映射規則讓其與操作系統無關完成了跨平台性JVM 對上層的 Java 源文件是不關心的它關注的只是由源文件生成的類文件( class file)類文件的組成包括 JVM 指令集符號表以及一些補助信息
下圖很好的表面了JDKJREJVM三者間的關系
我們開發的實際情況是我們利用JDK(調用JAVA API)開發了屬於我們自己的JAVA程序後通過JDK中的編譯程序(javac)將我們的文本java文件編譯成JAVA字節碼在JRE上運行這些JAVA字節碼JVM解析這些字節碼映射到CPU指令集或OS的系統調用
From:http://tw.wingwit.com/Article/program/Web/201405/30990.html