在JAVA可移植性的來源的三方面

在JAVA可移植性的講解

軟件可移植性的概念是與軟件從某一環(huán)境轉(zhuǎn)移到另一環(huán)境下的難易程度。為獲得較高的可移植性源武,在設(shè)計(jì)過程中常采用通用的程序設(shè)計(jì)語言和運(yùn)行支撐環(huán)境。盡量不用與系統(tǒng)的底層相關(guān)性強(qiáng)的語言。下面介紹JAVA的可移植性。????????

一籽御、JAVA作為一種虛擬的操作系統(tǒng)(OS)和圖形用戶界面(GUI):操作系統(tǒng)可移植性????????

即使經(jīng)過重新編譯,大多數(shù)的用C和C++編寫的Windows程序也不能在Unix或Macintosh系統(tǒng)上運(yùn)行惰匙。這是為什么呢技掏?因?yàn)槌绦騿T在編寫Windows程序時(shí)使用了大量的WindowsAPI和中斷調(diào)用,而Windows程序?qū)ο到y(tǒng)功能的調(diào)用與Unix和Macintosh程序有很大的差別徽曲,所以除非將全套WindowsAPI移植到其它操作系統(tǒng)上零截,否則重編譯的程序仍不能運(yùn)行麸塞。JAVA采用了提供一套與平臺(tái)無關(guān)的庫函數(shù)(包括AWT秃臣、UTIL、LANG等等)的方法來解決這個(gè)問題哪工。就象JVM提供了一個(gè)虛擬的CPU一樣奥此,JAVA庫函數(shù)提供了一個(gè)虛擬的GUI環(huán)境。JAVA程序僅對(duì)JAVA庫函數(shù)提出調(diào)用雁比,而庫函數(shù)對(duì)操作系統(tǒng)功能的調(diào)用由各不同的虛擬機(jī)來完成稚虎。JAVA也在它的OS/GUI庫中使用了一種"罕見名稱符"(least-commom-denominator)來提供對(duì)某種特定操作系統(tǒng)的功能調(diào)用,即此功能只在特定環(huán)境下生效而在其它操作系統(tǒng)下則被忽略偎捎。這樣做的好處在于可以針對(duì)某操作系統(tǒng)生成擁有人們熟悉的界面的應(yīng)用程序而同時(shí)此程序又能在其它系統(tǒng)下運(yùn)行蠢终。缺點(diǎn)則是系統(tǒng)中的某些功能調(diào)用有很強(qiáng)的依賴性因而在JAVA的虛擬OS/API中難以實(shí)現(xiàn)序攘。遇到這種情況,程序員就只能寫不可移植的程序了寻拂。????????


二程奠、JAVA作為一種編程語言:源代碼可移植性????????

