類加載器

Java是程序設計語言

java也是一個shell命令,我們啓動Java程序用 java --setting   xxxx.java   這個命令啓動JVM,setting是啓動這個JVM給的各種參數,比如內存,垃圾蒐集器等等等等,當然你不設置,sun給你了弄了些默認值,這些默認值很多會智能的根據你的機器來設置,有些你就要根據自己的需求自己琢磨了。

 

本文記錄JVM的一個重要部件:類加載器

 

當啓動JVM的時候,可以使用三個類加載器:引導(bootstrap)類加載器、擴展(extensions)類加載器、應用程序(application)類加載器。

1.引導類加載器僅僅負責加載核心的Java庫,e.g. java.*javax.*, etc。這個類加載器,是JVM核心部分,是用native代碼寫成的。

2. 擴展類加載器負責加載擴展路徑下的代碼,一般位於<JAVA_HOME>/jre/lib/ext  或者通過java.ext.dirs 這個系統屬性指定的路徑下的代碼。這個類加載器是由sun.misc.Launcher$ExtClassLoader 實現的。

3.應用程序類加載器負責加載java.class.path(映射系統參數 CLASSPATH的值) 路徑下面的代碼,這個類加載器是由 sun.misc.Launcher$AppClassLoader 實現的,如果你接觸過JavaEE,你會發現tomcat會從什麼lib之類的目錄加載類,那是因爲tomcat搞了自己的類加載器,可看下圖:


當處理類加載器時,父委託模式是一個需要理解的關鍵概念。它規定:類加載器在加載自己的類之前,可以委託先加載父類。父類加載器可以是客戶化的類加載器或者引導類加載器。但是有一點很重要,類加載器只能委託自己的父類加載器,而不能是子類加載器(只能向上不能向下)。

 如果應用程序類加載器需要加載一個類,它首先委託擴展類加載器,擴展類加載器再委託引導類加載器。如果父類加載器不能加載類,子類加載器就回在自己的庫中查找這個類。基於這個特性,類加載器只負責它的祖先無法加載的類。

 

發佈了26 篇原創文章 · 獲贊 1 · 訪問量 1224
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章