1. 程式人生 > >Java程式為何“編譯一次,到處執行”?

Java程式為何“編譯一次,到處執行”?

         轉載地址:http://blog.csdn.net/Lilibaobei1314/article/details/34826783

       與其他語言相比,Java程式能夠做到“編譯一次,到處執行”,可見它的跨平臺性非常強。但是java的這種跨平臺到底是怎麼一回事啊,在這之前我們先了解一下不能跨平臺是怎麼一回事。

        C或者C++等高階語言,是貼近於人類可閱讀的語言,比較接近於英語語法。但是計算機只識別0、1序列組成的機器指令。所以要把C或者C++語言翻譯成計算機能識別的0、1序列組成的機器指令。擔任這種翻譯工作的就是“編譯程式”。問題在於,每一個平臺上認識的0、1序列並不一樣。某一個指令可能在Windows上可能是0101,但是在Linux下也許是1010,因此必須使用不能的編譯程式為不同平臺編譯出可執行的機器碼,在Windows上編譯好的程式,不能直接拿到Linux等其他平臺執行。也就是說用C或者C++語言編寫的程式,無法達到“編譯一次,到處執行”跨平臺性的目的。

        Java也是一種高階語言,要讓計算機執行你撰寫的Java程式,也得通過編譯程式的編譯。但是Java編譯程式並不直接將Java原始碼編譯為相依於計算機平臺的0、1序列,而是將其編譯為位元組碼。

        Java原始碼的副檔名為.java,經過編譯程式編譯之後生成副檔名為.class的位元組碼。如果想要執行位元組碼檔案,目標平臺必須要安裝JVM(java虛擬機器),JVM會將位元組碼翻譯為相依與平臺的計算機指令,即:0、1序列。但是一定要記著:不能的平臺要安裝專屬該平臺的JVM。這就好比你講中文(*.java),Java編譯程式幫你翻譯為英文(*.class),這份英文檔案到各個國家之後,再由當地看得懂英文的人(JVM)翻譯為當地語言(機器指令)。

        所以JVM擔任的職責之一就是當地翻譯員,將位元組碼檔案翻譯為當時平臺看得懂的0、1序列,有了JVM,你的Java程式就達到了“編譯一次到處執行”的跨平臺目的。所以到這裡。我們就知道了java程式跨平臺性好的根本原因就是java虛擬機器JVM存在的原因。

        對JVM的重要認知就是:

        對Java程式而言,只認識一種作業系統,這個系統就是JVM,位元組碼檔案(副檔名為.class的文件)就是JVM的可執行檔案。

        Java程式理想上,並不理會真正執行哪個平臺,只要知道如何執行於JVM就可以了,至於JVM實際上如何與底層平臺溝通,那是JVM自己的事。由於JVM實際上相當於Java程式的作業系統,JVM就負責了Java程式的各種資源管理。

        我們要記住兩點:

        1.      JVM就是Java程式的作業系統,JVM的可執行檔案就是.class檔案。

        2.      Java虛擬機器遮蔽了作業系統之間的差異,但是不同的系統使用的虛擬機器不同。


相關推薦

Java程式為何編譯到處執行

與其他語言相比,Java程式能夠做到“編譯一次,到處執行”,可見它的跨平臺性非常強。但是java的這種跨平臺到底是怎麼一回事啊,在這之前我們先了解一下不能跨平臺是怎麼一回事。         C或者C++等高階語言

Java程式為何編譯到處執行”?

         轉載地址:http://blog.csdn.net/Lilibaobei1314/article/details/34826783        與其他語言相比,Java程式能夠做到“編譯一次,到處執行”,可見它的跨平臺性非常強。但是java的這種跨

2018 年去百度面試 Java 後端的面試經歷

https 請求 遇到 net 簡歷 共享內存 targe 應對 部門 一,百度一面:### 1、給一個函數,返回 0 和 1,概率為 p 和 1-p,請你實現一個函數,使得返回 01 概率一樣。2、10 億個 url,每個 url 大小小於 56B,要求去重,內存 4G。

徹底解決Java的值傳遞和引用傳遞

信息 getter 數據類型 裝載 而已 訪問 實參 數據結構 修改 本文旨在用最通俗的語言講述最枯燥的基本知識 學過Java基礎的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎麽實際運用,有時候會的了運用卻解釋不出原理,而且坊間討論

[精]--這讓你徹底明白Java的值傳遞和引用傳遞!

本文旨在用最通俗的語言講述最枯燥的基本知識 學過Java基礎的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎麼實際運用,有時候會的了運用卻解釋不出原理,而且坊間討論的話題又是充滿爭議:有的論壇帖子說Java只有值傳遞,有的部落格說兩者皆有;這讓人有點摸不著頭

程式設計師又被黑了?網友:這是我見過被黑的最慘的沒有之一

1.這程式碼看的我一臉懵逼,直播寫程式碼月入百萬有沒有!!!   2.嘖嘖,身材好的女程式設計師上班坐姿是個問題   3.這個妹子是來面試C++的,我要錄取他嗎?線上等!!!   4.不過女程式設計師優勢也是很明顯的,如下圖,哈