作為一種編程語言,JAVA提供了一種最簡單同時(shí)也是人們最熟悉的可移植性–源代碼移植祭钉。這意味著任意一個(gè)JAVA程序瞄沙,不論它運(yùn)行在何種CPU、操作系統(tǒng)或JAVA編譯器上慌核,都將產(chǎn)生同樣的結(jié)果距境。人們使用C、C++也可以產(chǎn)生同樣的效果垮卓。但是使用C或C++編程人們可以有太多的選擇垫桂,在許多細(xì)節(jié)上它都沒有嚴(yán)格定義,如:未初始化變量的值粟按、對(duì)已釋放的內(nèi)存的存取伪货、浮點(diǎn)運(yùn)算的尾數(shù)值等等。所以除非你一開始就嚴(yán)格按照系統(tǒng)無關(guān)的概念來進(jìn)行設(shè)計(jì)钾怔,否則這種可移植性只能是一種理論上的設(shè)想而不能形成實(shí)踐碱呼。總之宗侦,盡管C和C++有嚴(yán)密的語法定義愚臀,它們的語意(symantics)定義還不是標(biāo)準(zhǔn)的。這種語意上的不統(tǒng)一使得同一段程序在不同的系統(tǒng)環(huán)境下會(huì)產(chǎn)生不同的結(jié)果矾利。有時(shí)即使系統(tǒng)情況完全相同而僅僅由于編譯器的設(shè)置不同也會(huì)產(chǎn)生令人意想不到的結(jié)果姑裂。而JAVA就不同了。它定義了嚴(yán)密的語意結(jié)構(gòu)男旗,而使編譯器不承擔(dān)這方面的工作舶斧。另外,JAVA對(duì)程序的行為的定義也比C和C++嚴(yán)格察皇,如:它提供了內(nèi)存自動(dòng)回收功能(GarbageCollection)茴厉,使程序不能訪問越界內(nèi)存;它對(duì)未初始化的變量提供確定值等等什荣。它的這些特性能夠減小在不同平臺(tái)上運(yùn)行的JAVA程序之間的差異矾缓,也使得JAVA具有即使沒有JAVA虛擬機(jī)的存在的情況下比C和C++更好的平臺(tái)無關(guān)性。然而稻爬,這些特點(diǎn)也有它不利的一面嗜闻。JAVA設(shè)想運(yùn)行于具有32位字節(jié)長度且每字節(jié)為8位的計(jì)算機(jī)上,這就使得那些8位字長的計(jì)算機(jī)和一些巨型機(jī)不能有效的運(yùn)行JAVA程序桅锄。在這樣的平臺(tái)上就只能運(yùn)行那些可移植的C和C++程序了琉雳。????????


三样眠、JAVA作為一個(gè)虛擬機(jī):CPU可移植性????????

大多數(shù)編譯器產(chǎn)生的目標(biāo)代碼只能運(yùn)行在一種CPU上(如Intel的x86系列),即使那些能支持多種CPU的編譯器也不能同時(shí)產(chǎn)生適合多種CPU的目標(biāo)代碼翠肘。如果你需要在三種CPU(如x86吹缔、SPARC和MIPS)上運(yùn)行同一程序,就必須編譯三次锯茄。但JAVA編譯器就不同了厢塘。JAVA編譯器產(chǎn)生的目標(biāo)代碼(J-Code)是針對(duì)一種并不存在的CPU–JAVA虛擬機(jī)(JAVAVirtualMachine),而不是某一實(shí)際的CPU.JAVA虛擬機(jī)能掩蓋不同CPU之間的差別肌幽,使J-Code能運(yùn)行于任何具有JAVA虛擬機(jī)的機(jī)器上晚碾。虛擬機(jī)的概念并不是JAVA所特有的:加州大學(xué)幾年前就提出了PASCAL虛擬機(jī)的概念;廣泛用于Unix服務(wù)器的Perl腳本也是產(chǎn)生與機(jī)器無關(guān)的中間代碼用于執(zhí)行喂急。但針對(duì)Internet應(yīng)用而設(shè)計(jì)的JAVA虛擬機(jī)的特別之處在于它能產(chǎn)生安全的不受病毒威脅的目標(biāo)代碼格嘁。正是由于Internet對(duì)安全特性的特別要求才使得JVM能夠迅速被人們接受。當(dāng)今主流的操作系統(tǒng)如OS/2廊移、MacOS糕簿、Windows95/NT都已經(jīng)或很快提供對(duì)J-Code的支持。作為一種虛擬的CPU,JAVA虛擬機(jī)對(duì)于源代碼(SourceCode)來說是獨(dú)立的狡孔。我們不僅可以用JAVA語言來生成J-Code,也可以用Ada95來生成懂诗。事實(shí)上,已經(jīng)有了針對(duì)若干種源代碼的J-Code編譯器苗膝,包括Basic殃恒、Lisp和Forth.源代碼一經(jīng)轉(zhuǎn)換成J-Code以后,JAVA虛擬機(jī)就能夠執(zhí)行而不區(qū)分它是由哪種源代碼生成的辱揭。這樣做的結(jié)果就是CPU可移植性离唐。將源程序編譯為J-Code的好處在于可運(yùn)行于各種機(jī)器上,而缺點(diǎn)是它不如本機(jī)代碼運(yùn)行的速度快问窃。????????

