一、Java體系結構
Java體系結構包括四個獨立但相關的技術:
- Java程序設計語言
- Java class文件格式
- Java應用編程接口(API)
- Java虛擬機
二、Java虛擬機
Java虛擬機是Java的面向網絡的核心,它支持Java面向網絡體系結構三大支柱的所有方面:平臺無關性,安全性和網絡移動性。Java虛擬機的主要任務是裝載class文件并且執行其中的字節碼。classloader負責裝載class文件,執行引擎負責執行字節碼。
執行引擎
由于Java虛擬機規范只定義了每個虛擬機都必須實現的特性,沒有規定具體的實現方法,因此不同的Java虛擬機,執行引擎可能實現的非常不同,一般來說有如下幾種實現方法:
- 一次性解釋字節碼。
- 即時編譯器(just-in-time compiler),這種情況下,第一次被執行的字節碼會被編譯成本地機器代碼,編譯出的本地機器代碼會被緩存,當方法以后被調用的時候可以重用。
- 自適應優化器,這種情況下,虛擬機開始的時候解釋字節碼,但是會監視運行中程序的活動,并且記錄下使用頻繁的代碼段,程序運行的時候,虛擬機只會把那些活動最頻繁的代碼編譯成本地版本,其他仍舊保留字節碼--由虛擬機繼續解釋它們。一個自適應的優化器可以使得Java虛擬機在80%-90%的時間里執行被優化過的本地代碼。
- 由硬件芯片構成,由本地方法執行Java字節碼,實際上這種實現是把執行引擎內嵌在芯片里。
Classloader
一個java應用程序可以有兩種類裝載器:啟動類裝載器(bootstrap)和用戶定義的類裝載器,啟動類裝載器是唯一的,它屬于Java虛擬機實現的一部分。
每一個類裝載器都有它自己的命名空間,一個類只能”看到“由同一個類裝載器裝載的其他類,不能跨命名空間訪問。
用過允許實例化用戶自定義的類裝載器(該類裝載器知道如何從網絡下載class文件),Java類裝載器的體系結構提供了對網絡移動性的支持;通過允許使用不同的用戶定義的類裝載器裝載不同來源的class文件,Java類裝載器的體系結構提供了對完全性的支持。