這是歷史上程式設計師被黑的最慘的原諒我發出了殺豬般的笑聲!

  程式設計師這個職業,幾乎所有人都知道他們是幹什麼的,而幾乎所有人又都不知道他們是幹什麼的。有招黑的群眾基礎。(你看產品經理什麼的就沒有吧) 其實程式設計師被黑也就是他們自己無聊時候的自黑,誰沒事去黑程式設計師啊!本文僅供大家娛樂,開心就好了,不要太在意! 前方高冷,老司機握

程式設計師被黑的最慘的網友:笑死肚子疼!

那些號稱自己有一個想法,只差程式設計師就能誕生一個改變世界(其中一撮人是想改變自己,坐豪車,泡美女)的產品的人,等同於單身已久的人想找一個漂亮女人生小孩。 我覺的黑程式設計師這種現象,這些多半都是這個職業群體內的自嘲吧,其實完全不用在意,每個行業都會有混得好和混得慘的人,認識的幾位程式設計師都是

轉importnew阿里面試回來想和 Java 程式設計師談談(職業學習規劃參考)

(點選上方公眾號,可快速關注) 引言 其實本來真的沒打算寫這篇文章,主要是LZ得記憶力不是很好,不像一些記憶力強的人,面試完以後,幾乎能把自己和麵試官的對話都給記下來。LZ自己當初面試完以後,除了記住一些聊過的知識點以外,具體的內容基本上忘得一乾二淨,所以寫這篇文章其實是很有難度的。 但是

阿里面試回來想和Java程式設計師談

引言        其實本來真的沒打算寫這篇文章,主要是LZ得記憶力不是很好,不像一些記憶力強的人,面試完以後,幾乎能把自己和麵試官的對話都給記下來。LZ自己當初面試完以後,除了記住一些聊過的知識點以外,具體的內容基本上忘得一乾二淨,所以寫這篇文章其實是很有難度的。        但是,最近問LZ的人

一個整數陣列中有兩個元素只出現其他所有元素均出現兩。 找出只出現的那兩個元素。(java實現)

一個整數陣列中,有兩個元素只出現一次,其他所有元素均出現兩次。 找出只出現一次的那兩個元素。 思路大概是這樣的:因為除了這兩個只出現一次的數字外,其餘都是成對出現的,有一種運算子,異或運算,兩個相同的數字異或之後為0,所以將陣列中所有的數字依次異或,結果就是這個兩個支出現一

2018 年去騰訊面試 Java 後端的面試經歷

一,騰訊一面: 1、給一個函式,返回 0 和 1,概率為 p 和 1-p,請你實現一個函式,使得返回 01 概率一樣。 2、10 億個 url,每個 url 大小小於 56B,要求去重,記憶體 4G。 3、把一個 bst 轉化成一個雙向連結串列。 4

C#程式在一個終端中只允許開啟防止多開啟

using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; names

我連 web.xml 都不要了Java 搭建 SSM 環境!

在 Spring Boot 專案中,正常來說是不存在 XML 配置,這是因為 Spring Boot 不推薦使用 XML ,注意,並非不支援,Spring Boot 推薦開發者使用 Java 配置來搭建框架,Spring Boot 中,大量的自動化配置都是通過 Java 配置來實現的,這一套實現方案,我們也可

我連 web.xml 都不要了Java 搭建 SSM 環境

在 Spring Boot 專案中,正常來說是不存在 XML 配置,這是因為 Spring Boot 不推薦使用 XML ,注意,

49.按鈕只能單擊鼠標事件

down html size src 嵌入 sna gif mouse utf 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF

服務器壽命周期內只會關機為什麽能夠長時間持續工作而不宕機?

電源 以及 商業 硬件 著名 使用方式 導致 性能問題 故障 首先,服務器能夠長時間持續的工作是和其硬件架構及使用環境相關的。 排名第一中提到的火星探測器其實使用的也是IBM P series服務器,並且在探測器裏搭載了兩臺,以實現HA冗余。 生活中的商用服務器為了能夠

五年java開發生涯中吐血的項目救火(程序員何苦難為程序員)

java 架構 我現在就職於一家中型的互聯網企業,去年年底入職的薪資和待遇都很不錯,但是總結起來說的好聽就是全村人的希望,說的不好聽就是一個人幾乎幹了一個項目組的事。下面是我的一次項目救火經歷(背鍋經歷)。就是年後的一個合作公司上線了一個子業務系統,對接公司內部的單點系統。我收到該公司的技術咨詢:項目

python單例模式控制成只初始化常規型的python單例模式在新式類和經典類中的區別。

spa alt let __main__ python2 urn 時間 div 分享 單例模式的寫法非常多,但常規型的單例模式就是這樣寫的,各種代碼可能略有差異,但核心就是要搞清楚類屬性 實例屬性,就很容易寫出來,原理完全一模一樣。 如下: 源碼: class