總之亥鬓,JAVA在可移植性方面的特點(diǎn)使它在Internet上具有廣泛的應(yīng)用前景。同時(shí)它本身具有的防病毒的能力也使它在需要高可靠性的應(yīng)用中占有一席之地域庇。

?提問/互動(dòng)請(qǐng)留言嵌戈,可直接在最底右下方"寫留言即可"

?Java初高級(jí)學(xué)習(xí)分享,共同學(xué)習(xí)才是最明智的選擇较剃,喜歡的話可以我的學(xué)習(xí)群64弍46衣3凌9咕别,或加資料群69似64陸0吧3(進(jìn)群備注平臺(tái)名)

?如果覺得寫得不錯(cuò)請(qǐng)點(diǎn)擊“訂閱”,每天更新全新的內(nèi)容写穴!

?你們的喜歡和關(guān)注就是我最大的動(dòng)力支撐!4萍啊送!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偿短,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子馋没,更是在濱河造成了極大的恐慌昔逗,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篷朵,死亡現(xiàn)場離奇詭異勾怒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)选酗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門佛致,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纱注,“玉大人,你說我怎么就攤上這事鉴扫。” “怎么了澈缺?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵坪创,是天一觀的道長。 經(jīng)常有香客問我姐赡,道長莱预,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任项滑,我火速辦了婚禮锁施,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杖们。我一直安慰自己悉抵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布摘完。 她就那樣靜靜地躺著姥饰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孝治。 梳的紋絲不亂的頭發(fā)上列粪,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音谈飒,去河邊找鬼岂座。 笑死,一個(gè)胖子當(dāng)著我的面吹牛杭措,可吹牛的內(nèi)容都是我干的费什。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼手素,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼鸳址!你這毒婦竟也來了瘩蚪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤稿黍,失蹤者是張志新(化名)和其女友劉穎疹瘦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巡球,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡言沐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酣栈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片险胰。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钉嘹,靈堂內(nèi)的尸體忽然破棺而出鸯乃,到底是詐尸還是另有隱情,我是刑警寧澤跋涣,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布缨睡,位于F島的核電站,受9級(jí)特大地震影響陈辱,放射性物質(zhì)發(fā)生泄漏奖年。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一沛贪、第九天 我趴在偏房一處隱蔽的房頂上張望陋守。 院中可真熱鬧,春花似錦利赋、人聲如沸水评。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽中燥。三九已至,卻和暖如春塘偎,著一層夾襖步出監(jiān)牢的瞬間疗涉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工吟秩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咱扣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓涵防,卻偏偏與公主長得像闹伪,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法祭往,類相關(guān)的語法伦意,內(nèi)部類的語法火窒,繼承相關(guān)的語法硼补,異常的語法,線程的語...
    子非魚_t_閱讀 31,641評(píng)論 18 399
  • 從今天開始讀《深入理解 Java 虛擬機(jī)》一書熏矿,并開設(shè)了同名專題 深入理解 Java 虛擬機(jī)已骇。計(jì)劃在 2 周內(nèi)將全...
    SawyerZh閱讀 10,254評(píng)論 17 215
  • 最美不過初見 而你我的初見卻是記憶的模糊點(diǎn) 用心的發(fā)現(xiàn) 美好也許就在身邊 情不知何起一往而深 激情終將歸為平淡...
    姓董名什么閱讀 511評(píng)論 6 5
  • 我知道,我是風(fēng)箏你就是線票编,不管我飛多遠(yuǎn)褪储,身后總有長長的掛念。 小時(shí)候慧域,村子里多是留守兒童鲤竹,爸爸媽媽在外打工,小孩被...
    尋羌閱讀 163評(píng)論 0 2
  • 新建一個(gè)屏幕:screen -S name 啟動(dòng)一個(gè)名字為name的screen昔榴;< 不知為啥我這樣新建scree...
    東京的雨不會(huì)淋濕首爾閱讀 828評(píng)論 0 0