標籤:
相關的名詞解釋
JDK (Java Development Kit ) sun 公司針對java開發人員發布的免費的軟體開發套件(sdk,soft development kit)
JRE(Java Runtime Environment,java運行環境)
JVM(Java Vitrual Machine)java 虛擬機器
JDK包含JRE JRE包含JVM
三者的關係
jvm包含在jre中,jre包含在jdk中,jre是運行環境,jdk是開發環境。Java編譯器將java語言編譯成位元組碼,這是一種面向虛擬機器的代碼,是虛擬機器的指令集,虛擬機器根據不同的平台由不同的版本,將位元組碼解釋成不同平台的機器碼。
JVM:Java虛擬機器,它是與平台相關的,我們說各個平台的JDK版本不同.其實重點說的就是JVM版本的不同。
JVM就是我們常說的java虛擬機器,它是整個java實現跨平台的最核心的部分,所有的java程式(.Java檔案)會首先被編譯為.class的類檔案,這種類檔案可以在虛擬機器上執行,也就是說class並不直接與機器的作業系統相對應,而是經過虛擬機器間接與作業系統互動,由虛擬機器將程式解釋給本地系統執行。
JVM是 Java 平台的基礎,和實際的機器一樣,它也有自己的指令集,並且在運行時操作不同的記憶體地區。 JVM 通過抽象作業系統和 CPU 結構,提供了一種與平台無關的代碼執行方法,即與特殊的實現方法、主機硬體、主機作業系統無關。但是在一些小的方面, JVM 的實現也是互不相同的,比如記憶體回收 演算法,線程調度演算法(可能不同 OS 有不同的實現)。
JVM 的主要工作是解釋自己的指令集(即位元組碼)到 CPU 的指令集或OS 的系統調用,保護使用者免被惡意程式騷擾。 JVM 對上層的 Java 源檔案是不關心的,它關注的只是由源檔案產生的類檔案( class file )。類檔案的 組成包括 JVM 指令集,符號表以及一些補助資訊。
JRE:Java運行時環境,包含JVM與Java運行支援類庫與檔案。
JDK中包含JAVA編譯器與JRE,JRE中包含JVM與Java運行支援檔案。
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 RuntimeEnvironment ),是運行 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課程系列筆記(1)