1. 程式人生 > >JDK,JRE,JVM之間的關係

JDK,JRE,JVM之間的關係

一、 詳細介紹
1、JVM -- java virtual machine
JVM就是我們常說的java虛擬機器,它是整個java實現跨平臺的 最核心的部分,所有的java程式會首先被編譯為.class的類檔案,這種類檔案可 以在虛擬機器上執行,也就是說class並不直接與機器的作業系統相對應,而是經過虛擬機器間接與作業系統互動,由虛擬機器將程式解 釋給本地系統執行。
JVM 是 Java 平臺的基礎,和實際的機器一樣,它也有自己的指令集,並且在執行 時操作不同的記憶體區域。 JVM 通過抽象作業系統和 CPU 結構,提供了一種與平臺無關的程式碼執行方法,即與特殊的實現方 法、主機硬體、主機作業系統無關。但是在一些小的方面, JVM 的實現也是互不相同的,比如
垃圾回收 演算法,執行緒排程演算法(可能不同 OS 有不同的實現)。 
JVM 的主要工作是解釋自己的指令集(即位元組碼)到 CPU 的指令集或 OS 的系統呼叫,保護使用者免被惡意程式騷擾。 JVM 對上層的 Java 原始檔是不關心的,它關注的只是由原始檔生成的類檔案( class file )。類檔案的 組成包括 JVM 指令集,符號表以及一些補助資訊。
2、JRE -- java runtime environment
JRE是指java執行環境。光有JVM還不能成class的 執行,因為在解釋class的時候JVM需要呼叫解釋所需要的類庫lib。 在JDK的安裝目 錄裡你可以找到jre目錄,裡面有兩個資料夾bin和lib,在 這裡可以認為bin裡的就是jvm,lib中則是jvm工 作所需要的類庫,而jvm和 lib和起來就稱為jre。所以,在你寫完java程式編譯成.class之後,你可以把這個.
class檔案 和jre一起打包發給朋友,這樣你的朋友就 可以執行你寫程式了。(jre裡有執行.class的java.exe)
JRE 是 Sun 公司釋出的一個更大的系統,它裡面就有一個 JVM 。 JRE 就與具體的 CPU 結構和作業系統有關,我們從 Sun 下載 JRE 的時候就看到了不同的各種版本。同 JVM 一起組成 JRE 的還有一些 API (如 awt , swing 等)。 JRE 是執行 Java 程式必不可少的。
JRE ( Java Runtime Environment ),是執行 Java 程式必不可少的(除非用其他一些編譯環境編譯成.exe可執行檔案……),JRE的 地位就象一臺PC機一樣,我們寫好的Win32應用程式需要作業系統幫 我們執行,同樣的,我們編寫的Java程式也必須要JRE才能執行。

JRE裡面有一個 JVM , JRE 與具體的 CPU 結構和作業系統有關,我們從 Sun 下載 JRE 的時候就看到了不同的各種版本,,同 JVM 一起組成 JRE 的還有 一些 API (如 awt , swing 等), JRE 是 執行 Java 程式必不可少的.
3、JDK -- java development kit
JDK是java開發工具包,基本上每個學java的人都會先在機器 上裝一個JDK,那他都包含哪幾部分呢?讓我們看一下JDK的安裝目錄。在目錄下面有 六個資料夾、一個src類庫原始碼壓縮包、和其他幾個宣告檔案。其中,真正在執行java時起作用的 是以下四個資料夾:bin、include、lib、 jre。現在我們可以看出這樣一個關係,JDK包含JRE,而JRE包 含JVM。
bin:最主要的是編譯器(javac.exe)
include:java和JVM互動用的標頭檔案
lib:類庫
jre:java執行環境
(注意:這裡的bin、lib資料夾和jre裡的bin、lib是 不同的)總的來說JDK是用於java程式的開發,而jre則 是隻能執行class而沒有編譯的功能。
eclipse、idea等 其他IDE有自己的編譯器而不是用JDK bin目錄中自帶的,所以在安裝時你會發現他們只要求你 選中jre路徑就ok了。
二、 三者聯絡
Java 喊出的帶有標誌性的口號“ Write Once , Run Anywhere (一次編寫,到處執行)”,正是建立在 JRE 的基礎之上。何以實現?就是在 Java 應用程式和作業系統之間增加了一虛擬層—— JRE 。
程式原始碼不是直 接編譯、連結成機器程式碼,而是先轉化到位元組碼( bytecode ) 這種特殊的中間形式,位元組碼再轉換成機器碼或系統呼叫。前者是傳統的編譯方法,生成的機器程式碼就不可避免地跟特殊的作業系統和特殊的機器結構相關。
而 Java 程式的位元組碼檔案可以放到任意裝有 JRE 的計算機執行,再由不同 JRE 的將它們轉化成相應的機器程式碼,這就實現了 Java 程式的可移植性。這樣程式設計師也不用去 關心程式執行的具體環境,而可以專心編寫軟體。這種分層抽象、隱藏細節的思想在電腦科學中處處可見,比如機器組織結構的設計、網路協議的實現等。 Pascal 語言的發明者 Niklaus Wirth ,就富有預見性地指出應該有這樣一種可移植的語言,其生成的中間程式碼可以在一臺假想的機器( a hypothetical machine )上執行。
而 Java 虛擬機器( Java virtual machine 或 JVM )就是這樣的一臺機器,它模擬實際處理器的結構,解釋位元組碼。 怎麼一會說是 JRE ,一會兒又成了 JVM ,兩者是否同物不同名? 回答是否定的。
JRE的地位就象一臺PC機一樣,我們寫好的Win32應用程式需要作業系統幫 我們執行,同樣的,我們編寫的Java程式也必須要JRE才能執行。
要執行Applet,在客戶端必須安裝有 JRE,即“執行時”,容易一點理解,就象所謂的“外掛”,要開發JAVA應用程式\Web應用,就必須在伺服器端安裝相應的 JVM+JDK 了(開發應用 Java web應用 時,客戶端不需要安裝任何的JVM)
如果你使用JAVA開發應用,就需要安裝 JRE+JDK,就是 J2SE. 
如果在客戶端執行Applet,客戶端瀏覽器必須嵌有JAVA JVM,如果沒有,就需要安裝,即: 在客戶端建立JRE(執行時,包含JVM),而客戶端是不需要做開發的,所以,JDK就沒有必要安裝 了。

