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

來源:互聯網
上載者:User

標籤:細節   來源程式   互動   也有   win   生效   特定   mips   lis   

軟體可移植性的概念是與軟體從某一環境轉移到另一環境下的難易程度。為獲得較高的可移植性,在設計過程中常採用通用的程式設計語言和運行支撐環境。盡量不用與系統的底層相關性強的語言。下面介紹JAVA的可移植性。

    
    一、JAVA作為一種虛擬作業系統(OS)和圖形化使用者介面(GUI):作業系統可移植性
    
    即使經過重新編譯,大多數的用C和C++編寫的Windows程式也不能在Unix或Macintosh系統上運行。這是為什麼呢?因為程式員在編寫Windows程式時使用了大量的WindowsAPI和中斷調用,而Windows程式對系統功能的調用與Unix和Macintosh程式有很大的差別,所以除非將全套WindowsAPI移植到其它作業系統上,否則重編譯的程式仍不能運行。JAVA採用了提供一套與平台無關的庫函數(包括AWT、UTIL、LANG等等)的方法來解決這個問題。就象JVM提供了一個虛擬CPU一樣,JAVA庫函數提供了一個虛擬GUI環境。JAVA程式僅對JAVA庫函數提出調用,而庫函數對作業系統功能的調用由各不同的虛擬機器來完成。JAVA也在它的OS/GUI庫中使用了一種"罕見名稱符"(least-commom-denominator)來提供對某種特定作業系統的功能調用,即此功能只在特定環境下生效而在其它作業系統下則被忽略。這樣做的好處在於可以針對某作業系統產生擁有人們熟悉的介面的應用程式而同時此程式又能在其它系統下運行。缺點則是系統中的某些功能調用有很強的依賴性因而在JAVA的虛擬OS/API中難以實現。遇到這種情況,程式員就只能寫不可移植的程式了。    

?Java初進階學習分享,共同學習才是最明智的選擇,喜歡的話可以我的學習群64弍46衣3淩9,或加資料群69似64陸0吧3(進群備忘平台名)
    二、JAVA作為一種程式設計語言:原始碼可移植性
    
    作為一種程式設計語言,JAVA提供了一種最簡單同時也是人們最熟悉的可移植性–原始碼移植。這意味著任意一個JAVA程式,不論它運行在何種CPU、作業系統或JAVA編譯器上,都將產生同樣的結果。人們使用C、C++也可以產生同樣的效果。但是使用C或C++編程人們可以有太多的選擇,在許多細節上它都沒有嚴格定義,如:未初始設定變數的值、對已釋放的記憶體的存取、浮點運算的尾數值等等。所以除非你一開始就嚴格按照系統無關的概念來進行設計,否則這種可移植性只能是一種理論上的設想而不能形成實踐。總之,儘管C和C++有嚴密的文法定義,它們的語意(symantics)定義還不是標準的。這種語意上的不統一使得同一段程式在不同的系統內容下會產生不同的結果。有時即使系統情況完全相同而僅僅由於編譯器的設定不同也會產生令人意想不到的結果。而JAVA就不同了。它定義了嚴密的語意結構,而使編譯器不承擔這方面的工作。另外,JAVA對程式的行為的定義也比C和C++嚴格,如:它提供了記憶體自動回收功能(GarbageCollection),使程式不能訪問越界記憶體;它對未初始化的變數提供確定值等等。它的這些特效能夠減小在不同平台上啟動並執行JAVA程式之間的差異,也使得JAVA具有即使沒有JAVA虛擬機器的存在的情況下比C和C++更好的平台無關性。然而,這些特點也有它不利的一面。JAVA設想運行於具有32位位元組長度且每位元組為8位的電腦上,這就使得那些8位字長的電腦和一些巨型機不能有效運行JAVA程式。在這樣的平台上就只能運行那些可移植的C和C++程式了。
 
    三、JAVA作為一個虛擬機器:CPU可移植性
    
    大多數編譯器產生的目標代碼只能運行在一種CPU上(如Intel的x86系列),即使那些能支援多種CPU的編譯器也不能同時產生適合多種CPU的目標代碼。如果你需要在三種CPU(如x86、SPARC和MIPS)上運行同一程式,就必須編譯三次。但JAVA編譯器就不同了。JAVA編譯器產生的目標代碼(J-Code)是針對一種並不存在的CPU–JAVA虛擬機器(JAVAVirtualMachine),而不是某一實際的CPU.JAVA虛擬機器能掩蓋不同CPU之間的差別,使J-Code能運行於任何具有JAVA虛擬機器的機器上。虛擬機器的概念並不是JAVA所特有的:加州大學幾年前就提出了PASCAL虛擬機器的概念;廣泛用於Unix伺服器的Perl指令碼也是產生與機器無關的中間代碼用於執行。但針對Internet應用而設計的JAVA虛擬機器的特別之處在於它能產生安全的不受病毒威脅的目標代碼。正是由於Internet對安全特性的特別要求才使得JVM能夠迅速被人們接受。當今主流的作業系統如OS/2、MacOS、Windows95/NT都已經或很快提供對J-Code的支援。作為一種虛擬CPU,JAVA虛擬機器對於原始碼(SourceCode)來說是獨立的。我們不僅可以用JAVA語言來產生J-Code,也可以用Ada95來產生。事實上,已經有了針對若干種原始碼的J-Code編譯器,包括Basic、Lisp和Forth.原始碼一經轉換成J-Code以後,JAVA虛擬機器就能夠執行而不區分它是由哪種原始碼產生的。這樣做的結果就是CPU可移植性。將來源程式編譯為J-Code的好處在於可運行於各種機器上,而缺點是它不如機器碼啟動並執行速度快。
    
    總之,JAVA在可移植性方面的特點使它在Internet上具有廣泛的應用前景。同時它本身具有的防病毒的能力也使它在需要高可靠性的應用中佔有一席之地。

?提問/互動請留言,可直接在最底右下方"寫留言即可"

?如果覺得寫得不錯請點擊“訂閱”,每天更新全新的內容!

?你們的喜歡和關注就是我最大的動力支撐!!!

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.