【Java】类加载过程
JVM把class文件加載到內存,并對數據進行校驗、解析和初始化,最終形成JVM可以直接使用的Java類型的過程。
類加載的過程主要分為三個部分:
-
加載
-
鏈接
-
初始化
而鏈接又可以細分為三個小部分:
-
驗證
-
準備
-
解析
1、加載
簡單來說,加載指的是把class字節(jié)碼文件從各個來源通過類加載器裝載入內存中。
將class文件字節(jié)碼內容加載到內存中,并將這些靜態(tài)數據轉換成方法區(qū)中的運行時數據結構,在堆中生成一個代表這個類的java.lang.Class對象,作為方法區(qū)類數據的訪問入口。
(2)鏈接 將java類的二進制代碼合并到jvm的運行狀態(tài)之中的過程
2、鏈接
2.1 驗證
確保加載的類信息符合jvm規(guī)范,沒有安全方面的問題。
2.2 準備?
正式為類變量(static變量)分配內存并設置類變量初始值的階段,這些內存都將在方法區(qū)中進行分配。
特別需要注意,初值,不是代碼中具體寫的初始化的值,而是Java虛擬機根據不同變量類型的默認初始值。
比如8種基本類型的初值,默認為0;引用類型的初值則為null;常量的初值即為代碼中設置的值,final static tmp = 456, 那么該階段tmp的初值就是456
2.3 解析
虛擬機常量池內的符號引用替換為直接引用的過程。
(比如String s ="aaa",轉化為 s的地址指向“aaa”的地址)
(3)初始化
這個階段主要是對類變量初始化,是執(zhí)行類構造器的過程。
換句話說,只對static修飾的變量或語句進行初始化。
如果初始化一個類的時候,其父類尚未初始化,則優(yōu)先初始化其父類。
如果同時包含多個靜態(tài)變量和靜態(tài)代碼塊,則按照自上而下的順序依次執(zhí)行。
當訪問一個java類的靜態(tài)域時,只有真正聲明這個靜態(tài)變量的類才會被初始化。
參考鏈接:https://blog.csdn.net/ln152315/article/details/79223441
轉載于:https://www.cnblogs.com/zeze/p/9608706.html
總結
以上是生活随笔為你收集整理的【Java】类加载过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABP理论学习之Web API控制器(新
- 下一篇: Java 开发环境部署