不同版本的Applet在不同的JVM下可能無法正常執行,而Microsoft JVM只是Sun JVM的“低版本”,微軟在windows xp/2003中乾脆將JVM去掉了.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

很多朋友可能跟我一樣,已經使用JAVA開發很久了,可是對JDK,JRE,JVM這三者的聯絡與區別,一直都是模模糊糊的。今天特寫此文,來整理下三者的關係。

JDK : Java Development ToolKit(Java開發工具包)。JDK是整個JAVA的核心,包括了Java執行環境(Java Runtime Environment),一堆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,enterprise edition,企業版,使用這種JDK開發J2EE應用程式;J2ME,micro edition,主要用於移動裝置、嵌入式裝置上的java應用程式。

我們常常用JDK來代指Java API,Java API是Java的應用程式介面,其實就是前輩們寫好的一些java Class,包括一些重要的語言結構以及基本圖形,網路和檔案I/O等等 ,我們在自己的程式中,呼叫前輩們寫好的這些Class,來作為我們自己開發的一個基礎。當然,現在已經有越來越多的效能更好或者功能更強大的第三方類庫供我們使用。

JRE:Java Runtime Environment(java執行時環境)。也就是我們說的JAVA平臺,所有的Java程式都要在JRE下才能執行。包括JVM和JAVA核心類庫和支援檔案。與JDK相比,它不包含開發工具——編譯器、偵錯程式和其它工具。

JVM:Java Virtual Machine(JAVA虛擬機器)。JVM是JRE的一部分,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。JVM有自己完善的硬體架構,如處理器、堆疊、暫存器等,還具有相應的指令系統。JVM 的主要工作是解釋自己的指令集(即位元組碼)並對映到本地的 CPU 的指令集或 OS 的系統呼叫。Java語言是跨平臺執行的,其實就是不同的作業系統,使用不同的JVM對映規則,讓其與作業系統無關,完成了跨平臺性。JVM 對上層的 Java 原始檔是不關心的,它關注的只是由原始檔生成的類檔案( class file )。類檔案的組成包括 JVM 指令集,符號表以及一些輔助資訊。

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

圖片網址來自JavaSE複習筆記

我們開發的實際情況是:我們利用JDK(呼叫JAVA API)開發了屬於我們自己的JAVA程式後,通過JDK中的編譯程式(javac)將我們的文字java檔案編譯成JAVA位元組碼,在JRE上執行這些JAVA位元組碼,JVM解析這些位元組碼,對映到CPU指令集或OS的系統呼叫。

相關推薦

JDK,JRE,JVM之間關係

一、 詳細介紹1、JVM -- java virtual machineJVM就是我們常說的java虛擬機器,它是整個java實現跨平臺的 最核心的部分,所有的java程式會首先被編譯為.class的類檔案,這種類檔案可 以在虛擬機器上執行,也就是說class並不直接與機器

jdk jre jvm 之間關係

轉載來自:http://playkid.blog.163.com/blog/static/56287260201372113842153/ JDK(Java Development Kit)是針對Java開發員的產品,是整個Java的核心,包括了Java執行環境JRE、

java中jdk jre jvm三者關係

JDK是JAVA的核心,包括JRE(JAVA 虛擬環境)、編譯器等,JDK的主流產品是由SUN公司開發的,JDK本身是用JAVA編寫的,安裝包的SRC.ZIP就是JDK的原始碼 JVM(JAVA虛擬機器),是可以執行JAVA程式碼的假想計算機,主要任務是把JAVA位元組碼編譯成特定計算機的機器指令,是JAVA

JDK,JRE,JVM三者之間關係

