Java真的跨平臺嗎?

Java真的跨平臺嗎?

——有感於《JAVA陷阱》

 

 

JAVA真的跨平臺嗎?我以前一直都認爲是這樣的,呵呵,對着滿大街的各種Java書在說到Java的優點時幾乎都會提到這一點,甚至是引以爲傲的——這似乎成了Java應對別人指責其運行不夠效率時的一種高姿態的無聲的反駁,因爲在IT大牛們百家爭鳴,各擁一方時,Java能在中間得到他們大多數的支持,以及對Internet Web方面開發的天然的接合力,其跨平臺成了多少人擺脫這些巨人們陰影的有效武器。sun成了英雄,一時風光無限!然而,事實並非如此——sun也是在追求成爲巨人路上的一員。。。

 

 

我們來看看JAVA所謂的跨平臺(Write once,Run everywhere)是如何實現的

 

首先編輯Java源文件,然後把.Java源文件編譯成.class文件,class文件字節碼文件,它是一種中間碼,的確與平臺無關,然而卻也不能就此進行獨立運行。它需要Java解釋器進行解釋後才執行。而這一切都要靠傳說中的JVM——它就是Java實現所謂跨平臺的終極武器。

 

JVM的目標是提供一個抽象的計算機模型,相當於你的機子上同時有了兩套系統,現實的操作系統和JVM,你設計的程序先到JVM上運行,則說明你的程序符合JVM的描述規格(深深的打下Java的烙印)。同時JVM也就實現了爲Java字節碼定義了一種獨立於具體平臺的規格描述,JVM是Java平臺獨立性的基礎。

 

 

 

 

 

 

我們把Java源程序想象成C/C++源程序,Java源程序編譯後的字節碼(.class文件)就相當於C/C++編譯後的80x86上的機器碼(Windows 中的.exe文件),而JVM就相當於80x86上的操作系統,而Java解釋器就相當於80x86的CPU,在80x86上運行的程序是機器碼,而在JVM上運行的就是class字節碼。Java解釋器相當於運行Java字節碼的“CPU”,但是這個CPU不是真實物理意思上的CPU,而是通過軟件來實現的"CPU"功能的。JVM本身就是某特定平臺下的一個應用軟件而矣,用它來運行打上Java烙印的字節碼,這是Java跨平臺的根本。

 

也就是說,並不是所有的平臺都能實現都能"被"Java跨平臺,只有在能夠實現Java編譯器功能的平臺下才能運行Java文件。可以設想,如果生成了class文件,卻沒有JVM(或者說某個平臺不支持JVM),Java編譯好的的程序也是不能執行的。

 

關鍵的問題就來了,Java貢獻的開源項目衆多,所涉及到的範圍也相當廣泛,然而,誰也別想打JVM的主意。JVM的控制權牢牢的掌握在SUN,現在的Oracle的手中,JVM是不會被Oracle開放的。正如此,纔有了開源精神領袖Richard的"自由但帶着枷鎖——java陷阱"

 

如果你在Java和JVM上開發軟件,你就被困在了由一個公司——Oracle控制的單一的一個平臺上

Oracle努力維持着對這個平臺的控制權,拒絕刪除在TCK裏的使用條款,有效的阻止了Apache Harmony項目一直不能正式發佈。對Google的訴訟證明了Oracle過度的癡迷於對這個平臺的掌控。我們運用Java所做的一切都要看Oracle這個貪婪的巨頭的臉色。

 

它讓Java生,則Java生,它讓Java死,則Java死。

 

如此這般,自由的Java在哪裏,跨平臺的初衷又被拋向了何方?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章