說起Java,人們首先想到的是Java編程語言,然而事實上,Java是一種技術(shù),它由四方面組成: Java編程語言、Java類文件格式、Java虛擬機(jī)和Java應(yīng)用程序接口(Java API)。它們的關(guān)系是什么呢?
說起Java,人們首先想到的是Java編程語言,然而事實上,Java是一種技術(shù),它由四方面組成: Java編程語言、Java類文件格式、Java
虛擬機(jī)和Java應(yīng)用程序接口(Java API)。它們的關(guān)系是什么呢?
運(yùn)行期環(huán)境代表著Java平臺,開發(fā)人員編寫Java代碼(.
java文件),然后將之編譯成字節(jié)碼(.class文件)。最后字節(jié)碼被裝入內(nèi)存,一旦字節(jié)碼進(jìn)入虛擬機(jī),它就會被解釋器解釋執(zhí)行,或者是被即時代碼發(fā)生器有選擇的轉(zhuǎn)換成機(jī)器碼執(zhí)行。從上圖也可以看出Java平臺由Java虛擬機(jī)和 Java應(yīng)用程序接口搭建,Java語言則是進(jìn)入這個平臺的通道,用Java語言編寫并編譯的程序可以運(yùn)行在這個平臺上。這個平臺的結(jié)構(gòu)如下圖所示:
在Java平臺的結(jié)構(gòu)中, 可以看出,Java虛擬機(jī)(JVM) 處在核心的位置,是程序與底層
操作系統(tǒng)和硬件無關(guān)的關(guān)鍵。它的下方是移植接口,移植接口由兩部分組成:適配器和Java操作系統(tǒng), 其中依賴于平臺的部分稱為適配器;JVM 通過移植接口在具體的平臺和操作系統(tǒng)上實現(xiàn);在JVM 的上方是Java的基本類庫和擴(kuò)展類庫以及它們的API, 利用Java API編寫的應(yīng)用程序(
application) 和
小程序(Java applet) 可以在任何Java平臺上運(yùn)行而無需考慮底層平臺, 就是因為有Java虛擬機(jī)(JVM)實現(xiàn)了程序與操作系統(tǒng)的分離,從而實現(xiàn)了Java 的平臺無關(guān)性。
那么到底什么是Java虛擬機(jī)(JVM)呢?通常我們談?wù)揓VM時,我們的意思可能是:
1.對JVM規(guī)范的的比較抽象的說明;
2.對JVM的具體實現(xiàn);
3.在程序運(yùn)行期間所生成的一個JVM實例。
對JVM規(guī)范的的抽象說明是一些概念的集合,它們已經(jīng)在書《The Java Virtual Machine Specification》(《Java虛擬機(jī)規(guī)范》)中被詳細(xì)地描述了;對JVM的具體實現(xiàn)要么是軟件,要么是軟件和硬件的組合,它已經(jīng)被許多生產(chǎn)廠商所實現(xiàn),并存在于多種平臺之上;運(yùn)行Java程序的任務(wù)由JVM的運(yùn)行期實例單個承擔(dān)。在本文中我們所討論的Java虛擬機(jī)(JVM)主要針對第三種情況而言。它可以被看成一個想象中的機(jī)器,在實際的計算機(jī)上通過軟件模擬來實現(xiàn),有自己想象中的硬件,如處理器、堆棧、寄存器等,還有自己相應(yīng)的指令系統(tǒng)。
JVM在它的生存周期中有一個明確的任務(wù),那就是運(yùn)行Java程序,因此當(dāng)Java程序啟動的時候,就產(chǎn)生JVM的一個實例;當(dāng)程序運(yùn)行結(jié)束的時候,該實例也跟著消失了。下面我們從JVM的體系結(jié)構(gòu)和它的運(yùn)行過程這兩個方面來對它進(jìn)行比較深入的研究。
這就是Java技術(shù)與Java虛擬機(jī)的全部內(nèi)容了。