Java類加載基本過程詳細介紹
Java類加載基本過程詳細介紹
基本過程:
- 根據(jù)類的全限定名稱加載定義類的二進制字節(jié)流。
- 將字節(jié)流代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運行時數(shù)據(jù)結(jié)構(gòu)
- 內(nèi)存中生成一個代表這個類的java.lang.Class對象,作為方法去這個類的各種數(shù)據(jù)訪問入口
數(shù)組類本身不通過類加載器創(chuàng)建,由java虛擬機直接創(chuàng)建,數(shù)組類的元素類型由類加載器加載。
數(shù)組類的元素類型:數(shù)組去掉所有維度后的類型,
文件格式驗證:
- 0xCAFEBABY 魔數(shù)開頭;
- 主次版本號當(dāng)前虛擬機可處理;
- 常量類型;
- 索引執(zhí)行類型;
- utf8編碼數(shù)據(jù)類型,
元數(shù)據(jù)驗證:字節(jié)碼描述信息語義分析:
- 是否有父類;
- 父類是否繼承了final修飾的類;
- 非抽型類是否實現(xiàn)了父類或接口中需要實現(xiàn)的方法;
- 類中的字段、方法的覆蓋,重載矛盾;
字節(jié)碼驗證:通過語義流及控制流分析確定程序予以的合法性,正確性,方法體分析驗證。
- 符號引用驗證:虛擬機將符號引用轉(zhuǎn)化為直接引用時候,解析階段,對類自身以外信息進行匹配性驗證
- 符號引用中通過字符描述的全限定名是否能找到對應(yīng)的類;
- 指定類中是否存在符合方法字段的描述符,及簡單名稱所描述的方法和字段;
- 符號引用中類,字段,方法的訪問性。
準(zhǔn)備:在方法區(qū)中為類變量分配內(nèi)存及設(shè)置類變量初始值。
- 初始值通常為數(shù)據(jù)類型的零值,final修飾的值直接初始化為相應(yīng)值。
- 類變量為static修飾的變量,區(qū)分于實例變量。
解析:虛擬機將常量池中的符號引用替換為直接引用過程
CONSTANT_Class_info,CONSTANT_Fieldref_info,CONSTANT_Methodref_info..
- 符號引用:以一組符號來描述所引用的目標(biāo),任何形式的字面量,只要使用時能無歧義的定位到目標(biāo),,與虛擬機內(nèi)存實現(xiàn)無關(guān),無關(guān)引用目標(biāo)是否加載。
- 直接引用:直接指向目標(biāo)的指針,偏移量或間接定位到目標(biāo)的句柄,和虛擬機實現(xiàn)的內(nèi)存相關(guān),直接引用相關(guān)的目標(biāo)對象必須已加載。
- 。。。
初始化:開始執(zhí)行類定義中的Java程序代碼。執(zhí)行類構(gòu)造器<cinit>()方法,
<cinit>():
- 編譯器根據(jù)類文件中定義順序自動收集類中的類變量的賦值動作和靜態(tài)語句塊兒的語句合并產(chǎn)生,靜態(tài)語句塊兒只能訪問到其前定義的變量。
- 區(qū)別于類的構(gòu)造方法,不需要顯示的調(diào)用父類構(gòu)造器,虛擬機保證子類的<cinit>()執(zhí)行之前父類的<cinit>()已經(jīng)執(zhí)行完成。
- 父類中的靜態(tài)語句塊兒執(zhí)行于前。
- <cinit>()對于類或接口不是必須的,如果沒有變量賦值操作或靜態(tài)語句塊兒,則不生成。
- 接口的<cinit>()不需要先執(zhí)行父接口的<cinit>(),同樣接口的實現(xiàn)類<cinit>()也不需要。
- 線程安全:虛擬機保證多線程環(huán)境中<cinit>()正確的加鎖,同步,同一時間只能有一個線程訪問初始化類的<cinit>()
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Spring TransactionalEventListener事務(wù)未提交讀取不到數(shù)據(jù)的解決
這篇文章主要介紹了Spring TransactionalEventListener事務(wù)未提交讀取不到數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot創(chuàng)建監(jiān)聽器的方法示例
在Java中,監(jiān)聽器(Listener)是一種設(shè)計模式,它允許對象在 特定事件 發(fā)生時 自動執(zhí)行某些操作,這種設(shè)計模式通常用于實現(xiàn) 發(fā)布-訂閱模型,本文給大家介紹了SpringBoot創(chuàng)建監(jiān)聽器的方法示例,感興趣的通過可以參考一下2024-04-04