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