Java的跨平臺

此篇博文主要源自zero516cn以及網絡xiaozhen的天空的博客:http://xiaozhen1900.blog.163.com/blog/static/1741732572011325111945246/ java

 

 

一、什麼是平臺編程

Java是能夠跨平臺的編程語言,那咱們首先得知道什麼是平臺,咱們把CPU處理器與操做系統的總體叫平臺windows

CPU你們都知道,若是計算機是人,那CPU就是人的大腦,它既負責思惟運算,又負責身體各部件的命令控制。CPU的種類不少,除去咱們熟知的Intel與AMD外,還有好比上面說到的SUN的Sparc,好比IBM的PowerPC等等,這些各個公司生產的CPU使用或相同或不一樣的指令集。指令集就是cpu中用來計算和控制計算機系統的一套指令的集合。指令集又分爲精簡指令集(RISC)與複雜指令集(CISC),每種cpu都有其特定的指令集。開發程序,首先要知道該程序在什麼CPU上運行,也就是要知道CPU所使用的指令集安全

下面說操做系統,操做系統是充當用戶和計算機之間交互的界面軟件,不一樣的操做系統支持不一樣的CPU,嚴格意義上說是不一樣的操做系統支持不一樣CPU的指令集。例如  windows和liunx都支持Intel和AMD的複雜指令集,但並不支持PowerPC所使用的精簡指令集,而早期的MAC電腦使用的是PowerPC處理器,因此也就沒法在MAC下直接安裝windows,直到05年MAC改用了Intel的CPU,才使在MAC下安裝windows成爲可能。但問題來了,原來的MAC 操做系統也只支持PowerPC,在Intel上也不能安裝,怎麼辦?因此蘋果公司也得重寫本身的MAC操做系統以支持這種變化。最後總結下,咱們要知道,不一樣的操做系統支持不一樣的CPU指令集,如今的windows,liunx,mac,solaris都支持Intel與AMD的CPU指令集。網絡

有了上面的鋪墊,旺旺老師就要告訴你們,若是您要開發程序,首先應該肯定:1,CPU類型,也就是指令集類型;2,操做系統;咱們把這種軟硬件的結合叫平臺。也能夠說「平臺= CPU+OS」。又由於如今主流的操做系統都支持主流的CPU,因此有時也把操做系統稱爲平臺。編程語言

  知道什麼是平臺,咱們看Java跨平臺原理。spa

  二、Java跨平臺原理操作系統

首先看一張與C語言有關的圖: 翻譯

    

若是您有過C的開發經歷,這張圖看起來將很是輕鬆。咱們知道,只要是用標準C開發的程序,使用不一樣的編譯器編譯後的可執行文件是能夠在對應平臺運行的,好比windows可使用VC編譯,那編譯後的exe文件就能夠在windows下運行;liunx下可使用GCC編譯,生成的可執行文件就能夠在Liunx上運行。orm

到這裏請你們思考一個問題:「VC編譯的exe能在Liunx上運行嗎?」

答案確定是否認的。使用特定編譯器編譯的程序只能在對應的平臺運行,這裏也能夠說編譯器是與平臺相關的,編譯後的文件也是與平臺相關的。咱們說的語言跨平臺是編譯後的文件跨平臺,而不是源程序跨平臺,若是是源程序,任何一門語言都是跨平臺的語言了。這個若是您不明白,看下面一個案例:

比 如火星真的有外星人(而且毋庸置疑,火星是韓國人的,火星文也必定是韓國人發明的),就像咱們觀察螞蟻同樣,火星人默默的觀察着咱們,有一天,當人類作的 什麼事情讓火星人實在是看不下去了(好比旺旺老師的書出版了你不買,哈哈,嘔吐中,不要緊,吐啊吐啊就吐習慣了),因此決定來地球教育咱們,但有一個問 題,火星人只會說火星文,地球人理解不了,怎麼辦啊?找翻譯唄(也許非主流能夠幫忙,玩笑)!由中文翻譯把火星文翻譯爲中文,英文翻譯把火星文翻譯爲英文 等等等等,但這樣問題來了,中文翻譯翻譯的東西只有中國人能聽懂,美國人法國人根本不明白,英文翻譯翻譯的文章中國人也不明白,也就是語言不能跨平臺。

那上例中,火星文就是C語言,各個國家是平臺,中文翻譯英文翻譯就是對應平臺的編譯器,編譯後的文章就是可執行文件。雖然源文章火星文是與平臺無關的,但翻譯器是與特定國家相關的,翻譯後的文章也是與特定國家相關的。

接下來思考另外一個問題「怎麼讓火星文跨平臺呢?」

火星人想到了地球上有世界語,因而首先把本身的文章翻譯爲世界語;世界語各國人固然看不懂,不要緊,火星人又給每一個國家配備了一個世界語到本地語的翻譯,這 樣火星文只要翻譯一次(翻譯爲世界語),就能夠到各個國家運行了。還要記住,這個過程火星人要提供兩個組件,第一是火星文到世界語的翻譯,第二是世界語到 對應本地語言的翻譯。以下圖:

    

有了上面案例的積累,咱們也知道了語言跨平臺原理:「不能編譯成機器語言,由於那樣就與平臺相關了編譯爲中間語言,再由解釋器二次編譯,解釋執行。」以下是Java跨平臺原理表示圖:

    

上圖中的.java就是源程序,相似於c語言的.c,生成的中間碼是.class,這個既是咱們上文中說的中間語,各個平臺解釋器就是各類國家翻譯。

接下來咱們再比較下兩種方式的差別:第一,C語言是編譯執行的編譯器與平臺相關編譯生成的可執行文件與平臺相關;第二,Java是解釋執行的,編譯爲中間碼的編譯器與平臺無關,編譯生成的中間碼也與平臺無關(一次編譯,處處運行),中間碼再由解釋器解釋執行,解釋器是與平臺相關的,也就是不一樣的平臺須要不一樣的解釋器.

這裏再說下語言根據執行方式的不一樣分類:第一是編譯執行,如上文中說到的C,它把源程序由特定平臺的編譯器一次性編譯爲平臺相關的機器碼,它的優勢是執行速度快,缺點是沒法跨平臺;第二是解釋執行,如HTML,JavaScript,它使用特定的解釋器,把代碼一行行解釋爲機器碼,相似於同聲翻譯,它的優勢是能夠跨平臺,缺點是執行速度慢,暴露源程序;第三種是從Java開始引入的「中間碼+虛擬機」的方式,它既整合了編譯語言與解釋語言的優勢,同時如虛擬機又能夠解決如垃圾回收,安全性檢查等這些傳統語言頭疼的問題,因此其後微軟的.NET平臺也使用的這種方式。

   

  Java先編譯後解釋

  同一個.class文件在不一樣的虛擬機會獲得不一樣的機器指令(WindowsLinux的機器指令不一樣),可是最終執行的結果倒是相同的

相關文章
相關標籤/搜索