1.類的載入過程
jvm將類載入過程分為三個步驟:裝載(load),鏈結(link)和初始化(initialize)鏈結又分為三個步驟,如下圖所示:
1) 裝載:查詢並載入類的二進位制資料;
驗證:確保被載入類的正確性;3)初始化:為類的靜態變數賦予正確的初始值;準備:為類的靜態變數分配記憶體,並將其初始化為預設值;
解析:把類中的符號引用轉換為直接引用;
那為什麼我要有驗證這一步驟呢?首先如果由編譯器生成的class檔案,它肯定是符合jvm位元組碼格式的,但是萬一有高手自己寫乙個class檔案,讓jvm載入並執行,用於惡意用途,就不妙了,因此這個class檔案要先過驗證這一關,不符合的話不會讓它繼續執行的,也是為了安全考慮吧。
準備階段和初始化階段看似有點牟盾,其實是不牟盾的,如果類中有語句:private static int a = 10,
它的執行過程是這樣的,首先位元組碼檔案被載入到記憶體後,先進行鏈結的驗證這一步驟,驗證通過後準備階段,給a分配記憶體,因為變數a是static的,所以此時a等於int型別的預設初始值0,即a=0,然後到解析(後面在說),到初始化這一步驟時,才把a的真正的值10賦給a,此時a=10。
jvm 類載入過程
驗證 裝載 連線 準備 初始化 使用 解除安裝 解析 類從被載入到虛擬機器記憶體中開始,到解除安裝出記憶體為止,它的整個生命週期包括 載入 驗證 準備 解析 初始化 使用和解除安裝七個階段。它們的順序如下圖所示 其中類載入的過程包括了載入 驗證 準備 解析 初始化五個階段。在這五個階段中,載入 驗證...
JVM 類載入過程
類載入主要是由jvm虛擬機器負責的,過程非常複雜,類載入分三步 載入 連線 初始化,這裡的載入和本文標題的類載入是不同的,標題的類載入包含了完整的三個步驟 下面詳細說說每一步的過程 初始化 為類的靜態變數賦予正確的初始值,上述的準備階段為靜態變數賦予的是虛擬機器預設的初始值,此處賦予的才是程式編寫者...
JVM的類載入過程
除此之外還包含解析類實現的介面資訊,字段資訊,方法資訊,初始化靜態域。按照類檔案標準格式解析出這些內容之後,建立類物件instanceklass並儲存到方法區中。在類物件instanceklass中使用vtalbe表來存放虛方法和使用itables表來存放介面。具體過程如下 1.驗證 2.準備 3....