4.Java語言執行機制基礎——JVM
Java引進Java虛擬機器技術,針對不同的平臺,完全由軟體模擬或由軟體和硬體共同模擬,實現一臺虛擬的計算機。在Java中引入了虛擬機器的概念,即在機器和編譯器之間加入了一層抽象的虛擬的機器。
這臺虛擬的機器在任何平臺上都提供給編譯器一個共同的介面。編譯器只需要面向虛擬機器,生成虛擬機器能夠理解的程式碼,然後由直譯器來執行。在一些JVM實現中,還可能會將虛擬機器程式碼轉換為特定系統的機器碼執行,以提高執行的效率。在Java中,這種供虛擬機器理解的程式碼叫做位元組碼(ByteCode),它不面向任何特定的處理器,只面向虛擬機器。每一種平臺的直譯器是不同的,但是實現的虛擬機器是相同的。Java源程式經過編譯器編譯後變成位元組碼,位元組碼由虛擬機器解釋執行,虛擬機器將每一條要執行的位元組碼送給直譯器, 直譯器將其翻譯成特定機器上的機器碼,然後在特定的機器上執行。
可以說,Java虛擬機器是Java語言的基礎。它是Java技術的重要組成部分。Java虛擬機器是一個抽象的計算機,和實際的計算機一樣,它具有一個指令集並使用不同的儲存區域。它負責執行指令,還要管理資料、記憶體和暫存器。Java直譯器負責將位元組程式碼翻譯成特定機器的機器程式碼。
Sun公司制定的Java虛擬機器規範在技術上規定了JVM的統一標準,具體定義了JVM的下述細節:
指令集(中央處理器[CPU])
暫存器
類檔案格式
棧
垃圾收集堆
儲存區
制定這些的目的是為了提供一種統一的編譯Java原始碼的規範,最終實現Java軟體的平臺無關性。因為編譯生成的位元組碼檔案是針對JVM的,是平臺無關的。接下來,任何不同的時間或場合下,都可以在JVM上採用Java執行時直譯器解釋執行該位元組碼檔案,也就是由JVM將位元組碼指令解釋為特定平臺的機器碼指令並執行。在這一過程中,JVM起到翻譯的作用,針對不同平臺,開發不同的JVM就好比多個翻譯將一份某種語言的作品分別翻譯成不同的語言版本,達到資訊交流的目的。