Java虛擬機Java實現(xiàn)與平臺的無關性的關鍵。Java虛擬機類加載機制分為加載,驗證,準備,解析,初始化個部分,中培偉業(yè)《企業(yè)級Java高級開發(fā)技術實戰(zhàn)》培訓專家李老師在這里就此進行了詳細介紹
加載階段
加載階段是類加載過程的組成部分其作用是其能在內(nèi)存中生成一個代表這個類的java.lang.Class對象,作為方法區(qū)這個類的各種數(shù)據(jù)的入口。
驗證階段
階段的主要意義在于即確保Class文件字節(jié)流中包含的信息符合當前虛擬機要求的前提下不對虛擬機自身的安全造成侵害
準備階段
準備階段的意義在于它是正式為類變量分配內(nèi)存并設置類變量的初始值階段,即在方法區(qū)中分配這些變量所使用的內(nèi)存空間。
解析階段
解析階段是指虛擬機將常量池中的符號引用替換為直接引用的過程。下面我們解釋一下符號引用和直接引用的概念:
符號引用與虛擬機實現(xiàn)的布局無關,引用的目標并不一定要已經(jīng)加載到內(nèi)存中。各種虛擬機實現(xiàn)的內(nèi)存布局可以各不相同,但是它們能接受的符號引用必須是一致的,因為符號引用的字面量形式明確定義在Java虛擬機規(guī)范的Class文件格式中。
直接引用可以是指向目標的指針,相對偏移量或是一個能間接定位到目標的句柄。如果有了直接引用,那引用的目標必定已經(jīng)在內(nèi)存中存在。
初始化
類加載最后一個階段就是初始化階段。前面的類加載階段之后,除了在加載階段可以自定義類加載器以外,其它操作都由Java虛擬機主導。到了初始階段,才開始真正執(zhí)行類中定義的Java程序代碼。