Xiaobo Sun

          Eclipse-Unix http://umlfact.berlios.de/~s_xsun/

          Java Class Loader

           Class loader priority is bootstrap >extension >application (or system)

          1. bootstrap: 主要是負責裝載jre/lib下的jar文件,當然,你也可以通過-Xbootclasspath參數定義。該ClassLoader不能被Java代碼實例化,因為它是JVM本身的一部分
          2. extension: 該ClassLoader是Bootstrap classLoader的子class loader。它主要負責加載jre/lib/ext/下的所有jar文件。只要jar包放置這個位置,就會被虛擬機加載。一個常見的、類似的問題是,你 將mysql的低版本驅動不小心放置在這兒,但你的Web應用程序的lib下有一個新的jdbc驅動,但怎么都報錯,譬如不支持JDBC2.0的 DataSource,這時你就要當心你的新jdbc可能并沒有被加載。這就是ClassLoader的delegate現象。常見的有log4j、 common-log、dbcp會出現問題,因為它們很容易被人塞到這個ext目錄,或是Tomcat下的common/lib目錄。
          3. application loader: 也稱為System ClassLoaer。它負責加載CLASSPATH環境變量下的classes。缺省情況下,它是用戶創建的任何ClassLoader的父 ClassLoader,我們創建的standalone應用的main class缺省情況下也是由它加載(通過Thread.currentThread().getContextClassLoader()查看)。

          我們實際開發中,用ClassLoader更多時候是用其加載classpath下的資源,特別是配置文件,如ClassLoader.getResource(),比FileInputStream直接。

          ClassLoader是一種分級(hierarchy)的代理(delegation)模型。
          Delegation:其實是Parent Delegation,當需要加載一個class時,當前線程的ClassLoader首先會將請求代理到其父classLoader,遞歸向上,如果該 class已經被父classLoader加載,那么直接拿來用,譬如典型的ArrayList,它最終由Bootstrap ClassLoader加載。并且,每個ClassLoader只有一個父ClassLoader。
          Class查找的位置和順序依次是:Cache、parent、self。
          Hierarchy: 上面的delegation已經暗示了一種分級結構,同時它也說明:一個ClassLoader只能看到被它自己加載的 classes,或是看到其父(parent) ClassLoader或祖先(ancestor) ClassLoader加載的Classes。
          在一個單虛擬機環境下,標識一個類有兩個因素:class的全路徑名、該類的ClassLoader。

          ===================Tomcat Class Loading==========================================


          posted on 2008-12-21 12:23 Xiaobo Sun 閱讀(244) 評論(0)  編輯  收藏 所屬分類: Java

          <2008年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 义乌市| 榕江县| 康马县| 库车县| 洛南县| 缙云县| 伊川县| 汉寿县| 景谷| 揭阳市| 洛南县| 简阳市| 德格县| 南雄市| 天柱县| 拉孜县| 靖西县| 平南县| 始兴县| 铁力市| 额济纳旗| 襄城县| 云和县| 鄯善县| 康定县| 开原市| 榆社县| 类乌齐县| 罗田县| 靖州| 福清市| 平安县| 桦南县| 兴安县| 迁安市| 长治县| 翁源县| 贵港市| 惠来县| 巴南区| 汕头市|