這幾天又犯懶了,所以導致這幾天沒有進行博客的更新。我還記得以前以爲公司的領導和我言真意切的說過一句話:人都有惰性,所以成功最基本的要素就是學會堅持。所以,剛剛忙完一個需求開發的我,便開始就堅持對java虛擬機的學習了,畢竟沒有什麼捷徑可以讓你一步登頂。好了,廢話不多說,今天我們主要好好研習一下java的類加載機制。
一、何爲類加載。
虛擬機把描述類的數據從class文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的java類型,這就是虛擬機的類加載機制。
二、類加載的時機。
類從被加載到虛擬機內存中開始,到卸載出內存爲止,它的整個生命週期包括:加載、驗證、準備、解析、初始化、使用和卸載7個階段。如下圖:
三、類加載的過程。
1、加載。
虛擬機加載的過程需要完成三件事:通過一個類的全限制名來獲取定義此類的二進制字節流、將這個字節流代表的靜態存儲數據結構轉化爲方法區的運行時數據結構、在內存中生成一個代表這個類的java.lang.class對象,作爲方法區這個類的各種數據訪問接口。
2、驗證。
驗證階段將會完成四個動作:文件格式驗證、元數據驗證、字節碼驗證、符號引用驗證。
3、準備。
準備階段是正式爲類變量分配內存並設置類變量初始值的階段,這些變量所使用的內存,都將在方法區中進行匹配。
4、解析。
解析階段是虛擬機將常量池內的符號引用替換爲直接引用的過程。
5、初始化。
類初始化階段是類加載的的最後一步,到了初始化階段,才真正開始執行類中定義的java代碼。