Java跨平臺原理

一晾腔、什么是平臺
??????Java是可以跨平臺的編程語言犁苏,那我們首先得知道什么是平臺,我們把CPU處理器與操作系統(tǒng)的整體叫平臺聂儒。

??????CPU大家都知道虎锚,如果計算機是人,那CPU就是人的大腦,它既負(fù)責(zé)思維運算衩婚,又負(fù)責(zé)身體各部件的命令控制窜护。CPU的種類很多,除去我們熟知的Intel與AMD外非春,還有比如上面說到的SUN的Sparc,比如IBM的PowerPC等等柱徙,這些各個公司生產(chǎn)的CPU使用或相同或不同的指令集。指令集就是cpu中用來計算和控制計算機系統(tǒng)的一套指令的集合奇昙。指令集又分為精簡指令集(RISC)與復(fù)雜指令集(CISC)坐搔,每種cpu都有其特定的指令集。開發(fā)程序敬矩,首先要知道該程序在什么CPU上運行,也就是要知道CPU所使用的指令集概行。

??????下面說操作系統(tǒng),操作系統(tǒng)是充當(dāng)用戶和計算機之間交互的界面軟件弧岳,不同的操作系統(tǒng)支持不同的CPU凳忙,嚴(yán)格意義上說是不同的操作系統(tǒng)支持不同CPU的指令集。例如 windows和liunx都支持Intel和AMD的復(fù)雜指令集禽炬,但并不支持PowerPC所使用的精簡指令集涧卵,而早期的MAC電腦使用的是PowerPC處理器,所以也就無法在MAC下直接安裝windows,直到05年MAC改用了Intel的CPU,才使在MAC下安裝windows成為可能腹尖。但問題來了柳恐,原來的MAC 操作系統(tǒng)也只支持PowerPC,在Intel上也不能安裝,怎么辦?所以蘋果公司也得重寫自己的MAC操作系統(tǒng)以支持這種變化乐设。最后總結(jié)下讼庇,我們要知道,不同的操作系統(tǒng)支持不同的CPU指令集近尚,現(xiàn)在的windows,liunx,mac,solaris都支持Intel與AMD的CPU指令集蠕啄。

??????有了上面的鋪墊,旺旺老師就要告訴大家戈锻,如果您要開發(fā)程序歼跟,首先應(yīng)該確定:1,CPU類型格遭,也就是指令集類型哈街;2,操作系統(tǒng)拒迅;我們把這種軟硬件的結(jié)合叫平臺叹卷。也可以說“平臺= CPU+OS”。又因為現(xiàn)在主流的操作系統(tǒng)都支持主流的CPU坪它,所以有時也把操作系統(tǒng)稱為平臺骤竹。

??????知道什么是平臺,我們看Java跨平臺原理往毡。

二蒙揣、Java跨平臺原理

??????首先看一張與C語言有關(guān)的圖:



??????如果您有過C的開發(fā)經(jīng)歷,這張圖看起來將非常輕松开瞭。我們知道懒震,只要是用標(biāo)準(zhǔn)C開發(fā)的程序,使用不同的編譯器編譯后的可執(zhí)行文件是可以在對應(yīng)平臺運行的嗤详,比如windows可以使用VC編譯个扰,那編譯后的exe文件就可以在windows下運行;liunx下可以使用GCC編譯葱色,生成的可執(zhí)行文件就可以在Liunx上運行递宅。

??????到這里請大家思考一個問題:“VC編譯的exe能在Liunx上運行嗎?”

??????答案肯定是否定的苍狰。使用特定編譯器編譯的程序只能在對應(yīng)的平臺運行办龄,這里也可以說編譯器是與平臺相關(guān)的,編譯后的文件也是與平臺相關(guān)的淋昭。我們說的語言跨平臺是編譯后的文件跨平臺俐填,而不是源程序跨平臺,如果是源程序翔忽,任何一門語言都是跨平臺的語言了英融。這個如果您不明白盏檐,看下面一個案例:

??????比如火星真的有外星人(并且毋庸置疑,火星是韓國人的驶悟,火星文也一定是韓國人發(fā)明的)胡野,就像我們觀察螞蟻一樣,火星人默默的觀察著我們撩银,有一天,當(dāng)人類做的什么事情讓火星人實在是看不下去了(比如旺旺老師的書出版了你不買豺憔,哈哈额获,嘔吐中,沒關(guān)系恭应,吐啊吐啊就吐習(xí)慣了)抄邀,所以決定來地球教育我們,但有一個問題昼榛,火星人只會說火星文境肾,地球人理解不了,怎么辦暗ㄓ臁奥喻?找翻譯唄(也許非主流可以幫忙,玩笑)非迹!由中文翻譯把火星文翻譯為中文环鲤,英文翻譯把火星文翻譯為英文等等等等,但這樣問題來了憎兽,中文翻譯翻譯的東西只有中國人能聽懂冷离,美國人法國人根本不明白,英文翻譯翻譯的文章中國人也不明白纯命,也就是語言不能跨平臺西剥。

??????那上例中,火星文就是C語言亿汞,各個國家是平臺瞭空,中文翻譯英文翻譯就是對應(yīng)平臺的編譯器,編譯后的文章就是可執(zhí)行文件疗我。雖然源文章火星文是與平臺無關(guān)的匙铡,但翻譯器是與特定國家相關(guān)的,翻譯后的文章也是與特定國家相關(guān)的碍粥。

