Java程序的跨平臺性

我們一般將CPU處理器和操作系統(tǒng)的整體叫做平臺。CPU種類繁多,如Intel、AMD、PowerPC等等。不同的CPU有不同的特定的指令集來計算和控制計算機系統(tǒng)。操作系統(tǒng)是用戶和計算機之間交互的界面軟件,不同操作系統(tǒng)支持不同的CPU,即不同操作系統(tǒng)支持不同的CPU指令集,但不一定一種操作系統(tǒng)唯一支持一種指令集。像Windows、Linux、Mac都支持Intel和AMD的CPU指令集。

如果我們要開發(fā)程序,則我們需要確認(rèn)平臺是什么——CPU的類型即指令類型和操作系統(tǒng)。如果用標(biāo)準(zhǔn)C開發(fā)程序,使用不同的編譯器后的可執(zhí)行文件是可以在對應(yīng)的平臺上運行的。比如使用GCC編譯,生成可執(zhí)行文件可以在Linux上運行。使用特定編譯器編譯的程序只能在對應(yīng)的平臺上運行,編譯器是與平臺相關(guān)的,編譯后的文件也是與平臺相關(guān)的。這種執(zhí)行方式稱作編譯執(zhí)行,它把源程序與特定平臺的編譯器一次性編譯成平臺相關(guān)的機器碼。優(yōu)點是執(zhí)行速度快,缺點是無法跨平臺。

接著我們看看Java程序的跨平臺性是怎么實現(xiàn)的——Java程序被編譯成一種中間語言,再由JVM將Java字節(jié)碼(.class文件)翻譯成機器語言。Java源程序編譯的結(jié)果是生成Java字節(jié)碼,不同平臺下生成的Java字節(jié)碼是相同的,但由JVM翻譯成的機器碼卻不一樣。再次強調(diào),跨平臺的是Java程序,因為其后面會被與平臺不相關(guān)的編譯器編譯成與平臺不相關(guān)的中間碼。JVM不是跨平臺的。不同平臺下需要安裝不同的JVM。

總結(jié)一下,無論我們使用什么語言編程,最終要在設(shè)備上運行,那一定要被翻譯成機器能識別執(zhí)行的機器碼。C、C++這種編譯性語言,在不同的編譯器下直接編譯特定的機器碼,在特定的平臺下運行。而Java則屬于先編譯后解釋型的語言。與平臺不相關(guān)的編譯器編譯成了與平臺不相關(guān)的.class文件,然后再由JVM解釋成其平臺下的機器碼。就是由于多出的這個機制,讓Java程序看起來與眾不同。

有人會說,不同平臺下使用的機器碼是不同的,所以不同平臺下的JVM一般不同,這樣才翻譯成不同的機器碼,這跟C要被翻譯成不同的機器碼有什么本質(zhì)不同嗎?怎么多了個中間碼就跨平臺了。如果你還冒出這個疑惑,那說明你沒有真正明白跨平臺指代的對象。當(dāng)提出的“跨平臺性”等概念時候,我們一定要緊抓其指的對象到底是什么。不然云里霧里,基礎(chǔ)不扎實,人容易心虛不自信。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,798評論 11 349
  • JVM、Java編譯器和Java解釋器 java解釋器就是把在java虛擬機上運行的目標(biāo)代碼(字節(jié)碼)解釋成為具體...
    光劍書架上的書閱讀 8,920評論 1 15
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方,同時不同JDK版本的...
    高廣超閱讀 16,051評論 3 83
  • 一只邪惡的怪物,化為人形,為了獲得最美味的人肉,它混進(jìn)村子,收養(yǎng)了一個孤兒。悲傷與憤怒會使人的肉不美味,太胖太瘦也...
    孟浪之言閱讀 355評論 0 0
  • 作為一個職業(yè)人必須要思考的四個問題: 1、你是誰? 要清晰明白自己到底是一個什么樣的人?你擁有什么,你缺乏什么?人...
    有夢的人在啟航閱讀 459評論 0 0

友情鏈接更多精彩內(nèi)容