JDk JDK(Java Development ToolKit),它是Java開發的最小環境,整個Java的核心,包括了Java執行環境,開發工具和Java基礎類庫。 JRE JRE(Java Runtime Enviromental),是java執行時環境。

jdk jre jvm三者之間的聯絡與區別

    JVM:Java Virtual Mechinal(JAVA虛擬機器)。JVM是JRE的一部分,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。JVM有自己完善的硬體架構,如處理器、堆疊、暫存器等,還具有相應的指令系統。JVM 的主要工作是解釋自己的指令集(即位元組碼)

JDK,JRE,JVM的作用及關係(詳解)

(1)作用: JVM:保證java語言跨平臺 JRE:java程式的執行環境 JDK:java程式的開發環境 (2)關係: JDK:JRE+工具 JRE:JVM+類庫 詳解上述術語: JVM:稱為"java虛擬機器",正因為它的可移植性(既跨平臺性)成為jav

JDK,JRE,JVM,JMM關系與區別

nta too java工具 runt jvm jdk devel kit evel JVM: Java Virtual Machine, 將java文件編譯成class文件並運行class文件的軟件 JRE:Java Runtime Enviromental,包含了J

JDK,JRE,JVM區別與聯系(ZZ)

nta 平臺 環境 html 所有 仿真 clear aid 包含 http://www.cnblogs.com/hencehong/p/3252166.html 我們開發的實際情況是:我們利用JDK(調用JAVA API)開發了屬於我們自己的JAVA程序後,通過JDK中

JDK,JRE,JVM聯絡及區別

JVM--保證了java語言的跨平臺性      就像我們出國旅遊如果不會說當地的語言就會帶一個翻譯官。jvm的作用就像翻譯官一樣可以在不同的作業系統上執行。          因為有了JVM,

JDK,JRE,JVM區別與聯絡(轉載)

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

java的平臺無關性,Eclipse,JDK,JRE,JVM

一.java的平臺無關性 1.關於平臺 平臺=作業系統+cpu 用不同的語言編寫好的程式經過編譯連結後生成了可執行檔案,平臺來識別可執行檔案完成執行 !!不同的平臺可識別的機器指令不同!! 2.為什麼說是與平臺無關 ①c++:針對不同的平臺!!針對平

初步瞭解jdk,jre,jvm

  JDK JDK(Java Development Kit) 是 Java 語言的 軟體開發工具包 (SDK)。其結構圖為 JDK是整個JAVA的核心,包括了Java執行環境JRE(Java Runtime Envirnment)、Java工具(javac/j

JDK,JRE,JVM區別與聯絡

很多朋友可能跟我一樣,已經使用JAVA開發很久了,可是對JDK,JRE,JVM這三者的聯絡與區別,一直都是模模糊糊的。 今天特寫此文,來整理下三者的關係。      JDK : Java Development ToolKit(Java開發工具包)。JDK是整個JAVA的核心,包括了Java執行環境(Ja

JDK > JRE > JVM

1 JDK JDK(Java Development Kit)是java開發工具包。 在其安裝目錄下面有六個資料夾、一些描述檔案、一個src.zip壓縮檔案。主要是bin、include、lib、 jre這四個資料夾起作用 bin:最主要的是編譯器(javac.exe) include:ja

jdk,jre,jvm 三者間的差別與聯絡

           學習java有近1年半了,自以為學的挺不錯。有一次筆試遇到一道題,請說說jdk,jre,jvm的區別與聯絡;javaSE,javaEE,javaME,j2SE,J2ME,J2EE

Java開發環境——JDK/JRE/JVM

1.JDK/JRE/JVM概述 1.1JDK JDK(Java標準開發包)的全稱是Java SE Development Kit,是Sun提供的一套用於開發Java應用程式的開發包,它提供編譯、執行Java程式所需的各種工具和資源,包含了JAVA的執行環境(

Java基礎概念之JSE JME JEE JDK JRE JVM

JSE. JME,JEE,JDK,JRE SE:stands for "Standard Edition" EE:stands for "Enterprise Edition" JDK: stands for “Java Development Kit" JRE: stan

JDK,JRE,JVM的區別和聯絡

JDK: java development kit 開發工具包:主要包含jre,jvm,jdk原始碼包,以及bin資料夾下用於開發,編譯執行的一些指令器。JRE:java runtime environment,包含了jvm和java執行時基本類庫(rt.jar)JVM:ja

JDK JRE JVM 區別與聯絡

    JVM:Java Virtual Mechinal(JAVA虛擬機器)。JVM是JRE的一部分,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。JVM有自己完善的硬體架構,如處理器、堆疊、暫存器等,還具有相應的指令系統。JVM 的主要工作是解釋自己的指令集(即位元組碼)

Java中JDK,JREJVM之間關係-(轉載)

初學JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先從概念上理解一下吧,JDK(Java Development Kit)簡單理解就是Java開發工具包,JRE(Java Runtime Enviroment)是Java的執行環境,JVM( java virtual machine)也就是