圖解tomcat類載入機制(tomcat7)
圖解tomcat類載入機制(tomcat7
)
1.1 java類載入器
1.1.1 類載入
在JVM中並不是一次性把所有的檔案都載入,按時按需載入,比如JVM啟動時,會通過不同的類載入器載入不同的類。當使用者在自己的程式碼中,需要某些額外的類時,再通過載入機制載入到JVM中,並且存放一段時間,便於頻繁使用。
1.1.2 什麼是類載入器
類載入器是一個用來載入類檔案的類,java原始碼通過javac編譯器編譯成類檔案,然後JVM來執行類檔案中的位元組碼來執行程式,類載入器負責載入檔案系統、網路或其他 來源的類檔案。有三種預設的類載入器:
BootStrap
類載入器–載入/jre/lib/rt.jarExtension
類載入器– /jre/lib/ext/下的jar包Application
類載入器-載入使用者類路徑CLASSPATH下的類
下面介紹類的載入順序,例如載入com.xxx.Test
類
- 首先由
Application
類載入器委託給它的父類載入器Extension類載入器,然後再委託給Bootstrap類載入器。 BootStrap
類載入器會先看看rt.jar中有沒有這個類,如果沒有這個類,則把這個載入請求返回給Extension類載入器,Extension
類載入器會檢視/jre/lib/ext/目錄下有沒有這個類,如果沒有,則交由Application類載入器處理。Application
類載入器從classpath中尋找,如果還是沒有,則報ClassNotFoundException異常
1.2 tomcat類載入器
如上圖所示,tomcat在初始化時建立以下類載入器:
Bootstrap 類載入器
載入JVM啟動所需的類以及標準擴充套件類($JAVA_HOME/jre/lib/ext下)
System類載入器
載入tomcat啟動所需的類,通常在catalina.bat或者catalina.sh中指定。位於CATALINA_HOME/bin下。
包含一下類:$CATALINA_HOME/bin/bootstrap.jar
:tomcat server啟動所需的main方法,
$CATALINA_BASE/bin/tomcat-juli.jar
:日誌介面實現類,包含java.util.logging
API 。Common 類載入器
這個類載入器包含對Tomcat內部類和所有Web應用程式都可見的附加類。 位於 $CATALINA_BASE/lib下
webappclassloader
每個web應用都有一個對應的類載入器例項,該類載入器也使用代理模式,所不同的是它是首先嚐試去載入某個類,如果找不到再代理給父類載入器。這與一般載入器的順序是相反的。這是java servlet規範中的推薦做法,其目的是是的web應用自己的類優先順序高與web容器提供的類。這種代理模式的一個例外是:Java核心庫是不再查詢範圍之內的。這也是為了保證Java核心庫的型別安全。
因此,從web應用程式的角度來看,類或資源載入的順序如下:
- 使用Bootstrap 載入器載入
- web application下的/WEB_INF/classes
- web application下的/WEB_INF/lib/*.jar
- System類載入器
- Common類載入器
如果應用程式配置了,則變成一下順序:
- BootStrap類載入器
- System類載入
- Common類載入器
- web application下的/WEB_INF/classes
- web application下的/WEB_INF/lib/*.jar
相關文章
- Tomcat類載入機制探析Tomcat
- Tomcat 第六篇:類載入機制Tomcat
- tomcat7 與 tomcat8 載入 jar包的順序TomcatJAR
- 類載入機制
- 虛擬機器類載入機制:類載入時機虛擬機
- 類的載入機制
- JVM:類載入機制JVM
- JVM類載入機制JVM
- java類載入機制Java
- 探祕類載入器和類載入機制
- JVM系列(四) – JVM類載入機制詳解JVM
- JVM系列(四) - JVM類載入機制詳解JVM
- 類載入機制總結
- 類載入機制與反射反射
- JVM-類載入機制JVM
- 虛擬機器類載入機制_類載入的過程虛擬機
- 類載入流程,類載入機制及自定義類載入器
- 自定義類載入器驗證類載入機制
- JVM類載入機制及雙親委派機制原始碼解讀JVM原始碼
- 虛擬機器類載入機制虛擬機
- Java類載入機制詳解【java面試題】Java面試題
- Java類載入機制總結Java
- JVM初探(三):類載入機制JVM
- JVM類載入機制小結JVM
- 談談 Java 類載入機制Java
- Flink 類載入機制介紹
- 虛擬機器類載入機制_類載入時機和類的生命週期虛擬機
- Java基礎-類載入器以及載入機制Java
- 【JVM進階之路】十四:類載入器和類載入機制JVM
- java虛擬機器類載入機制Java虛擬機
- Java 虛擬機器類載入機制Java虛擬機
- Java面試題之Java類載入機制詳解!Java面試題
- JVM學習(三)——類載入機制JVM
- Java類載入機制-雙親委派Java
- 理解JVM(四):JVM類載入機制JVM
- 玩命學JVM(二)—類載入機制JVM
- JVM之類載入機制總結JVM
- 深入理解OSGi類載入機制