標籤:機器 存在 ace highlight 成本 運行環境 csdn 更換 href
適當的整理了一下:
一、平台與機器指令
無論哪種程式設計語言編寫的應用程式都需要經過作業系統和處理器來完成程式的運行,因此這裡的平台是又OS和CPU所構成的,所謂的平台無關就是指軟體的運行不會因作業系統、處理器的變化而無法運行或出現運行錯誤。
每個平台都有自己獨特的機器指令,所謂平台的機器指令就是可以被該平台直接識別、執行的一種由0和1組成的序列代碼。相同的CPU和不同的OS所形成的平台的機器指令可能是不同的
二、何為與平台相關?
C/C++程式是依賴平台的:C/C++來源程式所在的特定平台對其源檔案進行編譯、連結,產生機器指令,即根據當前平台的機器指令產生可執行檔,所以其可以在任何與當前平台相同的平台上運行這個可執行檔。但是,不能保證C/C++來源程式所產生的可執行檔在所有平台上都能正確的運行,其原因是不同平台可能具有不同的機器指令。所以,一旦更換了平台,就可能需要修改來源程式,並針對新的平台重新編譯來源程式,也就是與平台相關。
C/C++程式無法跨平台的根本原因是C/C++來源程式的編譯器針對平台進行編譯,而不同的平台有不同的機器指令,所以無法跨平台。
三、Java為何可以跨平台
C/C++之所以不能跨平台,就是因為C/C++來源程式是對平台編譯的,所以與平台密切相關。如果有這樣的一個環境:它既可以向下相容(對平台相容),又可以向上相容(程式可以運行),那麼不就可以跨平台了嗎。基於這樣的原理,Java在電腦的作業系統上又提供了一個Java運行環境——JRE(安裝JDK)。
JRE由Java虛擬機器,類庫和一些核心檔案組成,也就是說,只要平台提供了Java運行環境,Java編寫的軟體就可以在其上運行。
和C/C++不同的是,Java語言提供的編譯器不針對特定的作業系統和CPU晶片進行編程,而是針對Java虛擬機器把Java來源程式編譯成稱為位元組碼的“中間代碼”,然後Java虛擬機器負責將位元組碼翻譯成虛擬機器所在平台的機器碼,並讓當前平台運行該機器碼。
Java語言的運行原理:
在一個電腦上編譯得到的位元組碼檔案(就是.class檔案,位元組碼檔案是經過編譯器預先處理過的一種檔案,是JAVA的執行檔案存在形式,它本身是二進位檔案,但是不可以被系統直接執行,而是需要虛擬機器解釋執行。),可以複製到任何一個安裝了Java運行環境的電腦上直接運行。位元組碼檔案由虛擬機器負責解釋執行,即Java虛擬機器將位元組碼翻譯成本機電腦的機器碼,然後將機器碼交給本地的作業系統運行。
由於在一個電腦上編譯得到的位元組碼檔案可以複製到任何一個安裝了Java運行環境的電腦上直接使用,所以位元組碼其實是一種“中間代碼”,這也就是為什麼“Java語言能夠一次編譯,處處運行,也就是Java跨平台的原因。”所以稱Java是一種“半編譯,半解釋的語言”,即來源程式——>編譯——>位元組碼——>位元組碼解釋程式——>對應平台的機器語言。”
http://blog.csdn.net/newmemory/article/details/54949817
為什麼說Java語言是平台無關的?