文章目錄
- 類裝載的執行過程
- 1.加載
- 2.驗證
- 3.準備
- 4.解析
- 5.初始化
- 6.使用
- 7.卸載
類裝載的執行過程
類裝載總共分為7個過程,分別是
加載,驗證,準備、解析、初始化、使用、卸載
1.加載
將
類的字節碼文件
加載到內存
(元空間)中。這一步會創建一個與被加載類對應的Class對象。
通過類的全名,獲取類的二進制數據流。
解析類的二進制數據流為方法區內的數據結構(Java類模型)
創建java.lang.Class類的實例,表示該類型。作為方法區
這個類的各種數據的訪問入口
2.驗證
驗證類是否
符合 JVM規范
,安全性檢查
,不會造成安全或內存損壞等問題
前三
個都屬于格式檢查
,第四
個符號引用驗證
其實就是看class字節碼中的程序指令
對應的符號在常量池
中是否有對應的類和方法
,檢查是否存在,不存在就會報相應不存在的錯誤
3.準備
為類
變量分配內存
并設置類變量初始值
例如如下類
static變量,分配空間在準備階段完成(設置默認值),賦值在初始化階段完成
static變量是final的基本類型
,以及字符串常量,值已確定
,賦值
在準備階段完成
static變量是final的引用類型
,那么賦值
會在初始化階段
完成
4.解析
把類中的
符號引用轉換為直接引用
符號引用指的是用于描述
對其他類、字段、方法的引用的符號
,而直接引用則是指向具體內存地址的指針
。
5.初始化
對類的
靜態變量,靜態代碼塊
執行初始化
操作
初始化規則就是
- 如果初始化一個類的時候,其
父類尚未初始化
,則優先初始化其父類
。 - 如果同時包含多個靜態變量和靜態代碼塊,則按照
自上而下
的順序依次執行。
6.使用
在程序運行期間,
使用已經加載和初始化的類。
JVM 開始從入口方法開始執行用戶的程序代碼
- 調用靜態類成員信息(比如:靜態字段、靜態方法)
靜態的直接調用
- 使用new關鍵字為其創建對象實例
非靜態的先new個對象實例,再通過對象調用
7.卸載
當不再需要某個類時,卸載它以釋放內存空間。或者程序結束,也會自動卸載