ClassLoader of Java

          乍一看到ClassLoader,我的第一感覺就是這東西好神秘啊。然后找了一下資料,略懂了一點皮毛,然后在這里和大家分享一下,這篇文章在接下來的日子里會不斷的被更新,希望會越來越完善。

          首先,我們了解一下ClassLoader是干什么用的呢?
          大家都知道,JVM解析的是Class的字節碼文件,那么JVM怎樣來加載這個字節碼文件呢,沒錯,ClassLoader負責了這項重要的工作。

          JDK中主要有以下幾種ClassLoader:

          a, Bootstrap ClassLoader/啟動類加載器
          主要負責jdk_home/lib目錄下的核心 api 或 -Xbootclasspath 選項指定的jar包裝入工作.

           

          b, Extension ClassLoader/擴展類加載器
          主要負責jdk_home/lib/ext目錄下的jar包或 -Djava.ext.dirs 指定目錄下的jar包裝入工作

           

          c, System ClassLoader/系統類加載器
          主要負責java -classpath/-Djava.class.path所指的目錄下的類與jar包裝入工作.

           

          b, User Custom ClassLoader/用戶自定義類加載器(java.lang.ClassLoader的子類)
          在程序運行期間, 通過java.lang.ClassLoader的子類動態加載class文件, 體現java動態實時類裝入特性.


          那么我們能用ClassLoader做什么事情呢?

          如果我們想動態的加載一個類,比如我們想實現一個Hot-Swap的應用,我們期望一個剛開發的高版本的Class在不關閉JVM的情況下讓它工作,此時我們就可以實現我們自己的ClassLoader,重寫里面的findClass方法。


          這里我們需要注意ClassLoader的雙親委托模式,即定義ClassLoader加載一個類之前,要先委托它的父親ClassLoader進行加載,只有當父親ClassLoader無法加載成功后,才會由自己加載。為什么要使用這種雙親委托模式呢? 


          第一個原因就是因為這樣可以避免重復加載,當父親已經加載了該類的時候,就沒有必要子ClassLoader再加載一次。 

          第二個原因就是考慮到安全因素,我們試想一下,如果不使用這種委托模式,那我們就可以隨時使用自定義的String來動態替代java核心api中定義類型,這樣會存在非常大的安全隱患,而雙親委托的方式,就可以避免這種情況,因為String已經在啟動時被加載,所以用戶自定義的ClassLoader 無法加載另外的String。

           


          參考資料:

          http://www.iteye.com/topic/136427

          http://www.iteye.com/topic/83978




          Kyle Wang

          posted on 2012-04-22 17:15 王樹東 閱讀(185) 評論(0)  編輯  收藏 所屬分類: Java Skills Learning and Sharing


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          公告

          常用鏈接

          留言簿

          隨筆分類(17)

          隨筆檔案(15)

          文章分類(4)

          文章檔案(5)

          收藏夾(4)

          Algorithm

          Design

          Environment Setup

          Installer

          Maven

          MINA

          OS

          Skills for Java

          VIM

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汝阳县| 西安市| 阿合奇县| 海门市| 房产| 沧州市| 道孚县| 天镇县| 独山县| 新竹市| 阳泉市| 霸州市| 牙克石市| 肇州县| 潍坊市| 溧水县| 锡林浩特市| 临沭县| 保德县| 肃北| 深圳市| 巴彦县| 建水县| 菏泽市| 乌什县| 蓬安县| 苏尼特右旗| 萨迦县| 南京市| 通江县| 新平| 安远县| 惠东县| 吴旗县| 宽甸| 互助| 太原市| 商都县| 河曲县| 公主岭市| 高淳县|