JAVA類加載器

JAVA類加載器有三大類

  1. BootstarpClassLoder是頂級(jí)類加載器,默認(rèn)加載%JAVA_HOME%中l(wèi)ib文件夾下的jar包和class文件,在ExtClassLoader中使用parent字段指向該類,但沒有繼承關(guān)系;
  2. ExtClassLoder是擴(kuò)展類加載器,默認(rèn)加載%JAVA_HOME%中l(wèi)ib文件夾下的jar包和class文件,在AppClassLoader中使用parent字段指向該類,但沒有繼承關(guān)系;
  3. AppClassLoader(應(yīng)用程序加載器/系統(tǒng)類加載器)是自定義加載器的父類,負(fù)責(zé)加載classPath下的類文件,引用的jar包以及自定義類都是這個(gè)加載器進(jìn)行加載的,同時(shí)AppClassLoader還是線程上下文加載器,如果想實(shí)現(xiàn)一個(gè)自定義加載器的話就繼承(extends)ClassLoader來(lái)實(shí)現(xiàn).

類加載的流程

2.1. 向上委派

AppClassLoader是加載我們自己編寫的class類的,當(dāng)他遇到一個(gè)新的class類的時(shí)候,不會(huì)直接進(jìn)行加載,而是向上委派給ExtClassLoader,向上委派就是去查找ExtClassLoader是否緩存了這個(gè)class類,如果有則返回,如果沒有則繼續(xù)委派給BootstrapClassLoader,如果BootstrapClassLoader中緩存有則加載返回.

2.2. 向下查找

開始進(jìn)行向下查找了,就意味著當(dāng)前class類向上委派到BootstrapClassLoader時(shí)還是沒有該類的緩存,此時(shí)BootstrapClassLoader會(huì)查找加載自己路徑也就是%JAVA_HOME%/lib下的jar與class類文件,如果有則加載返回,沒有則繼續(xù)向下查找。ExtClassLoader也是做同樣的操作。查找加載ExtClassLoader對(duì)應(yīng)路徑的文件,如果有則加載返回,沒有則繼續(xù)向下到AppClassLoader查找加載,AppClassLoader是加載classPath也就是我們程序員自己編寫的class類,如果AppClassLoader找不到則會(huì)拋出找不到class類異常

2.3. 流程簡(jiǎn)介

向往委派是到頂層類加載器為止,向下查找是到發(fā)起的加載器為止,如果是有自定義類加載的情況,發(fā)起和截至?xí)沁@個(gè)自定義加載器。

2.4. 作用

這樣做的原因主要是為了安全,避免程序員編寫類動(dòng)態(tài)替換Java的核心類比如說String,同時(shí)也是避免了相同的class類被不同的ClassLoader重復(fù)加載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ClassLoader介紹 類加載器是負(fù)責(zé)加載類的一個(gè)對(duì)象,ClassLoader是一個(gè)抽象類。最常見的加載策略是...
    taj3991閱讀 2,503評(píng)論 1 4
  • ClassLoader的簡(jiǎn)單介紹 Class的裝載大體上可以分為加載類、連接類和初始化三個(gè)階段,在這三個(gè)階段中,所...
    Y了個(gè)J閱讀 5,134評(píng)論 0 0
  • 1. Java 的類加載器的種類都有哪些? 1、根類加載器(Bootstrap) --C++寫的 ,看不到源碼2、...
    hycomb閱讀 179評(píng)論 0 0
  • 什么是類加載器 Java 需要把源代碼編譯成 .class 文件,程序才能運(yùn)行,那個(gè)類加載器就是把 .class ...
    RobertCrazying閱讀 838評(píng)論 0 0
  • 1、 ClassLoader 是做什么的 顧名思義,它是用來(lái)加載Class的。它負(fù)責(zé)將Class 的字節(jié)碼形式轉(zhuǎn)換...
    霸體閱讀 699評(píng)論 0 1

友情鏈接更多精彩內(nèi)容