偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳細(xì)介紹JAVA的可移植性

開發(fā) 后端
本文介紹的是java中的可移植性,主要從三個大的方面來給大家介紹的。希望對大家有幫助,一起來看。

Java技術(shù)強(qiáng)大的可移植性(portability)主要表現(xiàn)在三個各自獨(dú)立的方面,分別是:

  • 源代碼可移植性
  • CPU可移植性
  • 操作系統(tǒng)可移植性

下面討論了這三種可移植性的特點(diǎn)和它們的不足。

1. JAVA作為一種編程言語:源代碼可移植性

作為一種編程言語, JAVA提供了一種最簡單同時也是人們最熟悉的可移植性–源代碼移植。 這意味著恣意一個JAVA程序, 不論它運(yùn)轉(zhuǎn)在何種CPU、操作系統(tǒng)或JAVA編譯器上, 都將發(fā)生異樣的結(jié)果。 這并不是一個新的概念。 人們運(yùn)用C、C++也可以發(fā)生異樣的效果。 但是運(yùn)用C或C++編程人們可以有太多的選擇, 在許多細(xì)節(jié)上它都沒有嚴(yán)格定義, 如:未初始化變量的值、對已釋放的內(nèi)存的存取、浮點(diǎn)運(yùn)算的尾數(shù)值等等。 所以除非你一開端就嚴(yán)格按照系統(tǒng)無關(guān)的概念來進(jìn)行設(shè)計, 否則這種可移植性只能是一種實(shí)際上的設(shè)想而不能構(gòu)成實(shí)踐。

總之, 雖然C和C++有緊密的語法定義, 它們的語意(symantics)定義還不是規(guī)范的。 這種語意上的不一致使得同一段程序在不同的系統(tǒng)環(huán)境下會發(fā)生不同的結(jié)果。 有時即便系統(tǒng)情況完全相同而僅僅由于編譯器的設(shè)置不同也會發(fā)生令人意想不到的結(jié)果。 而JAVA就不同了。 它定義了緊密的語意結(jié)構(gòu), 而使編譯器不承當(dāng)這方面的工作。

另外, JAVA對程序的行為的定義也比C和C++嚴(yán)格, 如:它提供了內(nèi)存自動回收功用(GarbageCollection), 使程序不能拜訪越界內(nèi)存;它對未初始化的變量提供確定值等等。 它的這些特功可以減小在不同平臺上運(yùn)轉(zhuǎn)的JAVA程序之間的差異, 也使得JAVA具有即便沒有JAVA虛擬機(jī)的存在的情況下比C和C++更好的平臺無關(guān)性。

但是, 這些特點(diǎn)也有它不利的一面。 JAVA設(shè)想運(yùn)轉(zhuǎn)于具有32位字節(jié)長度且每字節(jié)為8位的計算機(jī)上, 這就使得那些8位字長的計算機(jī)和一些巨型機(jī)不能有效的運(yùn)轉(zhuǎn)JAVA程序。 在這樣的平臺上就只能運(yùn)轉(zhuǎn)那些可移植的C和C++程序了。

2. JAVA作為一個虛擬機(jī):CPU可移植性

大少數(shù)編譯器發(fā)生的目的代碼只能運(yùn)轉(zhuǎn)在一種CPU上(如Intel的x86系列), 即便那些能支持多種CPU的編譯器也不能同時發(fā)生適合多種CPU的目的代碼。 假設(shè)你需要在三種CPU(如x86、SPARC和MIPS)上運(yùn)轉(zhuǎn)同一程序, 就必須編譯三次。 

但JAVA編譯器就不同了。 JAVA編譯器發(fā)生的目的代碼(J-Code)是針對一種并不存在的CPU–JAVA虛擬機(jī)(JAVAVirtualMachine), 而不是某一實(shí)際的CPU。 JAVA虛擬機(jī)能掩蓋不同CPU之間的差別, 使J-Code能運(yùn)轉(zhuǎn)于任何具有JAVA虛擬機(jī)的機(jī)器上。 

虛擬機(jī)的概念并不是JAVA所特有的:加州大學(xué)幾年前就提出了PASCAL虛擬機(jī)的概念;普遍用于Unix效勞器的Perl腳本也是發(fā)生與機(jī)器無關(guān)的中間代碼用于執(zhí)行。 但針對Internet運(yùn)用而設(shè)計的JAVA虛擬機(jī)的特別之處在于它能發(fā)生安全的不受病毒威脅的目的代碼。 正是由于Internet對安全特性的特別要求才使得JVM可以迅速被人們接受。 當(dāng)今主流的操作系統(tǒng)如OS/2、MacOS、Windows95/NT都曾經(jīng)或很快提供對J-Code的支持。 

