Java類加載機制

類加載器

類加載器 加載路徑 描述
啓動類加載器(Bootstrap)

<Java_Runtime_Home>/lib下面的核心類庫或-Xbootclasspath選項指定的jar包加載到內存中java

引導類裝入器是用本地代碼實現的類裝入器 因爲引導類加載器涉及到虛擬機本地實現細節,開發者沒法直接獲取到啓動類加載器的引用,因此不容許直接經過引用進行操做。
擴展類加載器(Extension) < Java_Runtime_Home >/lib/ext或者由系統變量-Djava.ext.dir指定位置中的類庫加載到內存中 擴展類加載器是由Sun的ExtClassLoader(sun.misc.Launcher$ExtClassLoader)實現的 開發者能夠直接使用標準擴展類加載器。
系統類加載器(System) 系統類路徑java -classpath或-Djava.class.path變量所指的目錄下的類庫加載到內存中 系統類加載器是由 Sun的 AppClassLoader(sun.misc.Launcher$AppClassLoader)實現的,開發者能夠直接使用系統類加載器

類加載機制

JVM在加載類時默認採用的是雙親委派機制。通俗的講,就是某個特定的類加載器在接到加載類的請求時,首先將加載任務委託給父類加載器,依次遞歸,若是父類加載器能夠完成類加載任務,就成功返回;只有父類加載器沒法完成此加載任務時,才本身去加載spa

自定義類加載器

自定義類加載器沒有指定父類加載器的狀況下,默認的父類加載器即爲系統類加載器。同時,咱們能夠得出以下結論:即便用戶自定義類加載器不指定父類加載器,那麼,一樣能夠加載以下三個地方的類:
  1. <Java_Runtime_Home>/lib下的類;
  2. < Java_Runtime_Home >/lib/ext下或者由系統變量java.ext.dir指定位置中的類;
  3. 當前工程類路徑下或者由系統變量java.class.path指定位置中的類。.net

線程上下文類加載器

    線程上下文類加載器(context class loader)是從 JDK 1.2 開始引入的。類 java.lang.Thread中的方法 getContextClassLoader()和 setContextClassLoader(ClassLoader cl)用來獲取和設置線程的上下文類加載器。若是沒有經過 setContextClassLoader(ClassLoader cl)方法進行設置的話,線程將繼承其父線程的上下文類加載器。Java 應用運行的初始線程的上下文類加載器是系統類加載器。在線程中運行的代碼能夠經過此類加載器來加載類和資源。 使用線程上下文類加載器,能夠在執行線程中拋棄雙親委派加載鏈模式,使用線程上下文裏的類加載器加載類線程

參考

http://blog.csdn.net/zhoudaxia/article/details/35824249blog

相關文章
相關標籤/搜索