1、全盤(pán)負(fù)責(zé),當(dāng)一個(gè)類(lèi)加載器負(fù)責(zé)加載某個(gè)Class時(shí),該Class所依賴(lài)的和引用的其他Class也將由該類(lèi)加載器負(fù)責(zé)載入,除非顯示使用另外一個(gè)類(lèi)加載器來(lái)載入;
2、父類(lèi)委托,先讓父類(lèi)加載器試圖加載該類(lèi),只有在父類(lèi)加載器無(wú)法加載該類(lèi)時(shí)才嘗試從自己的類(lèi)路徑中加載該類(lèi);
3、緩存機(jī)制,緩存機(jī)制將會(huì)保證所有加載過(guò)的Class都會(huì)被緩存,當(dāng)程序中需要使用某個(gè)Class時(shí),類(lèi)加載器先從緩存區(qū)尋找該Class,只有緩存區(qū)不存在,系統(tǒng)才會(huì)讀取該類(lèi)對(duì)應(yīng)的二進(jìn)制數(shù)據(jù),并將其轉(zhuǎn)換成Class對(duì)象,存入緩存區(qū)。這就是為什么修改了Class后,必須重啟JVM,程序的修改才會(huì)生效;
4、雙親委派機(jī)制,如果一個(gè)類(lèi)加載器收到了類(lèi)加載的請(qǐng)求,它首先不會(huì)自己去嘗試加載這個(gè)類(lèi),而是把請(qǐng)求委托給父加載器去完成,依次向上,因此,所有的類(lèi)加載請(qǐng)求最終都應(yīng)該被傳遞到頂層的啟動(dòng)類(lèi)加載器中,只有當(dāng)父加載器在它的搜索范圍中沒(méi)有找到所需的類(lèi)時(shí),即無(wú)法完成該加載,子加載器才會(huì)嘗試自己去加載該類(lèi)。