91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java類加載過程的示例分析

發布時間:2021-09-06 13:38:30 來源:億速云 閱讀:137 作者:小新 欄目:開發技術

這篇文章主要介紹Java類加載過程的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

    Java:類加載過程

    Java類加載過程的示例分析

    1.加載——3件事

    • 1.通過全類名獲取定義此類的二進制字節流(eg:從jar、war中獲取);

    • 2.將字節流所代表的靜態存儲結構轉換為方法區的運行時數據結構;

    • 3.在內存中生成一個代表該類的Class對象,作為方法區這些數據的訪問入口。

    2.連接

    加載階段和連接階段的部分內容是交叉進行的,加載尚未結束,連接階段可能就開始運行了。

    2.1.驗證

    Java類加載過程的示例分析

    2.2.準備

    準備階段:正式為類變量分配內存并設置類變量初始值的階段,這些內存在方法區分配。注意:

    1.這時候進行內存分配的僅包括類變量(static),而不包括實例變量,實例變量會在對象實例化時隨著對象一塊分配在 Java 堆中;

    2.除了含有final修飾的變量外,其他都賦值0,null,false這種的。

    如下例子, value 的值就被復制為 111,而不是0.

    public static final int value=111

    2.3.解析

    解析階段是虛擬機將常量池中的符號引用替換為直接引用的過程。

    • 也就是得到類或者字段、方法在內存中的指針或者偏移量。

    什么是符號引用?

    * 比如org.simple.People類引用了org.simple.Language類;

    * 在編譯時People類并不知道Language類的實際內存地址,因此只能使用符號org.simple.Language

    3.初始化

    初始化是類加載的最后一步,也是真正執行類中定義的 Java 程序代碼(字節碼),初始化階段是執行類構造器 < clinit >() 方法的過程。

    對于< clinit >() 方法的調用,虛擬機會自己確保其在多線程環境中的安全性。因為 < clinit >() 方法是帶鎖線程安全,所以在多線程環境下進行類初始化的話可能會引起死鎖,并且這種死鎖很難被發現。

    對于初始化階段,虛擬機嚴格規范了有且只有5中情況下,必須對類進行初始化:

    • 當遇到 new 、 getstatic、putstatic或invokestatic 這4條直接碼指令時,比如 new 一個類,讀取一個靜態字段(未被 final 修飾)、或調用一個類的靜態方法時。

    • 使用 java.lang.reflect 包的方法對類進行反射調用時 ,如果類沒初始化,需要觸發其初始化.

    • 初始化一個類,如果其父類還未初始化,則先觸發該父類的初始化。

    • 當虛擬機啟動時,用戶需要定義一個要執行的主類 (包含 main 方法的那個類),虛擬機會先初始化這個類。

    • 當使用 JDK1.7 的動態動態語言時,如果一個 MethodHandle 實例的最后解析結構為 REF_getStaticREF_putStaticREF_invokeStatic、的方法句柄,并且這個句柄沒有初始化,則需要先觸發器初始化。

    以上是“Java類加載過程的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    台江县| 巨鹿县| 宕昌县| 乌拉特后旗| 织金县| 台中县| 通化县| 定陶县| 莱西市| 建平县| 舒兰市| 张掖市| 红河县| 丽水市| 山阴县| 罗田县| 甘孜| 大悟县| 清苑县| 永顺县| 吴江市| 白银市| 辰溪县| 夏河县| 西乌| 镇远县| 盐津县| 曲周县| 凉城县| 田阳县| 郁南县| 炉霍县| 伊春市| 全南县| 新民市| 永吉县| 股票| 元阳县| 江陵县| 永春县| 阿拉尔市|