??????接下來思考另一個問題“怎么讓火星文跨平臺呢鳖眼?”

??????火星人想到了地球上有世界語,于是首先把自己的文章翻譯為世界語嚼摩;世界語各國人當(dāng)然看不懂钦讳,沒關(guān)系矿瘦,火星人又給每個國家配備了一個世界語到本地語的翻譯,這樣火星文只要翻譯一次(翻譯為世界語)愿卒,就可以到各個國家運行了缚去。還要記住,這個過程火星人要提供兩個組件琼开,第一是火星文到世界語的翻譯易结,第二是世界語到對應(yīng)本地語言的翻譯。如下圖:


??????有了上面案例的積累柜候,我們也知道了語言跨平臺原理:“不能編譯成機器語言搞动,因為那樣就與平臺相關(guān)了,編譯為中間語言渣刷,再由解釋器二次編譯鹦肿,解釋執(zhí)行「ú瘢”如下是Java跨平臺原理表示圖:


??????上圖中的.java就是源程序箩溃,類似于c語言的.c,生成的中間碼是.class,這個既是我們上文中說的中間語,各個平臺解釋器就是各種國家翻譯碌嘀。
??????接下來我們再比較下兩種方式的差異:第一涣旨,C語言是編譯執(zhí)行的,編譯器與平臺相關(guān)股冗,編譯生成的可執(zhí)行文件與平臺相關(guān)开泽;第二,Java是解釋執(zhí)行的魁瞪,編譯為中間碼的編譯器與平臺無關(guān)穆律,編譯生成的中間碼也與平臺無關(guān)(一次編譯,到處運行)导俘,中間碼再由解釋器解釋執(zhí)行峦耘,解釋器是與平臺相關(guān)的,也就是不同的平臺需要不同的解釋器.

??????這里再說下語言根據(jù)執(zhí)行方式的不同分類:第一是編譯執(zhí)行旅薄,如上文中說到的C辅髓,它把源程序由特定平臺的編譯器一次性編譯為平臺相關(guān)的機器碼,它的優(yōu)點是執(zhí)行速度快,缺點是無法跨平臺少梁;第二是解釋執(zhí)行洛口,如HTML,JavaScript,它使用特定的解釋器凯沪,把代碼一行行解釋為機器碼第焰,類似于同聲翻譯,它的優(yōu)點是可以跨平臺妨马,缺點是執(zhí)行速度慢挺举,暴露源程序杀赢;第三種是從Java開始引入的“中間碼+虛擬機”的方式,它既整合了編譯語言與解釋語言的優(yōu)點湘纵,同時如虛擬機又可以解決如垃圾回收脂崔,安全性檢查等這些傳統(tǒng)語言頭疼的問題,所以其后微軟的.NET平臺也使用的這種方式梧喷。

最后再請大家思考一個問題:“開發(fā)Java程序需要什么砌左?運行Java程序需要什么?”

答案:開發(fā)Java需要由源文件到中間文件的解釋器铺敌;運行Java需要對應(yīng)平臺的解釋器汇歹。與火星人要提供兩個組件一樣,SUN也得提供兩個組件:第一适刀,把源程序翻譯為中間碼的編譯器秤朗;第二煤蹭,相應(yīng)平臺的解釋器笔喉。SUN把這兩個組件包含在一個工具包中,我們把它叫做JDK(Java Developent ToolKit).

本文非原創(chuàng)硝皂,如果侵犯了你的權(quán)益請來信通知刪除常挚。
<a >閱讀原文</a>
<a href="http://www.reibang.com/p/11d77eb1d82c">上一章</a>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市稽物,隨后出現(xiàn)的幾起案子奄毡,更是在濱河造成了極大的恐慌,老刑警劉巖贝或,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吼过,死亡現(xiàn)場離奇詭異,居然都是意外死亡咪奖,警方通過查閱死者的電腦和手機盗忱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羊赵,“玉大人趟佃,你說我怎么就攤上這事∶两荩” “怎么了闲昭?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長靡挥。 經(jīng)常有香客問我序矩,道長,這世上最難降的妖魔是什么跋破? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任贮泞,我火速辦了婚禮楞慈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啃擦。我一直安慰自己囊蓝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布令蛉。 她就那樣靜靜地躺著聚霜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪珠叔。 梳的紋絲不亂的頭發(fā)上蝎宇,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機與錄音祷安,去河邊找鬼姥芥。 笑死,一個胖子當(dāng)著我的面吹牛汇鞭,可吹牛的內(nèi)容都是我干的凉唐。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼霍骄,長吁一口氣:“原來是場噩夢啊……” “哼台囱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起读整,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤簿训,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后米间,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體强品,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年屈糊,在試婚紗的時候發(fā)現(xiàn)自己被綠了的榛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡另玖,死狀恐怖困曙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谦去,我是刑警寧澤慷丽,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站鳄哭,受9級特大地震影響要糊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妆丘,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一锄俄、第九天 我趴在偏房一處隱蔽的房頂上張望局劲。 院中可真熱鬧,春花似錦奶赠、人聲如沸鱼填。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苹丸。三九已至,卻和暖如春苇经,著一層夾襖步出監(jiān)牢的瞬間赘理,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工扇单, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留商模,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓蜘澜,卻偏偏與公主長得像施流,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兼都,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容