日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat WebappClassLoader 类加载机制源码分析

發(fā)布時間:2024/9/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat WebappClassLoader 类加载机制源码分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

需要了解的知識JVM 類加載機(jī)制深入淺出

tomcat中的ClassLoader

  • 啟動類加載器(BootStrap ClassLoader):引導(dǎo)類裝入器是用本地代碼實(shí)現(xiàn)的類裝入器,它負(fù)責(zé)將 jdk中jre/lib下面的核心類庫或-Xbootclasspath選項指定的jar包加載到內(nèi)存中。由于引導(dǎo)類加載器涉及到虛擬機(jī)本地實(shí)現(xiàn)細(xì)節(jié),開發(fā)者無法直接獲取到啟動類加載器的引用,所以不允許直接通過引用進(jìn)行操作。
  • 擴(kuò)展類加載器(Extension ClassLoader):擴(kuò)展類加載器是由Sun的ExtClassLoader(sun.misc.Launcher$ExtClassLoader)實(shí)現(xiàn)的。它負(fù)責(zé)將jdk中jre/lib/ext或者由系統(tǒng)變量-Djava.ext.dir指定位置中的類庫加載到內(nèi)存中。開發(fā)者可以直接使用標(biāo)準(zhǔn)擴(kuò)展類加載器。
  • 系統(tǒng)類加載器(System ClassLoader):系統(tǒng)類加載器是由 Sun的 AppClassLoader(sun.misc.Launcher$AppClassLoader)實(shí)現(xiàn)的。它負(fù)責(zé)將系統(tǒng)類路徑j(luò)ava -classpath或-Djava.class.path變量所指的目錄下的類庫加載到內(nèi)存中。開發(fā)者可以直接使用系統(tǒng)類加載器。
  • StandardClassLoader 負(fù)責(zé)加載tomcat容器相關(guān)的類
  • WebappClassLoader 是每個web項目對應(yīng)一個WebappClassLoader。這樣做的目的是每個項目中都會有相同的類(package+classname),而類的內(nèi)容不一樣。這樣每個項目一個WebappClassLoader可以達(dá)到隔絕項目類沖突的問題。

下面我們主要講解下WebappClassLoader的類加載機(jī)制

第一步


首先調(diào)用findLoaderClass0() 方法檢查WebappClassLoader中是否加載過此類。


WebappClassLoader 加載過的類都存放在 resourceEntries 緩存中。

protected final Map<String, ResourceEntry> resourceEntries = new ConcurrentHashMap<>();

第二步


如果第一步?jīng)]有找到,則繼續(xù)檢查JVM虛擬機(jī)中是否加載過該類。
調(diào)用ClassLoader的findLoadedClass() 方法檢查

第三步


如果前兩步都沒有找到,則使用AppClassloader加載該類(也就是當(dāng)前JVM的ClassPath)

第四步


如果前三步都沒找到,通過filter() 方法檢查該類是否在定義的包名下,如果在則通過 StandardClassLoader類加載。

第五步


如果前4步都沒有找到,將由WebappClassLoader來加載。


從當(dāng)前的工程的Web-INF/classes 目錄下查找


如果找到,則創(chuàng)建ResourceEntry對象,保存這個類的元信息,并把他保存在WebappClassLoader的resourceEntries中,便于下次查找。

本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
點(diǎn)擊這里快速進(jìn)入簡書

GIT地址:http://git.oschina.net/brucekankan/
點(diǎn)擊這里快速進(jìn)入GIT

總結(jié)

以上是生活随笔為你收集整理的Tomcat WebappClassLoader 类加载机制源码分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。