Java基础——类加载机制
什么叫類加載
JVM把 .class 字節(jié)碼文件加載到內(nèi)存,并進(jìn)行相關(guān)的校驗(yàn)、解析、初始化,最終轉(zhuǎn)換為虛擬機(jī)可用的JAVA類型的過(guò)程,稱為JVM類加載機(jī)制。
(當(dāng)然,JVM并不關(guān)心class文件的來(lái)源,什么?什么叫class文件?——每一個(gè)Java class文件都對(duì)一個(gè)Java類或者Java接口做出了全面描述)
類加載器的分類
啟動(dòng)(Bootstrap)類加載器:引導(dǎo)類裝入器是用本地代碼實(shí)現(xiàn)的類裝入器,它負(fù)責(zé)將?<Java_Runtime_Home>/lib下面的核心類庫(kù)或-Xbootclasspath選項(xiàng)指定的jar包加載到內(nèi)存中。由于引導(dǎo)類加載器涉及到虛擬機(jī)本地實(shí)現(xiàn)細(xì)節(jié),開(kāi)發(fā)者無(wú)法直接獲取到啟動(dòng)類加載器的引用,所以不允許直接通過(guò)引用進(jìn)行操作。(也叫根加載器)
擴(kuò)展(Extension)類加載器:擴(kuò)展類加載器是由Sun的ExtClassLoader(sun.misc.Launcher$ExtClassLoader)實(shí)現(xiàn)的。它負(fù)責(zé)將< Java_Runtime_Home >/lib/ext或者由系統(tǒng)變量-Djava.ext.dir指定位置中的類庫(kù)加載到內(nèi)存中。開(kāi)發(fā)者可以直接使用標(biāo)準(zhǔn)擴(kuò)展類加載器。
系統(tǒng)(System)類加載器:系統(tǒng)類加載器是由?Sun的?AppClassLoader(sun.misc.Launcher$AppClassLoader)實(shí)現(xiàn)的。它負(fù)責(zé)將系統(tǒng)類路徑j(luò)ava -classpath或-Djava.class.path變量所指的目錄下的類庫(kù)加載到內(nèi)存中。開(kāi)發(fā)者可以直接使用系統(tǒng)類加載器。
這三個(gè)類加載器還分階級(jí)
3的領(lǐng)導(dǎo)是2 2的領(lǐng)導(dǎo)是1 1就是BOSS
雙親委派模型
雙親委派模型的工作過(guò)程為:如果一個(gè)類加載器收到了類加載的請(qǐng)求,它首先不會(huì)自己去嘗試加載這個(gè)類,而是把這個(gè)請(qǐng)求委派給父類加載器去完成,每一個(gè)層次的加載器都是如此,因此所有的類加載請(qǐng)求都會(huì)傳給頂層的啟動(dòng)類加載器,只有當(dāng)父加載器反饋?zhàn)约簾o(wú)法完成該加載請(qǐng)求(該加載器的搜索范圍中沒(méi)有找到對(duì)應(yīng)的類)時(shí),子加載器才會(huì)嘗試自己去加載
轉(zhuǎn)載于:https://www.cnblogs.com/zhuangwei1015/p/10010025.html
總結(jié)
以上是生活随笔為你收集整理的Java基础——类加载机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql共享锁
- 下一篇: kido机器人没反应_QQ机器人常见故障