1. 程式人生 > >Java常見面試題:類的載入過程詳細解析

Java常見面試題:類的載入過程詳細解析

程式設計師看似光鮮的就業前景面前,逃不過的是層層的面試,想要進前沿的大公司沒有個五六七八面,是不可能滴!而找工作的首個關卡就是筆試,想要獲得高薪工作的小夥伴,先刷一波面試題吧!

今天給大家分享的面試題是——類的載入過程。

 

 

類載入過程主要包含載入、驗證、準備、解析、初始化、使用、解除安裝七個方面,下面一一闡述。

1、載入

在載入階段,虛擬機器主要完成三件事:

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

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

3.在Java堆中生成一個代表這個類的java.lang.Class物件,作為方法區域資料的訪問入口

2、驗證

驗證階段作用是保證Class檔案的位元組流包含的資訊符合JVM規範,不會給JVM造成危害。如果驗證失敗,就會丟擲一個java.lang.VerifyError異常或其子類異常。驗證過程分為四個階段

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

2.元資料驗證:是對位元組碼描述的資訊進行語義分析,以保證其描述的資訊符合Java語言的規範。

3.位元組碼驗證:主要是進行資料流和控制流的分析,保證被校驗類的方法在執行時不會危害虛擬機器。

4.符號引用驗證:符號引用驗證發生在虛擬機器將符號引用轉化為直接引用的時候,這個轉化動作將在解析階段中發生。

3、準備

準備階段為變數分配記憶體並設定類變數的初始化。在這個階段分配的僅為類的變數(static修飾的變數),而不包括類的例項變數。對已非final的變數,JVM會將其設定成"零值",而不是其賦值語句的值:

pirvate static int size = 12;

那麼在這個階段,size的值為0,而不是12。 final修飾的類變數將會賦值成真實的值。

4、解析

解析過程是將常量池內的符號引用替換成直接引用。主要包括四種類型引用的解析。類或介面的解析、欄位解析、方法解析、介面方法解析。

5、初始化

在準備階段,類變數已經經過一次初始化了,在這個階段,則是根據程式設計師通過程式制定的計劃去初始化類的變數和其他資源。這些資源有static{}塊,建構函式,父類的初始化等。

至於使用和解除安裝階段階段,這裡不再過多說明,使用過程就是根據程式定義的行為執行,解除安裝由GC完成。

以上!歡迎大家留言討論!