搜尋
首頁JavaJava基礎jvm類別載入過程有哪些階段

類別載入過程:1、載入階段;2、驗證階段;3、準備階段,主要是將類別變數在方法區進行記憶體分配並進行初始化;4、解析階段;5、初始化階段,編譯器會將類別檔案宣告的靜態賦值變數和靜態區域合併產生cinit方法並進行呼叫;6、使用階段;7、卸載階段。

jvm類別載入過程有哪些階段

本教學操作環境:windows7系統、java8版、DELL G3電腦。

瞭解JVM的類別載入過程,主要要回答兩個問題:

1、類別在什麼時候被載入。

2、類別是怎麼載入的。

jvm類別載入過程有哪些階段

一、觸發類別載入的條件:

類別的載入過程主要分為七個階段:載入、驗證、準備、解析、初始化、使用、卸載;載入、驗證、準備、初始化、卸載這五個過程順序是確定的,jvm必須嚴格按照這個順序執行,jvm沒有規定類別載入的時機,但卻嚴格規定了五種情況下必須立即對類別進行初始化,載入自然要在此之前。

1、遇到new、getstatic、putstatic、invokestatic這四個指令時,如果類別沒有被初始化,則先對類別進行初始化。

2、使用java.lang.reflect套件的方法對類別進行反射呼叫時,若類別沒有進行初始化,則觸發其初始化。

3、初始化一個類別時假如該類別的父類別沒有進行初始化,首先觸發其父類別的初始化。

4、執行JVM必須指定一個含有main方法的主類,虛擬機會先初始化這個類別。

5、當使用Jdk1.7的動態語言支援時,如果一個java.lang.invoke.MethodHandle實例最後的解析結果REF_getstatic、REF_putstatic、REF_inokestatic的方法句柄,並且這個方法句柄所對應的類別沒有進行初始化時,觸發該類別初始化。

二、類別載入過程

類別載入過程主要分為七個階段:載入、驗證、準備、解析、初始化、使用,解除安裝.

1、載入:

1)、透過一個類別的全限定名稱載入該類別對應的二進位位元組流。主要透過類別載入器實作。

2)、將位元組流所代表的靜態儲存結構轉換為方法區的執行時間資料結構。

3)、在記憶體中產生一個代表這個類別的java.lang.Class對象,作為方法區各個類別存取該類別的入口。 (Hotspot 在方法區產生該類別)。

2、驗證:

1)、檔案格式驗證:驗證類別檔案的魔術版本號常數等是否符合目前虛擬機器支援的範圍。

2)、元資料驗證:驗證類別的語意訊息,是否符合java語言規範的要求。

3)、字節碼驗證:驗證程式語意是合法的、合乎規範的。主要透過stackmapframe結構。

4)、符號引用驗證:虛擬機器在將符號引用轉換為直接引用,驗證符號引用全限定名代表的類別是否能夠找到,對應的域和方法是否能找到,存取權限是否合法。

3、準備:

準備階段主要是將類別變數(被static修飾子修飾)在方法區進行記憶體分配並進行初始化。

資料型別 零值 資料型別 零值
#int 0 boolean #false
long
#long 0L float 0.0f
#short 0 #double #0.0d
char '\u0000' #reference #null
byte# #####0###### ###### #############

4、解析:

1)、類別或介面解析:將符合參考轉換為類別的直接引用,並檢查存取權限。

2)、欄位解析:將欄位的符號引用轉換為欄位所屬的類別資訊或其父類別該欄位的直接引用,並檢查存取權限。

3)、類別方法解析:將類別方法的符號引用轉換為類別方法所屬的類別資訊或其父類別該欄位的直接引用,並檢查存取權限。

4)、介面方法解析:將介面方法的符號引用轉換為介面方法所屬的介面資訊或其父類別該欄位的直接引用,並檢查存取權限。

5、初始化:

初始化階段編譯器會將類別檔案宣告的靜態賦值變數和靜態區域合併產生方法並進行呼叫。

類別載入器:類別載入器是「透過一個類別的全限定名載入這個類別的二進位位元組流」的實現,對於任何一個類,都是由類別載入器和該類別的本身共同確定在虛擬機器中的唯一性。

雙親委派模型:

jvm類別載入過程有哪些階段

1、Bootstrap ClassLoader 啟動類別載入器,負責載入/lib/rt.jar.

2、Extension ClassLoader 拓展類別載入器,負責載入/lib/ext底下的套件

3、Application  ClassLoader 應用類別載入器,負責載入CLASSPATH路徑下的JAVA類別庫。

4、User ClassLoader 使用者自訂的類別載入器。

雙親委託模型採用這樣的方式載入類別:當類別載入器收到載入類別請求時,首先委託父類別載入該類,所有類別載入器都採用這種方式,因此所有類別載入請求都會到達頂層父類,父類載入不到時再使用該類別載入器中載入。這樣,類別載入器之間就有了一種層級關係,能夠保證Java的基礎類別由相同的類別載入器加載,對Java系統的穩定性起到至關重要的作用。

相關影片教學推薦:Java影片教學

#

以上是jvm類別載入過程有哪些階段的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Java中有哪些不同的垃圾收集算法(串行,並行,CMS,G1,ZGC)?Java中有哪些不同的垃圾收集算法(串行,並行,CMS,G1,ZGC)?Mar 14, 2025 pm 05:06 PM

本文討論了各種Java垃圾收集算法(串行,並行,CMS,G1,ZGC),它們的性能影響和適合大量堆的應用。

什麼是Java虛擬機(JVM),它在內部如何工作?什麼是Java虛擬機(JVM),它在內部如何工作?Mar 14, 2025 pm 05:05 PM

本文討論了Java虛擬機(JVM),詳細介紹了其在不同平台運行Java程序中的作用。它說明了JVM的內部流程,密鑰組件,內存管理,垃圾收集和性能Optimizatio

如何使用Java的Nashorn Engine用JavaScript腳本?如何使用Java的Nashorn Engine用JavaScript腳本?Mar 14, 2025 pm 05:00 PM

Java的Nashorn Engine可以在Java應用程序中啟用JavaScript腳本。關鍵步驟包括設置Nashorn,管理腳本和優化性能。主要問題涉及安全性,內存管理和未來兼容性

如何使用Java的Try-with-Resources語句進行自動資源管理?如何使用Java的Try-with-Resources語句進行自動資源管理?Mar 14, 2025 pm 04:59 PM

Java的Try-with-Resources通過自動關閉文件流或數據庫連接等資源來簡化資源管理,從而提高代碼可讀性和可維護性。

如何使用Java的枚舉來表示固定的值集?如何使用Java的枚舉來表示固定的值集?Mar 14, 2025 pm 04:57 PM

Java枚舉代表固定的值集,通過自定義方法和構造函數提供類型安全性,可讀性和其他功能。它們增強了代碼組織,可用於開關語句中以進行有效的價值處理。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境