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