1.3.2 java程式的運行機制和jvm

來源:互聯網
上載者:User

標籤:

        java語言比較特殊,由java語言編寫的程式需要經過編譯步驟,但這個編譯步驟並不會產生特定平台的機器碼,而是產生一種與平台無關的位元組碼(也就是*.class檔案)。當然,這種位元組碼不是可執行性的,必須使用java解譯器來解釋執行。因此,我們可以認為:java語言既是編譯型語言,也是解釋型語言。或者說,java語言既不是純粹的編譯型語言,也不是純粹的解釋型語言。java程式的執行過程必須經過先編譯,後解釋兩個步驟。1.1所示。

        java語言裡負責解釋執行位元組碼檔案的是java虛擬機器,既 JVM(java Virtual Machine)。JVM是可運行java位元組碼檔案的虛擬電腦。所有平台上的JVM向編譯器提供相同的編程介面,而編譯器只需要面向虛擬機器,產生虛擬機器能理解的代碼,然後由虛擬機器來解釋執行,在一些虛擬機器的實現中,還會將虛擬機器代碼轉換成特定系統的機器碼執行,從而提高執行效率。

        當使用 java 編譯器編譯java程式時,產生的是與平台無關的位元組碼,這些位元組碼不面向任何具體平台,只面向JVM。不同平台上的JVM都是不同的,但他們都提供了相同的介面。JVM 是java程式跨平台的關鍵區段,只要為不同平台實現了相應的虛擬機器,編譯後的java位元組碼就可以在該平台上運行。顯然,相同的位元組碼程式需要再不同的平台上運行,這幾乎是“不可能的”,只有通過中間的轉換器才可以實現,JVM就是這個轉換器。

        JVM是一個抽象的電腦,和實際的電腦一樣,它具有指令集並使用不同的儲存地區。它負責執行指令,還要管理資料、記憶體和寄存器。

        提示:JVM的作用很容易理解,就像我們有兩支不同的筆,但需要把同一個筆帽套在兩支不同的筆上,只有為這兩支筆分別提供一個轉換器,這個轉換器向上的介面相同,用於適應同一個筆帽;向下的介面不同,用於適應兩支不同的筆。在這個類比中,我們可以近似地理解兩隻不同的筆就是不同的作業系統,而同一個筆帽就是java位元組碼程式,轉換器角色則對應JVM。類似地,我們也可以認為JVM分為向上和向下兩個部分,所有平台上的JVM向上提供給java位元組碼程式的介面完全相同,但向下適應不同平台的介面則互不相同。

        Sun公司制定的 java 虛擬機器規範在技術上規定了JVM的統一標準,具體定義了JVM的如下細節:

  • 指令集

  • 寄存器

  • 類檔案的格式

  • 記憶體回收堆

  • 儲存區

        Sun公司制定這些規範的目的是為了提供統一的標準,最終實現java程式的平台無關性。


1.3.2 java程式的運行機制和jvm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.