站長資訊網
        最全最豐富的資訊網站

        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 0L float 0.0f
        short 0 double 0.0d
        char 'u0000' reference null
        byte 0

        4、解析:

        1)、類或接口解析:將符合引用轉化為類的直接引用,并檢查訪問權限。

        2)、字段解析:將字段的符號引用轉化為字段所屬的類信息或其父類該字段的直接引用,并檢查訪問權限。

        3)、類方法解析:將類方法的符號引用轉化為類方法所屬的類信息或其父類該字段的直接引用,并檢查訪問權限。

        4)、接口方法解析:將接口方法的符號引用轉化為接口方法所屬的接口信息或其父類該字段的直接引用,并檢查訪問權限。

        5、初始化:

        初始化階段編譯器會將類文件聲明的靜態賦值變量和靜態區域合并生成<cinit>方法并進行調用。

        類加載器:類加載器是“通過一個類的全限定名加載這個類的二進制字節流”的實現,對于任何一個類,都是由類加載器和該類的本身共同確定在虛擬機中的唯一性。

        雙親委派模型:

        jvm類加載過程有哪些階段

        1、Bootstrap ClassLoader 啟動類加載器,負責加載<JAVA_HOME>/lib/rt.jar.

        2、Extension ClassLoader 拓展類加載器,負責加載<JAVA_HOME>/lib/ext底下的包

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

        4、User ClassLoader 用戶自定義的類加載器。

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

        相關視頻教程推薦:Java視頻教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲综合欧美精品一区二区| 人妻少妇乱子伦精品| 欧美精品一区二区三区免费| 91精品国产综合久久精品| 午夜三级国产精品理论三级 | 国产午夜精品理论片久久影视| 国产综合成人色产三级高清在线精品发布 | 精品国产福利盛宴在线观看| 国产a精品视频| 久久精品人人槡人妻人人玩AV| 亚洲国产精品人人做人人爱| 久久国产精品波多野结衣AV| 99久久99久久精品国产| 国产精品欧美日韩| 国产成人亚洲精品青草天美 | 亚洲级αV无码毛片久久精品| 国内精品久久久久久不卡影院| 一本一道久久精品综合| 国产伦精品一区二区三区女| 91精品国产91久久综合| 亚洲精品无码国产| 中国精品18videosex性中国| 四虎成人精品| 久久精品国产黑森林| 国产欧美精品专区一区二区| 国产高清国内精品福利99久久| 中文字幕精品视频| 国产91精品黄网在线观看| 91午夜精品亚洲一区二区三区| 91人妻人人澡人人爽人人精品| 99热这里只有精品6国产免费| 2021国产精品视频网站| 四虎4hu永久免费国产精品| 色综合久久精品中文字幕首页| 999久久久国产精品| 国产精品成| 精品久久久无码中文字幕| 精品视频在线观看你懂的一区| 久久精品亚洲男人的天堂 | 国产精品免费久久久久影院 | 国产高清在线精品一区二区|