java JVM為什么要3個(gè)類(lèi)加載器?
JVM為什么要3個(gè)類(lèi)加載器?JVM有三種加載程序:bootstrap負(fù)責(zé)加載系統(tǒng)類(lèi),extclassloader負(fù)責(zé)加載擴(kuò)展類(lèi),appclassloader負(fù)責(zé)加載應(yīng)用程序類(lèi)。他們主要負(fù)責(zé)不同領(lǐng)域的工
JVM為什么要3個(gè)類(lèi)加載器?
JVM有三種加載程序:bootstrap負(fù)責(zé)加載系統(tǒng)類(lèi),extclassloader負(fù)責(zé)加載擴(kuò)展類(lèi),appclassloader負(fù)責(zé)加載應(yīng)用程序類(lèi)。他們主要負(fù)責(zé)不同領(lǐng)域的工作,同時(shí)也負(fù)責(zé)授權(quán)模式的實(shí)施。實(shí)際上,當(dāng)不需要添加父類(lèi)來(lái)搜索路徑時(shí),需要使用加載程序來(lái)查找路徑。
執(zhí)行Java*時(shí)。班級(jí),java.exe文件將幫助我們找到JRE,然后找到j(luò)vm.dll這是真正的Java虛擬機(jī)。最后,加載動(dòng)態(tài)庫(kù)并激活Java虛擬機(jī)。在虛擬機(jī)被激活之后,它將執(zhí)行一些初始化操作,例如讀取系統(tǒng)參數(shù)。初始化完成后,將生成第一個(gè)類(lèi)裝入器——引導(dǎo)裝入器。Bootstrap loader是由C語(yǔ)言編寫(xiě)的,在Bootstrap loader的初始工作中,除了一些基本的初始化操作外,最重要的是加載啟動(dòng)器.java并將其父加載程序設(shè)置為null,這意味著父加載程序是引導(dǎo)加載程序。然后引導(dǎo)加載程序要求再次加載啟動(dòng)器.java并將其父級(jí)設(shè)置為之前生成的extclassloader實(shí)體。這兩個(gè)加載程序都以靜態(tài)類(lèi)的形式存在。需要注意的是,launcher$ExtClassLoader.class類(lèi)帶啟動(dòng)器$AppClassLoader.class類(lèi)它們都是由引導(dǎo)加載程序加載的,所以父級(jí)與要加載的類(lèi)加載程序無(wú)關(guān)。