類加載流程

當程序使用某個類時,如果該類還未被加載到內存中,則JVM會通過加載、鏈接、初始化三個步驟對該類進行類加載。
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、類的初始化
    類的初始化階段,虛擬機主要對類變量進行初始化。虛擬機調用< clinit>方法,進行類變量的初始化。
    
    java類中對類變量進行初始化的兩種方式:
        在定義時初始化
        在靜態初始化塊內初始化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章