java類加載器包括幾種 java里有多少個(gè)類加載器?
java里有多少個(gè)類加載器?Java類加載器分為兩類,一類是系統(tǒng)類加載器,另一類是自定義類加載器。有三個(gè)系統(tǒng)類加載器:引導(dǎo)類加載器、擴(kuò)展類加載器、系統(tǒng)類加載器(和線程上下文類加載器,但主要有三個(gè));用
java里有多少個(gè)類加載器?
Java類加載器分為兩類,一類是系統(tǒng)類加載器,另一類是自定義類加載器。有三個(gè)系統(tǒng)類加載器:引導(dǎo)類加載器、擴(kuò)展類加載器、系統(tǒng)類加載器(和線程上下文類加載器,但主要有三個(gè));用戶定義的類加載器使用繼承java.lang.ClassLoader類加載器類,它不指定數(shù)量。
Java類加載器負(fù)責(zé)讀取Java字節(jié)碼并將其轉(zhuǎn)換為java.lang.Class類班級(jí)。
類加載器主要有五個(gè)階段:1。加載:找到要加載的類的字節(jié)碼,創(chuàng)建實(shí)例對(duì)象
2。驗(yàn)證:檢查字節(jié)信息,防止對(duì)虛擬機(jī)造成傷害
3。準(zhǔn)備:為類變量分配內(nèi)存,并指定初始化值
4。解析:用直接引用替換常量池中的符號(hào)引用的過程
5。初始化:如果類有一個(gè)超類,那么JVM有三種加載程序:bootstrap負(fù)責(zé)加載系統(tǒng)類,extclassloader負(fù)責(zé)加載擴(kuò)展類,appclassloader負(fù)責(zé)加載應(yīng)用程序類。他們主要負(fù)責(zé)不同領(lǐng)域的工作,同時(shí)也負(fù)責(zé)授權(quán)模式的實(shí)施。什么是授權(quán)模式?實(shí)際上,當(dāng)類裝入器需要裝入時(shí),它首先要求其父類使用父類的搜索路徑進(jìn)行聯(lián)接。如果找不到,它將使用自己的搜索路徑來搜索類。
執(zhí)行Java*時(shí)。班級(jí),java.exe文件將幫助我們找到JRE,然后找到j(luò)vm.dll這是真正的Java虛擬機(jī)。最后,加載動(dòng)態(tài)庫并激活Java虛擬機(jī)。在虛擬機(jī)被激活之后,它將執(zhí)行一些初始化操作,例如讀取系統(tǒng)參數(shù)。初始化完成后,將生成第一個(gè)類裝入器——引導(dǎo)裝入器。Bootstrap loader是由C語言編寫的,在Bootstrap loader的初始工作中,除了一些基本的初始化操作外,最重要的是加載啟動(dòng)器.java并將其父加載程序設(shè)置為null,這意味著父加載程序是引導(dǎo)加載程序。然后引導(dǎo)加載程序要求再次加載啟動(dòng)器.java并將其父級(jí)設(shè)置為之前生成的extclassloader實(shí)體。這兩個(gè)加載程序都以靜態(tài)類的形式存在。需要注意的是,launcher$ExtClassLoader.class類帶啟動(dòng)器$AppClassLoader.class類它們都是由引導(dǎo)加載程序加載的,所以父級(jí)與要加載的類加載程序無關(guān)。