1. 程式人生 > >1.JVM的類載入機制

1.JVM的類載入機制

1.類從被載入到虛擬記憶體中開始,到卸載出記憶體為止,整個生命週期包括,

載入---》驗證--》準備-->解析---》---》初始化--》使用---》和解除安裝的過程

其中驗證,準備,解析3個階段統稱為連線。

(0)在遇到new getstatic, pustatic 或者invokestatic這4條位元組碼指令時,如果類沒有進行過初始化,則需要先觸發其初始化

使用場景如下:

new 關鍵字例項化物件,讀取時或設定一個類的靜態欄位(被final修飾,已在編譯時期把結果放入常量池的靜態欄位除外)

(1)在使用java.lang.reflect包的方法對類進行反射呼叫的時候,如果類沒有進行初始化操作,則需要先觸發其初始化。

  (2)當初始化一個類的時候,如果發現其父類還沒有進行過初始化,則需要先觸發其父類的初始化

(3)當虛擬機器啟動的時候,使用者需要指定一個要執行的主類(包含main()方法的哪個類),虛擬機器會事先載入並初始化這個主類。

(4)以上可以稱之為類的主動引用的過程。

因此與之對應就會有被動引用過程:

被動引用的例子:

並不會去進行初始化操作,原因如下:

java原始碼中引用了constclass類中的helloworld,

類載入和介面載入過程實際上是不一樣的針對介面也有初始化的過程,上面是用static{}實現靜態語句塊的資訊的