Java虛擬機器Java虛擬機器(Java virtual machine,JVM)是運行Jav才程式必不可少的機制。編譯後的Java程式指令並不直接在硬體系統的CPIJ上執行,而是由JVM執行。JVM是編譯後的Java程式和硬體系統之間的介面,程式員可以把JVM看作一個虛擬處理器。它不僅解釋執行編譯後的Java指令,而且還進行安全檢查。它是Java程式能在多平台間進行無縫移植的可靠保證,同時也是Java程式的安全檢驗引擎。
Java虛擬機器規範中給出了JVM的定義:JVM是在一台真正的機器上用軟體方式實現的一台假想機。JVM使用的代碼儲存在。class檔案中。JVM的某些指令很像真正的CPU指令,包括算術運算、流量控制和數組元素訪問等。
Java虛擬機器規範提供了編譯所有Java代碼的硬體平台。因為編譯是針對假想機的,所以該規範能讓Java程式獨立於平台。它適用於每個具體的硬體平台,以保證為JVM編譯的代碼的運行。JVM不但可以用軟體實現,而且可以用硬體實現。
JVM的具體實現包括:指令集(等價於CPIJ的指令集)、寄存器組、類檔案格式、棧、垃圾收集堆、記憶體區。
JVM的代碼格式為壓縮的位元組碼,因而效率較高。由JVM位元組碼錶示的程式必須保持原來的類型規定。Java主要的類型檢查是在編譯時間由位元組碼校正器完成的。Java的任何解譯器必須能執行符合JVM定義的類檔案格式的任何類檔案。
Java虛擬機器規範對運行時資料區域的劃分及位元組碼的最佳化並不做嚴格的限制,它們的實現依平台的不同而有所不同。JVM的實現叫做Java運行時系統,簡稱為運行時。Java運行時必須遵從Java虛擬機器規範,這樣,Java編譯器產生的類檔案才可被所有Java運行時系統下載。嵌入了Java運行時系統的應用程式,就可以執行Java程式了。目前有許多作業系統和瀏覽器都嵌入了Java運行時環境。
Java虛擬機器的效能Java在問世之初,因其沒有完全最佳化,並且是解釋執行,因此Java程式的運行效率較低。同時,有著較長發展史、已非常成熟的C+十語言仍在開發界扮演著主要角色,人們往往拿C++的效能效率與剛誕生的Java相比較,這當然失之偏頗。
Java解譯器經過不斷的最佳化,位元組碼的執行速度已有很大提高。另外,在位元組碼執行之前可以先經過JIT編譯器(just in time compiler)進行編譯,產生針對具體平台的本機執行代碼。它的執行效率可比解釋執行的效率提高4~8倍。現在許多廠商都提供JlT編譯器,這項技術已非常成熟。由於位元組碼與平台無關,所以經過編澤的Java仍不失跨平台的特點。
Hotspot技術是Sun公司推出的一種全新技術。它提供對代碼的運行時選擇,為的是從根本上解決Java程式的效率問題。在程式執行時,Hotspot對每個位元組碼指令進行分析,根據它的執行次數,動態決定它的執行方式。比如,一段指令需要多次重複執行,則立即編譯為可執行代碼。如果是只執行一次的簡單指令,且解釋執行的效率更高,則使用解釋執行的方式。有了這項技術,Javal的效率問題基本上可以得到解決。