1、JVM三種預(yù)定義類型類加載器
我們首先看一下JVM預(yù)定義的三種類加載器,當JVM啟動的時候,Java缺省開始使用如下三種類型的類加載器:
啟動(Bootstrap)類加載器:引導(dǎo)類加載器是用?本地代碼實現(xiàn)的類加載器,它負責(zé)將?<JAVA_HOME>/lib下面的核心類庫?或?-Xbootclasspath選項指定的jar包等?虛擬機識別的類庫?加載到內(nèi)存中。由于引導(dǎo)類加載器涉及到虛擬機本地實現(xiàn)細節(jié),開發(fā)者無法直接獲取到啟動類加載器的引用,所以?不允許直接通過引用進行操作。
擴展(Extension)類加載器:擴展類加載器是由Sun的ExtClassLoader(sun.misc.Launcher$ExtClassLoader)實現(xiàn)的,它負責(zé)將/lib/ext或者由系統(tǒng)變量-Djava.ext.dir指定位置中的類庫?加載到內(nèi)存中。開發(fā)者可以直接使用標準擴展類加載器。
系統(tǒng)(System)類加載器:系統(tǒng)類加載器是由 Sun 的 AppClassLoader(sun.misc.Launcher$AppClassLoader)實現(xiàn)的,它負責(zé)將?用戶類路徑(java -classpath或-Djava.class.path變量所指的目錄,即當前類所在路徑及其引用的第三方類庫的路徑,如第四節(jié)中的問題6所述)下的類庫?加載到內(nèi)存中。開發(fā)者可以直接使用系統(tǒng)類加載器。