3 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
java應(yīng)用環(huán)境中不同的class分別由不同的ClassLoader負(fù)責(zé)加載。
一個(gè)jvm中默認(rèn)的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分別各司其職:
Bootstrap ClassLoader負(fù)責(zé)加載java基礎(chǔ)類,主要是 %JRE_HOME/lib/ 目錄下的rt.jar、resources.jar、charsets.jar和class等;
Extension ClassLoader負(fù)責(zé)加載java擴(kuò)展類,主要是 %JRE_HOME/lib/ext 目錄下的jar和class;
App ClassLoader負(fù)責(zé)加載當(dāng)前java應(yīng)用的classpath中的所有類。
其中Bootstrap ClassLoader是JVM級(jí)別的,由C++撰寫;Extension ClassLoader、App ClassLoader都是java類,都繼承自URLClassLoader超類。
Bootstrap ClassLoader由JVM啟動(dòng),然后初始化sun.misc.Launcher ,sun.misc.Launcher初始化Extension ClassLoader、App ClassLoader。
Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader三者的關(guān)系如下:
Bootstrap ClassLoader是Extension ClassLoader的parent,Extension ClassLoader是App ClassLoader的parent。
但是這并不是繼承關(guān)系,只是語(yǔ)義上的定義,基本上,每一個(gè)ClassLoader實(shí)現(xiàn),都有一個(gè)Parent ClassLoader。
可以通過(guò)ClassLoader的getParent方法得到當(dāng)前ClassLoader的parent。Bootstrap ClassLoader比較特殊,因?yàn)樗皇莏ava class所以Extension ClassLoader的getParent方法返回的是NULL。
添加回答
舉報(bào)