1.3.2 java程序的運行機制和jvm

        java語言比較特殊,由java語言編寫的程序須要通過編譯步驟,但這個編譯步驟並不會生成特定平臺的機器碼,而是生成一種與平臺無關的字節碼(也就是*.class文件)。固然,這種字節碼不是可執行性的,必須使用java解釋器來解釋執行。所以,咱們能夠認爲:java語言既是編譯型語言,也是解釋型語言。或者說,java語言既不是純粹的編譯型語言,也不是純粹的解釋型語言。java程序的執行過程必須通過先編譯,後解釋兩個步驟。如圖1.1所示。java

        java語言裏負責解釋執行字節碼文件的是java虛擬機,既 JVM(java Virtual Machine)。JVM是可運行java字節碼文件的虛擬計算機。全部平臺上的JVM向編譯器提供相同的編程接口,而編譯器只須要面向虛擬機,生成虛擬機能理解的代碼,而後由虛擬機來解釋執行,在一些虛擬機的實現中,還會將虛擬機代碼轉換成特定系統的機器碼執行,從而提升執行效率。
編程

        當使用 java 編譯器編譯java程序時,生成的是與平臺無關的字節碼,這些字節碼不面向任何具體平臺,只面向JVM。不一樣平臺上的JVM都是不一樣的,但他們都提供了相同的接口。JVM 是java程序跨平臺的關鍵部分,只要爲不一樣平臺實現了相應的虛擬機,編譯後的java字節碼就能夠在該平臺上運行。顯然,相同的字節碼程序須要再不一樣的平臺上運行,這幾乎是「不可能的」,只有經過中間的轉換器才能夠實現,JVM就是這個轉換器。
spa

        JVM是一個抽象的計算機,和實際的計算機同樣,它具備指令集並使用不一樣的存儲區域。它負責執行指令,還要管理數據、內存和寄存器。
操作系統

        提示:JVM的做用很容易理解,就像咱們有兩支不一樣的筆,但須要把同一個筆帽套在兩支不一樣的筆上,只有爲這兩支筆分別提供一個轉換器,這個轉換器向上的接口相同,用於適應同一個筆帽;向下的接口不一樣,用於適應兩支不一樣的筆。在這個類比中,咱們能夠近似地理解兩隻不一樣的筆就是不一樣的操做系統,而同一個筆帽就是java字節碼程序,轉換器角色則對應JVM。相似地,咱們也能夠認爲JVM分爲向上和向下兩個部分,全部平臺上的JVM向上提供給java字節碼程序的接口徹底相同,但向下適應不一樣平臺的接口則互不相同。
接口

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

  • 指令集編譯器

  • 寄存器虛擬機

  • 類文件的格式it

  • 編譯

  • 垃圾回收堆

  • 存儲區

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

相關文章
相關標籤/搜索