【轉】java中三個類別加載器的關系以及各自加載的類的范圍


http://bbs.tech.ccidnet.com/read.php?tid=663217

 

Java在需要使用類別的時候,才會將類別加載,Java的類別載入是由類別載入器(Class loader)來達到的,預設上,在程序啟動之后,主要會有三個類別加載器:Bootstrap Loader、ExtClassLoader與AppClassLoader。

Bootstrap Loader是由C++撰寫而成,預設上它負責搜尋JRE所在目錄的classes或lib目錄下的.jar檔案中(例如rt.jar)是否有指定的類別並加載(實際上是由系統參數sun.boot.class.path指定);預設上ExtClassLoader負責搜尋JRE所在目錄的lib/ext 目錄下的classes或.jar中是否有指定的類別並加載(實際上是由系統參數java.ext.dirs指定);AppClassLoader則搜尋 Classpath中是否有指定的classes並加載(由系統參數java.class.path指定)。

Bootstrap Loader會在JVM啟動之后載入,之后它會載入ExtClassLoader並將ExtClassLoader的parent設為Bootstrap Loader,然后BootstrapLoader再加載AppClassLoader,並將AppClassLoader的parent設定為 ExtClassLoader。

在加載類別時,每個類別加載器會先將加載類別的任務交由其parent,如果parent找不到,才由自己負責加載,如果自己也找不到,就會丟出 NoClassDefFoundError。

每一個類別被載入后,都會有一個Class的實例來代表它,每個Class的實例都會記得是哪個ClassLoader加載它的,可以由Class的getClassLoader()取得加載該類別的ClassLoader。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM