天天看點

java語言的運作機制_java語言的運作機制如何?

1、  計算機進階程式設計語言按其程式的執行方式可分為編譯型語言和解釋型語言。

編譯型語言:使用專門的編譯器,針對特定作業系統将源程式代碼一次性翻譯成計算機能識别的機器指令。例如C、C++

解釋型語言:使用專門的解釋器,将源程式代碼逐條地解釋成特定平台的機器指令,解釋一句執行一句。例如ASP、PHP

java既不是編譯型語言也不是解釋型語言,它是編譯型和解釋型語言的結合體。首先采用通用的java編譯器将java源程式編譯成為與平台無關的位元組碼檔案(class檔案),

然後由java虛拟機(JVM)對位元組碼檔案解釋執行。

注意:java位元組碼具有平台無關性、可以在各種不同系統平台中運作,但是需要有不同版本的java虛拟機,不同系統平台的java運作環境其java虛拟機是不一樣的。

2、 JVM

JVM是java位元組碼執行的引擎,為java程式的執行提供必要的支援,還能優化java位元組碼,使之轉換成效率更高的機器指令。程式員編寫的程式最終都要在JVM上執行,JVM

中類的裝載是由類加載器(ClassLoader)和它的子類來實作的。  ClassLoader是java運作時一個重要的系統元件,負責在運作時查找和裝入類檔案的類。

JVM屏蔽了與具體作業系統平台相關的資訊,進而實作了java程式隻需生成在JVM上運作的位元組碼檔案(class檔案),就可以在多種平台上不加修改地運作。不同平台對應着

不同的JVM,在執行位元組碼時,JVM負責将每一條要執行的位元組碼送給解釋器,解釋器再将其翻譯成特定平台環境的機器指令并執行。java語言最重要的特點就是跨平台運作,使

用JVM就是為了支援與作業系統無關,實作跨平台運作。

2.1 ClassLoader

ClassLoader是JVM實作的一部分。ClassLoader包括bootstrap classloader(啟動類加載器),ClassLoader在JVM運作的時候加載java核心的API,通過java程式實作

兩個ClassLoader:一個是ExtClassLoader,它的作用是用來加載java的擴充API,也就是lib\ext類;第二個是AppClassLoader,用來加載使用者機器上CLASSPATH設定目錄

中的Class.

ClassLoader加載流程:當運作一個程式的時候,JVM啟動,運作bootstrap classloader,該ClassLoader加載java核心API,然後調用ExtClassLoader加載擴充API,最

後AppClassLoader加載CLASSPATH目錄下定義的Class.

3、 JRE

JRE是java Runtime Environment,java運作時環境,它是java程式運作所必須的環境集合,主要由java虛拟機、java平台核心類和若幹支援檔案組成。其不包含開發工具、編

譯器、調試器以及其他工具。

在執行java程式的時候,作業系統會按照下面順序尋找JRE環境。

(1)先查找目前目錄下有沒有JRE

(2)再查找父目錄下有沒有JRE

(3)接着在環境變量PATH制定的路徑中查找JRE

(4)系統資料庫檢視CurrentVersion的鍵值指向哪個JRE

JRE自帶的基礎類庫主要在JRE\LIB\rt.jar檔案中。在程式運作時,JRE由ClassLoader(類加載器)負責查找和加載程式引用到的基類庫和其他類庫。基礎類庫,Classloader會

自動到rt.jar的位置;其他的類庫,ClassLoader在環境變量CLASSPATH制定的路徑中搜尋。

4、JDK

JDK是Java Development Kit,簡稱java開發工具包。

JDK是java的核心。它包括java運作環境、一堆java工具盒java基礎的類庫(rt.jar)。

JDK包含JRE的全部内容外,還包含開發者用以編譯、調試和運作java程式的工具。

JDK、JRE、JVM之間的關系:

JDK、JRE、JVM之間是包含關系。範圍由大到小依次為JDK、JRE、JVM。