JVM檢視原始碼討論檢視歷史
JVM |
JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用於計算設備的規範,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。引入Java語言虛擬機後,Java語言在不同平台上運行時不需要重新編譯。Java語言使用Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平台上不加修改地運行。
簡介
Java虛擬機有自己完善的硬件架構,如處理器、堆棧等,還具有相應的指令系統。Java虛擬機本質上就是一個程序,當它在命令行上啟動的時候,就開始執行保存在某字節碼文件中的指令。Java語言的可移植性正是建立在Java虛擬機的基礎上。任何平台只要裝有針對於該平台的Java虛擬機,字節碼文件(.class)就可以在該平台上運行。這就是「一次編譯,多次運行」。Java虛擬機不僅是一種跨平台的軟件,而且是一種新的網絡計算平台。該平台包括許多相關的技術,如符合開放接口標準的各種API、優化技術等。Java技術使同一種應用可以運行在不同的平台上。Java平台可分為兩部分,即Java虛擬機(Java virtual machine,JVM)和Java API類庫。每個Java程序都離不開Java虛擬機,Java程序的運行依靠具體的Java虛擬機實例。在Java虛擬機規範中,分別用子系統、內存區、數據類型以及指令這幾個術語來描述的。這些組成部分一起展示出一個抽象化的虛擬機內部的抽象體系結構。Java虛擬機主要分為五大模塊:類裝載器子系統、運行時數據區、執行引擎、本地方法接口和垃圾收集模塊。其中垃圾收集模塊在Java虛擬機規範中並沒有要求Java虛擬機垃圾收集,但是在沒有發明無限的內存之前,大多數JVM實現都是有垃圾收集的。而運行時數據區都會以某種形式存在於每一個JAVA虛擬機實例中,但是Java虛擬機規範對它的描述卻是相當抽象。這些運行時數據結構上的細節,大多數都由具體實現的設計者決定。Java虛擬機不是真實的物理機,它沒有寄存器,所以指令集是使用Java棧來存儲中間數據,這樣做的目的就是為了保持Java虛擬機的指令集儘量的緊湊,同時也便於JAVA虛擬機在那些只有很少通用寄存器的平台上實現。另外,JAVA虛擬機的這種基於棧的體系結構,有助於運行時某些虛擬機實現的動態編譯器和即時編譯器的代碼優化。
評價
Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機後,Java語言在不同平台上運行時不需要重新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行字節碼時,把字節碼解釋成具體平台上的機器指令執行。[1]