關(guān)于JDK枣氧、JRE溢十、JVM的關(guān)系,此貼詳細(xì)的講述了三者之間的聯(lián)系與區(qū)別达吞。
JDK : Java Development ToolKit(Java開(kāi)發(fā)工具包)张弛。JDK是整個(gè)JAVA的核心,包括了Java運(yùn)行環(huán)境(Java Runtime Envirnment)宗挥,一堆Java工具(javac/java/jdb等)和Java基礎(chǔ)的類庫(kù)(即Java API 包括rt.jar)乌庶。
最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外契耿,還有很多公司和組織都開(kāi)發(fā)了屬于自己的JDK瞒大,例如國(guó)外IBM公司開(kāi)發(fā)了屬于自己的JDK,國(guó)內(nèi)淘寶也開(kāi)發(fā)了屬于自己的JDK搪桂,各個(gè)組織開(kāi)發(fā)自己的JDK都是為了在某些方面得到一些提高透敌,以適應(yīng)自己的需求,比如IBM的JDK據(jù)說(shuō)運(yùn)行效率就比SUN的JDK高的多踢械。但不管怎么說(shuō)酗电,我們還是需要先把基礎(chǔ)的Sun JDK掌握好。
JDK有以下三種版本:
J2SE内列,standard edition撵术,標(biāo)準(zhǔn)版,是我們通常用的一個(gè)版本J2EE话瞧,enterpsise edtion嫩与,企業(yè)版,使用這種JDK開(kāi)發(fā)J2EE應(yīng)用程序J2ME交排,micro edtion划滋,主要用于移動(dòng)設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序
我們常常用JDK來(lái)代指Java API埃篓,Java API是Java的應(yīng)用程序接口处坪,其實(shí)就是前輩們寫好的一些java Class,包括一些重要的語(yǔ)言結(jié)構(gòu)以及基本圖形,網(wǎng)絡(luò)和文件I/O等等 同窘,我們?cè)谧约旱某绦蛑性倮矗{(diào)用前輩們寫好的這些Class讼庇,來(lái)作為我們自己開(kāi)發(fā)的一個(gè)基礎(chǔ)尔艇。當(dāng)然羡忘,現(xiàn)在已經(jīng)有越來(lái)越多的性能更好或者功能更強(qiáng)大的第三方類庫(kù)供我們使用。
JRE:Java Runtime Enviromental(java運(yùn)行時(shí)環(huán)境)案狠。也就是我們說(shuō)的JAVA平臺(tái)服傍,所有的Java程序都要在JRE下才能運(yùn)行。包括JVM和JAVA核心類庫(kù)和支持文件骂铁。與JDK相比吹零,它不包含開(kāi)發(fā)工具——編譯器、調(diào)試器和其它工具拉庵。
JVM:Java Virtual Mechinal(JAVA虛擬機(jī))灿椅。JVM是JRE的一部分,它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī)钞支,是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的茫蛹。JVM有自己完善的硬件架構(gòu),如處理器烁挟、堆棧婴洼、寄存器等,還具有相應(yīng)的指令系統(tǒng)撼嗓。JVM 的主要工作是解釋自己的指令集(即字節(jié)碼)并映射到本地的 CPU 的指令集或 OS 的系統(tǒng)調(diào)用柬采。Java語(yǔ)言是跨平臺(tái)運(yùn)行的,其實(shí)就是不同的操作系統(tǒng)且警,使用不同的JVM映射規(guī)則粉捻,讓其與操作系統(tǒng)無(wú)關(guān),完成了跨平臺(tái)性斑芜。JVM 對(duì)上層的 Java 源文件是不關(guān)心的肩刃,它關(guān)注的只是由源文件生成的類文件( class file )。類文件的組成包括 JVM 指令集杏头,符號(hào)表以及一些補(bǔ)助信息盈包。
下圖很好的表面了JDK,JRE,JVM三者間的關(guān)系:
我們開(kāi)發(fā)的實(shí)際情況是:我們利用JDK(調(diào)用JAVA API)開(kāi)發(fā)了屬于我們自己的JAVA程序后,通過(guò)JDK中的編譯程序(javac)將我們的文本java文件編譯成JAVA字節(jié)碼大州,在JRE上運(yùn)行這些JAVA字節(jié)碼续语,JVM解析這些字節(jié)碼垂谢,映射到CPU指令集或OS的系統(tǒng)調(diào)用厦画。