隨筆-88  評(píng)論-77  文章-48  trackbacks-0

          凡是接觸過 Java 的人都知道 JRE 的概念,即 Java 運(yùn)行時(shí)環(huán)境( Java Runtime Environment ),因?yàn)樗沁\(yùn)行 Java 程序必不可少的(除非程序用 GCJ 等編譯,但我懷疑這樣處理后還能不能稱之為“ Java 程序”了)。

          Java 喊出的帶有標(biāo)志性的口號(hào)“ Write Once Run Anywhere (一次編寫,到處運(yùn)行)”(記得某老師給俺們上課講到這里時(shí)還不忘幽一默:到處運(yùn)行?沒有計(jì)算機(jī)就運(yùn)行不了……),正是建立在 JRE 的基礎(chǔ)之上。何以實(shí)現(xiàn)?就是在 Java 應(yīng)用程序和操作系統(tǒng)之間增加了一虛擬層—— JRE 。程序源代碼不是直接編譯、鏈接成機(jī)器代碼,而是先轉(zhuǎn)化到字節(jié)碼( bytecode )這種特殊的中間形式,字節(jié)碼再轉(zhuǎn)換成機(jī)器碼或系統(tǒng)調(diào)用。前者是傳統(tǒng)的編譯方法,生成的機(jī)器代碼就不可避免地跟特殊的操作系統(tǒng)和特殊的機(jī)器結(jié)構(gòu)相關(guān),很多裝雙系統(tǒng)的用戶無(wú)法在 Linux 運(yùn)行 Windows 下的大型游戲,心里那個(gè)郁悶(于是很多虛擬軟件和模擬程序應(yīng)運(yùn)而生)。而 Java 程序的字節(jié)碼文件可以放到任意裝有 JRE 的計(jì)算機(jī)運(yùn)行,再由不同 JRE 的將它們轉(zhuǎn)化成相應(yīng)的機(jī)器代碼,這就實(shí)現(xiàn)了 Java 程序的可移植性。這樣程序員也不用去關(guān)心程序運(yùn)行的具體環(huán)境,而可以專心編寫軟件。這種分層抽象、隱藏細(xì)節(jié)的思想在計(jì)算機(jī)科學(xué)中處處可見,比如機(jī)器組織結(jié)構(gòu)的設(shè)計(jì)、網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)等。 Pascal 語(yǔ)言的發(fā)明者 Niklaus Wirth ,就富有預(yù)見性地指出應(yīng)該有這樣一種可移植的語(yǔ)言,其生成的中間代碼可以在一臺(tái)假想的機(jī)器( a hypothetical machine )上運(yùn)行。而 Java 虛擬機(jī)( Java virtual machine JVM )就是這樣的一臺(tái)機(jī)器,它模擬實(shí)際處理器的結(jié)構(gòu),解釋字節(jié)碼。怎么一會(huì)說是 JRE ,一會(huì)兒又成了 JVM ,兩者是否同物不同名?

          回答是否定的。

          JVM Java 平臺(tái)的基礎(chǔ),和實(shí)際的機(jī)器一樣,它也有自己的指令集,并且在運(yùn)行時(shí)操作不同的內(nèi)存區(qū)域。 JVM 通過抽象操作系統(tǒng)和 CPU 結(jié)構(gòu),提供了一種與平臺(tái)無(wú)關(guān)的代碼執(zhí)行方法,即與特殊的實(shí)現(xiàn)方法、主機(jī)硬件、主機(jī)操作系統(tǒng)無(wú)關(guān)。但是在一些小的方面, JVM 的實(shí)現(xiàn)也是互不相同的,比如垃圾回收算法,線程調(diào)度算法(可能不同 OS 有不同的實(shí)現(xiàn))。 JVM 的主要工作是解釋自己的指令集(即字節(jié)碼)到 CPU 的指令集或 OS 的系統(tǒng)調(diào)用,保護(hù)用戶免被惡意程序騷擾。 JVM 對(duì)上層的 Java 源文件是不關(guān)心的,它關(guān)注的只是由源文件生成的類文件( class file )。類文件的組成包括 JVM 指令集,符號(hào)表以及一些補(bǔ)助信息。

          JRE Sun 公司發(fā)布的一個(gè)更大的系統(tǒng),它里面就有一個(gè) JVM JRE 就與具體的 CPU 結(jié)構(gòu)和操作系統(tǒng)有關(guān),我們從 Sun 下載 JRE 的時(shí)候就看到了不同的各種版本。同 JVM 一起組成 JRE 的還有一些 API (如 awt swing 等)。 JRE 是運(yùn)行 Java 程序必不可少的。

          Over


          posted on 2006-05-22 22:30 崛起的程序員 閱讀(716) 評(píng)論(1)  編輯  收藏 所屬分類: 載選文章

          評(píng)論:
          主站蜘蛛池模板: 本溪| 汉阴县| 老河口市| 讷河市| 疏附县| 安岳县| 金华市| 榆中县| 山阴县| 平度市| 阳西县| 永仁县| 建水县| 封丘县| 龙口市| 舞钢市| 舒城县| 鸡东县| 华池县| 贺兰县| 揭西县| 浦江县| 博客| 南充市| 阿巴嘎旗| 香格里拉县| 宁陕县| 富裕县| 万盛区| 德令哈市| 来凤县| 武威市| 呼和浩特市| 同德县| 吉水县| 光山县| 鹤壁市| 翁源县| 文昌市| 双流县| 梓潼县|