1. 程式人生 > >JVM載入class檔案的一些理解

JVM載入class檔案的一些理解

Java是一種動態解釋型語言,類(class)只有被載入到JVM中後才能執行。每當一個Java程式執行時,都會有一個對應的JVM例項,只有當程式執行結束後,這個JVM才會退出。JVM例項通過呼叫類的main()方法來啟動一個Java程式。當執行指定程式時,JVM將編譯生成的.class檔案按照需求和一定的規則載入到記憶體中,組織成一個完整的Java應用程式。
類的載入方式分為隱式載入和顯式載入,隱式載入指的是程式在使用new等方式建立物件時,會隱式地呼叫類的載入器把對應的類載入到JVM中。顯示載入指的是通過直接呼叫class.forName()方法來把所需的類載入到JVM中。
類的載入的主要步驟分為如下3步:


(1)裝載,根據查詢路徑找到對應的class檔案,然後匯入
(2)連結,可以分為3小步:
a.檢查,檢查待載入的class檔案的正確性
b.準備,給類中的靜態變數分配儲存空間
c.解析,將符號引用轉換成直接引用
(3)初始化,對靜態變數和靜態程式碼塊執行初始化工作
補充:對於將符號引用轉換成直接引用:
在java中,一個java類將會編譯成一個class檔案。在編譯時,java類並不知道引用類的實際記憶體地址,雅思報名因此只能使用符號引用來代替。比如org.simple.People類引用org.simple.Tool類,在編譯時People類並不知道Tool類的實際記憶體地址,因此只能使用符號org.simple.Tool(假設)來表示Tool類的地址。而在類裝載器裝載People類時,此時可以通過虛擬機器獲取Tool類 的實際記憶體地址,因此便可以既將符號org.simple.Tool替換為Tool類的實際記憶體地址,及直接引用地址。