Java類加載機制(加載、驗證、準備、解析、初始化)
阿新 • • 發佈:2019-03-25
包含 image 發生 進程 引用變量 就會 www. pub 內存空間
如下圖所示,Java的類加載機制主要分為三個部分,分別為加載、鏈接、初始化。其中鏈接又分為三個小部分——驗證、準備、解析。
- 加載——在經過對Java代碼進行編譯後,JVM將Java類編譯後的二進制文件即字節碼文件以二進制的形式加載到內存放中,以便後面的步驟進行,如果沒有找到指定的類,就會拋出錯誤,進程到這裏也就結束了。
- 驗證——驗證即驗證Java加載進內存的二進制文件是否符合JVM以及Java規範,並且不會危害虛擬機的自身安全。比如說符號引用中的類、字段、方法的訪問性(private、protected、public、default)是否可被當前類訪問、類中的字段、方法是否與父類產生矛盾……
- 準備——準備階段是指準備要執行的制定的類,這包含了給這個類的靜態變量和其他數據分配內存空間(僅僅是分配內存空間,具體初始化在最後一步)。
- 解析——解析階段是指檢查指定的類是否引用了其他的類、接口,然後對於這些內容遞歸的進行以上加載、驗證、準備三個步驟。
- 初始化——在這最後一步中,JVM用賦值或者缺省值將靜態變量進行初始化,並執行靜態初始化程序(static塊中的代碼),初始化發生在執行main方法之前,但在指定的類初始化之前他的父類必須先初始化,若其父類仍然存在父類,那也需遞歸的初始化。
例如,如果一個類中包含聲明public static int a=5;
那麽變量a被賦值為5的過程將在初始化
類型 | 默認值 | 類型 | 默認值 | 類型 | 默認值 |
---|---|---|---|---|---|
boolean | false | int | 0 | float | 0.0f |
byte | 0 | long | 0L | double | 0.0d |
short | 0 | char | \u0000 | object reference | null |
參考資料:
Java編程指南
http://www.importnew.com/25295.html
Java類加載機制(加載、驗證、準備、解析、初始化)