jvm之類加載機制

1、什麼是類加載機制?java

JVM把class文件加載到內存裏面,並對數據進行校驗、準備、解析和初始化,最終造成能夠被JVM能夠直接使用的Java類型的過程。安全

2、類加載的時機數據結構

一、生命週期優化

 類從被加載到虛擬機內存中開始,到卸載出內存爲止,它的整個生命週期包括:加載、驗證、準備、解析、初始化、使用和卸載七個階段。它們開始的順序以下圖所示:對象

 其中類加載的過程包括了加載、驗證、準備、解析、初始化五個階段。生命週期

二、類初始化情形內存

類加載時機沒有強制約束,但「初始化」階段有明確的規定,如下情形會當即被初始化:get

  • 使用new關鍵字實例化對象、訪問或者設置一個類的靜態字段(被final修飾、編譯器優化時已經放入常量池的例外)、調用類方法,都會初始化該靜態字段或者靜態方法所在的類。
  • 初始化類的時候,若是其父類沒有被初始化過,則要先觸發其父類初始化。
  • 使用java.lang.reflect包的方法進行反射調用的時候,若是類沒有被初始化,則要先初始化。
  • 虛擬機啓動時,用戶會先初始化要執行的主類(含有main)
  • jdk 1.7後,若是java.lang.invoke.MethodHandle的實例最後對應的解析結果是 REF_getStatic、REF_putStatic、REF_invokeStatic方法句柄,而且這個方法所在類沒有初始化,則先初始化。

3、類加載的過程編譯器

  • 加載:
  1. 將class文件加載在內存中。
  2. 將靜態數據結構(數據存在於class文件的結構)轉化成方法區中運行時的數據結構(數據存在於JVM時的數據結構)。
  3. 在堆中生成一個表明這個類的java.lang.Class對象,做爲數據訪問的入口。
  • 驗證:確保加載的類符合JVM規範與安全。
  • 準備::爲static變量在方法區中分配空間,設置變量的初始值。
  • 解析:虛擬機將常量池的符號引用轉變成直接引用。
  • 初始化:執行類構造器方法的過程
相關文章
相關標籤/搜索