溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java類的加載過程是怎樣的

發(fā)布時間:2021-12-22 15:30:09 來源:億速云 閱讀:97 作者:iii 欄目:編程語言

這篇文章主要講解了“Java類的加載過程是怎樣的”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java類的加載過程是怎樣的”吧!

  一、加載

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

  1.通過一個類的全限定名來獲取定義此類的二進制字節(jié)流。

  2.將這個字節(jié)流所代表的靜態(tài)存儲結構轉化為方法區(qū)域的運行時數據結構。

  3.在Java堆中生成一個代表這個類的java.lang.Class對象,作為方法區(qū)域數據的訪問入口

  二、驗證

  驗證階段作用是保證Class文件的字節(jié)流包含的信息符合JVM規(guī)范,不會給JVM造成危害。如果驗證失敗,就會拋出一個java.lang.VerifyError異常或其子類異常。驗證過程分為四個階段

  1.文件格式驗證:驗證字節(jié)流文件是否符合Class文件格式的規(guī)范,并且能被當前虛擬機正確的處理。

  2.元數據驗證:是對字節(jié)碼描述的信息進行語義分析,以保證其描述的信息符合Java語言的規(guī)范。

  3.字節(jié)碼驗證:主要是進行數據流和控制流的分析,保證被校驗類的方法在運行時不會危害虛擬機。

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

  三、準備

  準備階段為變量分配內存并設置類變量的初始化。在這個階段分配的僅為類的變量(static修飾的變量),而不包括類的實例變量。對已非final的變量,JVM會將其設置成“零值”,而不是其賦值語句的值:

  pirvate static int size = 12;

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

  四、解析

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

  五、初始化

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

  至于使用和卸載階段階段,這里不再過多說明,使用過程就是根據程序定義的行為執(zhí)行,卸載由GC完成。

感謝各位的閱讀,以上就是“Java類的加載過程是怎樣的”的內容了,經過本文的學習后,相信大家對Java類的加載過程是怎樣的這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI