共計(jì) 706 個(gè)字符,預(yù)計(jì)需要花費(fèi) 2 分鐘才能閱讀完成。
Java 類的加載機(jī)制是指 Java 虛擬機(jī) (JVM)在運(yùn)行時(shí),加載和初始化 Java 類的過(guò)程。
Java 類的加載過(guò)程主要分為三個(gè)階段:
- 加載(Loading):在加載階段,JVM 根據(jù)類的全限定名(即類的包名加上類名)來(lái)查找并加載類的字節(jié)碼文件。具體來(lái)說(shuō),JVM 會(huì)根據(jù)類加載器(ClassLoader)的層次結(jié)構(gòu),先嘗試使用啟動(dòng)類加載器(Bootstrap ClassLoader)加載類,如果找不到,則由擴(kuò)展類加載器(Extension ClassLoader)加載類,最后由應(yīng)用程序類加載器(Application ClassLoader)加載類。如果以上類加載器都找不到類,則會(huì)拋出 ClassNotFoundException 異常。
- 鏈接(Linking):在鏈接階段,JVM 對(duì)類的字節(jié)碼進(jìn)行驗(yàn)證、準(zhǔn)備和解析等操作。
- 驗(yàn)證(Verification):驗(yàn)證階段主要是確保類的字節(jié)碼符合 Java 虛擬機(jī)規(guī)范,并且不會(huì)損害虛擬機(jī)的安全性。
- 準(zhǔn)備(Preparation):準(zhǔn)備階段主要是為類的靜態(tài)變量分配內(nèi)存,并設(shè)置默認(rèn)初始值。
- 解析(Resolution):解析階段主要是將類、接口、字段和方法的符號(hào)引用解析為直接引用。
- 初始化(Initialization):在初始化階段,JVM 執(zhí)行類的靜態(tài)變量賦值和靜態(tài)代碼塊的代碼,以及執(zhí)行類中定義的靜態(tài)方法。在這個(gè)階段,JVM 會(huì)保證多線程環(huán)境下的安全性,即只有一個(gè)線程能夠初始化類,其他線程需要等待。
需要注意的是,類的加載過(guò)程是在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行的,而不是在編譯時(shí)靜態(tài)進(jìn)行的。這意味著,Java 代碼中引用的類,在編譯時(shí)可能還不存在,只有在運(yùn)行時(shí)才會(huì)被加載和初始化。
丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!
正文完