JVM 類加載過程

總體概括

類加載過程:加載 → 鏈接 → 初始化
其中,鏈接階段包括:驗證 → 準備 → 解析

加載

加載,是指查找字節(jié)流并據(jù)此創(chuàng)建類的過程。字節(jié)流的來源可能是.class文件也可能從網(wǎng)絡加載。對于數(shù)組類型來說,它并沒有字節(jié)流,由 java 虛擬機直接生成。對于其他類型來說,java 虛擬機需要借助類加載器來加載。

java9 之前,類加載器包括:啟動類加載器,擴展類加載器,應用程序類加載器
java9 及以后:啟動類加載器,平臺類加載器,應用程序類加載器
類加載器遵循雙親委派原則,當某個類加載器加載類之前,先要將加載操作委派給父類加載器,當父類加載器加載不到該類時,才由自己來加載。這樣是為了避免一個類被多次加載。

鏈接

鏈接是指將已經(jīng)構(gòu)造好的類合并到 java 虛擬機中。在合并之前,需要進行驗證這個類的結(jié)構(gòu)是否符合 java 虛擬機規(guī)范。然后需要給靜態(tài)字段賦值,將符號引用變?yōu)橹苯右谩?/p>

  • 驗證:驗證加載的類是否滿足java 虛擬機規(guī)范
  • 準備:給類的靜態(tài)字段分配內(nèi)存
  • 解析:將符號引用轉(zhuǎn)化為直接引用

初始化

給類的靜態(tài)字段賦值,其中包括靜態(tài)字段的賦值語句和 static 代碼塊中的語句。這兩部分的代碼會被合并到<clinit>函數(shù)中,java 虛擬機會保證該方法只被執(zhí)行一次。

面試準備

面試官:說一下類的加載過程
:java 類的加載過程分為加載、鏈接、初始化三個步驟。在加載步驟中,java 虛擬機借助類加載器來查找類的字節(jié)碼,然后通過查找到的字節(jié)碼構(gòu)造出該類。鏈接步驟中,包含驗證、準備、解析三個小步驟,其中驗證就是指驗證一下這個類的結(jié)構(gòu)是否滿足 java 虛擬機規(guī)范。準備是指為類的靜態(tài)字段準備內(nèi)存空間。解析是指將類的符號引用轉(zhuǎn)化為直接引用。最后一個大步驟初始化,是指根據(jù)靜態(tài)字段的賦值語句和類中的靜態(tài)代碼塊給類中的靜態(tài)字段賦值。
面試官:好的,回去等消息吧 ~
:???臥槽?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容