JVM運行和類加載的全過程

類的加載機制

JVM把class文件加載到內存,並對數據進行校驗,解析和初始化,最終形成JVM可以直接使用的Java類型的過程。

加載
將class文件字節碼內容加載到內存中,並將這些靜態數據轉換成方法區中的運行時數據結構,在堆中生成一個代表這個類文件的java.lang.Class對象,作爲方法區類數據的訪問接口。-----這個過程需要類加載器參與
鏈接
驗證:確保加載的類信息符合JVM規範,沒有安全方面的問題
準備:正式爲類變量(static變量)分配內存並設置類變量初始值的階段,這些內存都將在方法區中進行分配
解析:虛擬機常量池內的符號引用替換爲直接引用的過程。
初始化
初始化階段是執行類構造器<clinit>()方法的過程。類構造器<clinit>()方法是由編譯器自動收集類中所有變量的賦值動作和靜態語句塊中的語句合併產生的。
當初始化一個類的時候,如果發現其父類還沒有進行初始化,則需要先將其父類進行初始化。
虛擬機會保證一個類的<clinit>()方法在多線程環境中能被正確的加鎖和同步。
當訪問一個java類的靜態域時,只有真正聲明這個域的類纔會被初始化。
jvm執行類加載的順序

首先在一個類中找到主函數。主函數中實例化了一個類
這時候首先執行這個類中的靜態代碼塊
在執行類的構造方法,
然後再執行類中的其他方法
方法區:

靜態變量
靜態方法
常量池
類的代碼 堆:
java.lang.Class對象 棧:
main方法的棧
靜態變量與靜態域其實是一回事

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章