JVM類加載的過程細節

類加載的過程:加載、驗證、準備、解析、初始化、使用、卸載

1、加載
類加載器根據類全限定名獲取二進制字節流,把二進制字節流加載到內存中,然後將這個字節流所代表的靜態存儲結構轉化爲方法區的運行時數據結構,在堆中生成相應的java.lang.Class的實例,作爲對方法區中這些數據的訪問入口。
加載階段完成後,虛擬機外部的二進制字節流就按照虛擬機所需的格式存儲在方法區之中。

2、連接
2.1驗證:確保被加載的類的正確性,包括文件格式驗證,字節碼驗證,元數據驗證,符號引用驗證
驗證階段是非常重要的,但不是必須的,它對程序運行期沒有影響,如果所引用的類經過反覆驗證,那麼可以考慮採用 -Xverifynone 參數來關閉大部分的類驗證措施,以縮短虛擬機類加載的時間。

2.2準備:爲類的靜態變量分配內存,並將其初始化爲默認值

2.3解析:把類中的符號引用轉化爲直接引用

3、初始化
爲類的靜態變量賦予正確的初始值,JVM負責對類進行初始化,主要對類變量進行初始化。
初始化的時機:只有當對類的主動使用的時候纔會導致類的初始化,類的主動使用包括以下六種:
1)創建類的實例,也就是new的方式
2)訪問某個類或接口的靜態變量,或者對該靜態變量賦值
3)調用類的靜態方法
4)反射(如 Class.forName(“com.shengsiyuan.Test”))
5)初始化某個類的子類,則其父類也會被初始化
6)Java虛擬機啓動時被標明爲啓動類的類( JavaTest),直接使用 java.exe命令來運行某個主類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章