作為一種虛擬的CPU, JAVA虛擬機(jī)關(guān)于源代碼(SourceCode)來說是獨(dú)立的。 我們不僅可以用JAVA言語來生成J-Code, 也可以用Ada95來生成。 理想上, 曾經(jīng)有了針對若干種源代碼的J-Code編譯器, 包括Basic、Lisp和Forth。 源代碼一經(jīng)轉(zhuǎn)換成J-Code以后, JAVA虛擬機(jī)就可以執(zhí)行而不區(qū)分它是由哪種源代碼生成的。 這樣做的結(jié)果就是CPU可移植性。 

將源程序編譯為J-Code的益處在于可運(yùn)轉(zhuǎn)于各種機(jī)器上, 而缺陷是它不如本機(jī)代碼運(yùn)轉(zhuǎn)的速度快。 

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

即便經(jīng)過重新編譯, 大少數(shù)的用C和C++編寫的Windows程序也不能在Unix或Macintosh系統(tǒng)上運(yùn)轉(zhuǎn)。 這是為什么呢?由于程序員在編寫Windows程序時運(yùn)用了少量的WindowsAPI和中斷調(diào)用, 而Windows程序?qū)ο到y(tǒng)功用的調(diào)用與Unix和Macintosh程序有很大的差別, 所以除非將全套WindowsAPI移植到其它操作系統(tǒng)上, 否則重編譯的程序仍不能運(yùn)轉(zhuǎn)。 

JAVA采用了提供一套與平臺無關(guān)的庫函數(shù)(包括AWT、UTIL、LANG等等)的方法來處理這個問題。 就象JVM提供了一個虛擬的CPU一樣, JAVA庫函數(shù)提供了一個虛擬的GUI環(huán)境。 JAVA程序僅對JAVA庫函數(shù)提出調(diào)用, 而庫函數(shù)對操作系統(tǒng)功用的調(diào)用由各不同的虛擬機(jī)來完成。

JAVA也在它的OS/GUI庫中運(yùn)用了一種“稀有名稱符”(least-commom-denominator)來提供對某種特定操作系統(tǒng)的功用調(diào)用, 即此功用只在特定環(huán)境下生效而在其它操作系統(tǒng)下則被疏忽。 這樣做的益處在于可以針對某操作系統(tǒng)生成擁有人們熟悉的界面的運(yùn)用程序而同時此程序又能在其它系統(tǒng)下運(yùn)轉(zhuǎn)。 缺陷則是系統(tǒng)中的某些功用調(diào)用有很強(qiáng)的依賴性因而在JAVA的虛擬OS/API中難以實(shí)現(xiàn)。 遇到這種情況, 程序員就只能寫不可移植的程序了。

總之, JAVA在可移植性方面的特點(diǎn)使它在Internet上具有普遍的運(yùn)用前景。 同時它自身具有的防病毒的才能也使它在需要高牢靠性的運(yùn)用中占有一席之地。 

責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-11 17:33:25

JAVA可移植性

2011-06-14 14:18:08

可移植性測試

2012-12-14 09:35:03

私有云應(yīng)用程序可移植性OpenStack

2013-05-28 10:33:06

虛擬化虛擬機(jī)移植

2016-08-02 09:45:59

云計算

2023-10-13 09:00:00

云計算架構(gòu)

2013-10-31 10:22:21

開源云Linux容器Docker

2009-08-17 10:17:01

C# Windows

2009-07-17 13:42:36

Windows CE應(yīng)WinCE可移植性

2012-09-07 09:51:07

云互操作性云可移植性云計算服務(wù)

2024-03-01 09:09:56

云計算架構(gòu)應(yīng)用

2012-11-16 15:34:35

Cloud FoundVMware PaaS平臺即服務(wù)

2020-10-26 14:32:39

AI 數(shù)據(jù)模型

2013-12-09 09:24:46

2009-03-26 09:25:14

J2MEJCPJSR

2018-09-06 14:45:49

數(shù)據(jù)云轉(zhuǎn)型云計算

2013-04-02 09:25:20

PaaS 應(yīng)用可移植性PaaS提供商平臺即服務(wù)

2024-12-18 14:13:07

2021-11-19 11:53:42

云計算混合云Kubernetes

2012-09-24 09:31:28

應(yīng)用移植性云計算云平臺應(yīng)用程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號