国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JVM類加載機(jī)制

2019-11-14 23:21:35
字體:
供稿:網(wǎng)友
JVM類加載機(jī)制
    1. JVM類加載機(jī)制

      1. 目錄:

        1. JVM加載的過程

          1. 加載

            1. 為什么需要加載?

            2. 加載什么?

            3. 怎么加載?

              1. JVM加載類的工具

                1. 系統(tǒng)自帶工具

                  1. Bootstrap,根加載器(C++),程序員不可見

                  2. 擴(kuò)展類加載器(java),程序員可見

                  3. 系統(tǒng)加載器(Java),程序員可見

                2. 用戶自定義工具

            4. 加載的結(jié)果是什么?

          2. 連接

            1. 驗證『萬一要是用戶自己寫的加載器加載的.class文件不符合JVM規(guī)范怎么辦?--驗證之』

            2. 準(zhǔn)備『給類的靜態(tài)變量分配內(nèi)存,并且設(shè)置默認(rèn)值』/補(bǔ)充這邊是和變異期常量有關(guān)系嗎?

            3. 解析

          3. 初始化『JVM遇到6種情況的時候,就會初始化類,把用戶給的值賦值給對應(yīng)的變量』


    2. 為什么需要加載?--java程序經(jīng)過編譯成. class文件,再裝在到內(nèi)存里面(由classloader執(zhí)行),這樣才能執(zhí)行java程序

      1. 演示程序123456789101112131415161718package classloader;public class Singleton {//這邊的內(nèi)存圖是怎么畫的?自己里面創(chuàng)建自己是怎么回事?PRivate static Singleton singleton=new Singleton();public static int counter1;public static int counter2=0;private Singleton(){counter1++;counter2++;}public static Singleton getInstance(){return singleton;}}

      2. 12345678910package classloader;public class MyClass {public static void main(String[] args) {Singleton singleton=Singleton.getInstance();System.out.println("counter1-"+singleton.counter1);System.out.println("counter2-"+singleton.counter2);}}

      1. AWT,聊天程序中可以使用該方法


    3. 加載

      1. 加載什么?--class 文件從硬盤到內(nèi)存的遷移

        1. 也就是在堆區(qū)域創(chuàng)建一個Class類的對象『類的名稱是Class』

        2. Class對象是JVM在加載對應(yīng)的類文件到方法區(qū)之后,在堆區(qū)生成一個與該類文件對應(yīng)的Class對象。強(qiáng)調(diào):不管這個類生成多少個對象,獄該類對應(yīng)的Class對象只有一個

        3. Class對象可以封裝類在『方法區(qū)』內(nèi)的數(shù)據(jù)結(jié)構(gòu):類里面的內(nèi)容,都可以通過Class對象獲得,像鏡子一樣,是整個反射的入口,可以看到目標(biāo)類的關(guān)聯(lián)的class結(jié)構(gòu),通過Class對象可以訪問目標(biāo)類的字段和方法

      2. 怎么加載?

        1. 加載方式

        2. 加載的工具

            1. 根類加載器C++,系統(tǒng)類加載器和擴(kuò)展列加載器是java

            2. Classloader類,將二進(jìn)制名稱轉(zhuǎn)換成文件名,然后嘗試著從文件系統(tǒng)讀取該名稱的.class文件

            3. 123456789101112131415package classloader;public class Test1 {public static void main(String[] args) throws ClassNotFoundException {Class clazz=Class.forName("java.lang.String");System.out.println(clazz.getClassLoader());//輸出null//獲得String類的加載方式,null標(biāo)明是由根加載器Bootstrap加載的,由C++編寫Class class1=Class.forName("classloader.Singleton");System.out.println(class1.getClassLoader());//輸出sun.misc.Launcher$AppClassLoader@105d88a}}

        3. 加載的結(jié)果


      3. 連接:

        1. 即本來用javac進(jìn)行編譯,但是有些人自己編譯,生成的字節(jié)碼文件不符合jvm對字節(jié)碼文件的規(guī)范,因此需要檢測

        2. 強(qiáng)調(diào)靜態(tài)變量(static):此時對象還不存在,此時還不涉及實例方法。靜態(tài)變量不屬于某一個對象,是屬于一個類的,所有的該類的對象都可以調(diào)用該靜態(tài)變量。因此在該類加載到內(nèi)存的時候,就可以給給靜態(tài)變量分配內(nèi)存了,并且初始化為默認(rèn)值 boolean類型:false,int 類型:0等

        3. 【感覺像是一個屋子在規(guī)劃的時候,就要劃分好公共空間,之后要是有具體的別人住進(jìn)來之后,可以根據(jù)不同人的不同的需求在各自的地方進(jìn)行活動,但是公用的部分一定是在建設(shè)一始就劃分好的,比如小區(qū)的公園和衛(wèi)生間,并且要公園里面的花花草草給弄好,不能說就建了一個花園的大概的外圍,里面什么都不搞,連地都不松一下土,這不行,還有比如衛(wèi)生間,也是要把里面的設(shè)備搞齊全了,沖水的設(shè)備,紙簍都要放好,不能等業(yè)主進(jìn)來了使用的時候才發(fā)現(xiàn),“我擦,怎么什么都只是空樣子”!至于后來小區(qū)業(yè)主進(jìn)來了,可以在自己家里面再搞其他的花草什么的別人也管不了,】

        4. 解析:之后再說 /2015.04.29補(bǔ)充:這邊的解析 是將符號飲用轉(zhuǎn)換為直接引用,是多態(tài)中后期綁定的內(nèi)容嗎?


      4. 初始化:這個不和『連接』里面的『準(zhǔn)備』重復(fù)嗎?

        1. 不重復(fù)

        2. 因為此時是把用戶想賦的值賦值給靜態(tài)變量

        3. 舉例:

          1234public class Test{ private static int i=3;}
        4. 首先,JVM會在『連接』的準(zhǔn)備階段 執(zhí)行 『i=0』。準(zhǔn)備階段結(jié)束,執(zhí)行解析,解析結(jié)束之后
        5. 解析完成,執(zhí)行『初始化』:把3顯示賦值給i;
        6. 12345678public class Test{private static int i;static{i=3;}}
        7. 此時完成類的初始化,此時仍然沒有對象的生成
          1. new Test();

          2. int b=Tetst.a;或者 Test.a=b;

          3. Class.forName("classloader.Test");

          4. 12345678class Father{}class Child extends Father{public static int i;}Child.a=3;

            啟動類:含有main方法的類

來自為知筆記(Wiz)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南安市| 乡城县| 漾濞| 嘉荫县| 奉化市| 隆安县| 永胜县| 逊克县| 滕州市| 城口县| 游戏| 诸暨市| 沽源县| 青铜峡市| 卢氏县| 华容县| 江陵县| 杭锦旗| 台中市| 安阳市| 朝阳区| 曲水县| 丰都县| 蒙自县| 凤庆县| 曲沃县| 尉犁县| 循化| 岢岚县| 友谊县| 漳浦县| 大城县| 罗甸县| 纳雍县| 鞍山市| 林芝县| 定边县| 沧源| 德钦县| 南召县| 颍上县|