類載入流程,類載入機制及自定義類載入器

piny發表於2021-09-09

1、載入

類載入指的是將類的class檔案讀入記憶體,併為之建立一個java.lang.Class物件。類的載入過程是由類載入器來完成,類載入器由JVM提供。我們開發人員也可以透過繼承ClassLoader來實現自己的類載入器。

1.1、載入的class來源
  • 從本地檔案系統內載入class檔案

  • 從JAR包載入class檔案

  • 透過網路載入class檔案

  • 把一個java原始檔動態編譯,並執行載入。

2、類的連結

透過類的載入,記憶體中已經建立了一個Class物件。連結負責將二進位制資料合併到 JRE中。連結需要透過驗證、準備、解析三個階段。

2.1、驗證

驗證階段用於檢查被載入的類是否有正確的內部結構,並和其他類協調一致。即是否滿足java虛擬機器的約束。

2.2、準備

類準備階段負責為類的類變數分配記憶體,並設定預設初始值。

2.3、解析

我們知道,引用其實對應於記憶體地址。思考這樣一個問題,在編寫程式碼時,使用引用,方法時,類知道這些引用方法的記憶體地址嗎?顯然是不知道的,因為類還未被載入到虛擬機器中,你無法獲得這些地址。

舉例來說,對於一個方法的呼叫,編譯器會生成一個包含目標方法所在的類、目標方法名、接收引數型別以及返回值型別的符號引用,來指代要呼叫的方法。

解析階段的目的,就是將這些符號引用解析為實際引用。如果符號引用指向一個未被載入的類,或者未被載入類的欄位或方法,那麼解析將觸發這個類的載入(但未必會觸發解析與初始化)。

3、類的初始化

類的初始化階段,虛擬機器主要對類變數進行初始化。虛擬機器呼叫方法,進行類變數的初始化。

java類中對類變數進行初始化的兩種方式:

  1. 在定義時初始化

  2. 在靜態初始化塊內初始化


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3034/viewspace-2797886/,如需轉載,請註明出處,否則將追究法律責任。

相關文章