Java類加載過程

Java類加載須要經歷一下7個過程:
1.加載
加載是類加載的第一個過程,在這個階段,將完成一下三件事情:
    •經過一個類的全限定名獲取該類的二進制流。
    •將該二進制流中的靜態存儲結構轉化爲方法去運行時數據結構。
    •在內存中生成該類的Class對象,做爲該類的數據訪問入口。
2.驗證
驗證的目的是爲了確保Class文件的字節流中的信息不回危害到虛擬機.在該階段主要完成如下四鍾驗證:
    •文件格式驗證:驗證字節流是否符合Class文件的規範,如主次版本號是否在當前虛擬機範圍內,常量池中的常量是否有不被支持的類型.
    •元數據驗證:對字節碼描述的信息進行語義分析,如這個類是否有父類,是否集成了不被繼承的類等。
    •字節碼驗證:是整個驗證過程當中最複雜的一個階段,經過驗證數據流和控制流的分析,肯定程序語義是否正確,主要針對方法體的驗證。如:方法中的類型轉換是否正確,跳轉指令是否正確等。
    •符號引用驗證:這個動做在後面的解析過程當中發生,主要是爲了確保解析動做能正確執行。
3.準備
準備階段是爲類的靜態變量分配內存並將其初始化爲默認值,這些內存都將在方法區中進行分配。準備階段不分配類中的實例變量的內存,實例變量將會在對象實例化時隨着對象一塊兒分配在Java堆中。publicstaticintvalue=123;//在準備階段value初始值爲0。在初始化階段纔會變爲123。
4.解析
該階段主要完成符號引用到直接引用的轉換動做。解析動做並不必定在初始化動做完成以前,也有可能在初始化以後。
5.初始化
初始化時類加載的最後一步,前面的類加載過程,除了在加載階段用戶應用程序能夠經過自定義類加載器參與以外,其他動做徹底由虛擬機主導和控制。到了初始化階段,才真正開始執行類中定義的Java程序代碼。
6.使用
7.卸載數據結構

相關文章
相關標籤/搜索