久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      jvm類加載過程有哪些階段

      類加載過程:1、加載階段;2、驗證階段;3、準(zhǔn)備階段,主要是將類變量在方法區(qū)進(jìn)行內(nèi)存分配并進(jìn)行初始化;4、解析階段;5、初始化階段,編譯器會將類文件聲明的靜態(tài)賦值變量和靜態(tài)區(qū)域合并生成cinit方法并進(jìn)行調(diào)用;6、使用階段;7、卸載階段。

      jvm類加載過程有哪些階段

      本教程操作環(huán)境:windows7系統(tǒng)、java8版、DELL G3電腦。

      理解JVM的類加載過程,主要要回答兩個問題:

      1、類在什么時候被加載。

      2、類是怎樣被加載的。

      jvm類加載過程有哪些階段

      一、觸發(fā)類加載的條件:

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

      1、遇到new、getstatic、putstatic、invokestatic這四條指令時,如果類沒有被初始化,則首先對類進(jìn)行初始化。

      2、使用java.lang.reflect包的方法對類進(jìn)行反射調(diào)用時,若類沒有進(jìn)行初始化,則觸發(fā)其初始化。

      3、當(dāng)初始化一個類時假如該類的父類沒有進(jìn)行初始化,首先觸發(fā)其父類的初始化。

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

      5、當(dāng)使用Jdk1.7的動態(tài)語言支持時,如果一個java.lang.invoke.MethodHandle實例最后的解析結(jié)果REF_getstatic、REF_putstatic、REF_inokestatic的方法句柄,并且這個方法句柄所對應(yīng)的類沒有進(jìn)行初始化時,觸發(fā)該類初始化。

      二、類加載過程

      類加載過程主要分為七個階段:加載、驗證、準(zhǔn)備、解析、初始化、使用、卸載。

      1、加載:

      1)、通過一個類的全限定名加載該類對應(yīng)的二進(jìn)制字節(jié)流。主要通過類加載器實現(xiàn)。

      2)、將字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運行時數(shù)據(jù)結(jié)構(gòu)。

      3)、在內(nèi)存中生成一個代表這個類的java.lang.Class對象,作為方法區(qū)各個類訪問該類的入口。(Hotspot 在方法區(qū)生成該類)。

      2、驗證:

      1)、文件格式驗證:驗證類文件的魔術(shù)版本號常量等是否符合當(dāng)前虛擬機支持的范圍。

      2)、元數(shù)據(jù)驗證:驗證類的語義信息,是否符合java語言規(guī)范的要求。

      3)、字節(jié)碼驗證:驗證程序語義是合法的、合乎規(guī)范的。主要通過stackmapframe結(jié)構(gòu)。

      4)、符號引用驗證:虛擬機在將符號引用轉(zhuǎn)化為直接引用,驗證符號引用全限定名代表的類是否能夠找到,對應(yīng)的域和方法是否能找到,訪問權(quán)限是否合法。

      3、準(zhǔn)備:

      準(zhǔn)備階段主要是將類變量(被static修飾符修飾)在方法區(qū)進(jìn)行內(nèi)存分配并進(jìn)行初始化。

      數(shù)據(jù)類型 零值 數(shù)據(jù)類型 零值
      int 0 boolean false
      long 0L float 0.0f
      short 0 double 0.0d
      char 'u0000' reference null
      byte 0

      4、解析:

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

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

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

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

      5、初始化:

      初始化階段編譯器會將類文件聲明的靜態(tài)賦值變量和靜態(tài)區(qū)域合并生成<cinit>方法并進(jìn)行調(diào)用。

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

      雙親委派模型:

      jvm類加載過程有哪些階段

      1、Bootstrap ClassLoader 啟動類加載器,負(fù)責(zé)加載<JAVA_HOME>/lib/rt.jar.

      2、Extension ClassLoader 拓展類加載器,負(fù)責(zé)加載<JAVA_HOME>/lib/ext底下的包

      3、Application ClassLoader 應(yīng)用類加載器,負(fù)責(zé)加載CLASSPATH路徑下的JAVA類庫。

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

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

      相關(guān)視頻教程推薦:Java視頻教程

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號