整理類載入的過程

weixin_33890526發表於2018-05-03

1.載入

在載入階段 虛擬機器完成三件事

1.通過一個類的全限定名來獲取定義此類的二進位制位元組流

2.將這個位元組流所代表的靜態儲存結構轉化為方法區執行時的資料結構

3.在記憶體中生成一個代表這個類的java.lang.Class物件,作為方法區這個類的各種資料訪問出口

2.驗證

直接決定了Java虛擬機器是否能承受惡意程式碼的攻擊,從執行效能角度上講,驗證階段的工作量在虛擬機器的類載入子系統中又佔了一部分

1.檔案格式的驗證

要驗證位元組流是否符合Class檔案格式的規範,並且能被當前版本的虛擬機器處理。

2.後設資料驗證

對位元組碼描述的資訊進行語義分析,保證其描述的資訊符合Java語言規範的要求

3.位元組碼驗證

主要目的是通過資料流和控制流分析,確定語義是合法的、符合邏輯的。

4.符號引用驗證

引用符號可以看做是對類自身以外的資訊匹配教驗。

3.準備

準備階段是正式為類變數分配記憶體並設定類變數初始值(通常情況下是資料型別的零值)的階段,這些變數所使用的記憶體都將在方法區中進行分配。這時候進行記憶體分配的僅包括類變數(被static修飾的變數),而不包括例項變數,例項變數將會在物件例項化的時候隨著物件一起分配在Java堆中。

4.解析

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

1.類或介面的解析

2.欄位解析

3.類方法解析

4.介面方法解析

5.初始化

在準備階段,便用已經賦過一次系統要求的初始值,而在初始化階段,則根據程式設計師通過程式制定的主觀計劃去初始化類變數和其他資源。也就是說  初始化是執行類構造器<clinit>()方法的過程

參考《深入理解Java虛擬機器》

相關文章