您好,登錄后才能下訂單哦!
這篇文章主要介紹“JAVA的可移植性有哪些優缺點”,在日常操作中,相信很多人在JAVA的可移植性有哪些優缺點問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JAVA的可移植性有哪些優缺點”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Java技術強大的可移植性(portability)主要表現在三個各自獨立的方面,分別是:
源代碼可移植性
CPU可移植性
操作系統可移植性
下面討論了這三種可移植性的特點和它們的不足。
1. 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++程序了。
2. 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的益處在于可運轉于各種機器上, 而缺陷是它不如本機代碼運轉的速度快。
3. 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的可移植性有哪些優缺點”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。