類加載機制和JVM內存模型
一.什麼是
class文件加載到jvm中運行
二.過程
1.裝載:找到在哪裏
(1)通過類的全限定路徑名找到類的二進制流 類裝載器:ClassLoader
保證類的唯一性,先頂層加載,最後輪到我才加載
(2)將字節流所代表的的靜態存儲結構轉化爲方法區的運行時數據結構
(3)代表當前類的java.lang.Class對象,放到jvm堆
2.鏈接
驗證:文件格式,元數據,字節碼,符號引用的驗證
準備:爲類的靜態變量分配內存,初始化爲默認值,方法區分配
解析:將類中的符號引用替換成直接引用
3.初始化
爲類的靜態變量,靜態代碼執行真正的初始化操作,比如a=9,a才能真正賦值爲9
三.JVM
堆:存儲對象,線程共享,生命週期和虛擬機一樣 OOM
方法區:存儲類信息,常量,靜態變量,即時編輯器編譯之後的代碼,被所有線程共享 OOM
--運行期常量池:用於存放編譯期生成的各種字面量和符號引用
虛擬機棧:線程是爲了執行方法,每個線程執行的方法就是一個一個棧幀,線程就是一個jvm棧,棧幀就是方法的執行
程序計數器:每個線程裏記錄當前方法執行的位置
native棧:調用C方法
四.棧中的方法調用過程
1.a調用b,b調用c
2.棧幀的執行過程
javap反解字節碼指令
五.jvm模型