Tomcat是如何載入類的
類載入機制
類載入器有兩大類:1.JDK自帶的 2.使用者自定義的
JDK自帶類載入器分成3種:
1.Bootstrap ClassLoader 啟動類載入器: 載入/jre/lib下面的類,特別的 /jre/lib/rt.jar 中包含了 sun.misc.Launcher 類, 而 sun.misc.Launcher$ExtClassLoader 和 sun.misc.Launcher$AppClassLoader 都是 sun.misc.Launcher 的內部類,所以擴充類載入器和系統類載入器都是由啟動類載入器載入的
2.Externsion ClassLoader 擴充套件類載入器:用於載入擴充庫中的類。擴充庫路徑為 <JAVA_HOME>/jre/lib/ext/。實現類為 sun.misc.Launcher$ExtClassLoader
3.System ClassLoader 系統類載入器:用於載入 CLASSPATH 中的類。實現類為 sun.misc.Launcher$AppClassLoad
雙親委派原則:如果一個類受到了類載入的請求。他首先不會嘗試自己載入這個類,而是把這個類交給父類載入器完成,每個父類載入器也是如此,只有當父類載入器在自己搜尋的範圍類找不到指定的類時,子類載入器才會嘗試自己去載入。
雙親委派原則:解決了各個類載入器的基礎類的統一問題
Tomcat 是如何載入類的?
1. BootStrap 引導類載入器
載入 JVM 啟動所需要的類,
2. ExtClassLoader
載入JVM標準擴充套件類(jre/lib/ext)
3. System 系統類載入器
載入Tomcat啟動的類,比如bootstrap.jar,通常在catalina.bat或者catalina.sh中指定。位於CATALINA_HOME/bin下。
4. Common 通用類載入器
載入Tomcat使用以及應用通用的一些類,位於CATALINA_HOME/lib下,比如servlet-api.jar
5. webapp 應用類載入器
該類載入器會載入位於 WEB-INF/lib下的jar檔案中的class 和 WEB-INF/classes下的class檔案
Tomcat類載入器如下:
Tomcat 並不是嚴格的按照雙親委派原則載入類的。
1.一個web 容器可能需要部署兩個應用程式,不同的應用程式可能會以來同一個第三方庫的不同版本,不能要求同一個類庫在同一個服務中只有一份。但是要相互隔離。
2. Tomcat 為了實現隔離性,每個 WebClassLoader 載入自己的目錄下的 class 檔案,不會傳遞給父類。
Tomcat 不遵循雙親委派機制,那麼如果我自己定義一個惡意的HashMap,會不會有風險呢?
不會有風險,載入 JVM 的Bootstrap 和
Tomcat是個web容器, 那麼它要解決什麼問題:
1. 一個web容器需要部署多個程式,保證每個應用程式都是獨立的,保證相關隔離。
2.部署在同一個 web 容器中相同的類庫的版本可以共享,假如10個應用程式,要用10分相同的類 載入虛擬機器是不現實的。因此可以採用 sharedLoader 進行類載入。
https://www.cnblogs.com/javastack/p/13354545.html
https://www.cnblogs.com/aspirant/p/8991830.html
相關文章
- 還是Tomcat,關於類載入器的趣味實驗Tomcat
- Tomcat 類載入器的實現Tomcat
- Tomcat類載入機制探析Tomcat
- JVM是如何進行載入類的?JVM
- 圖解tomcat類載入機制(tomcat7)圖解Tomcat
- Tomcat中的類是怎麼被一步步載入的?Tomcat
- Tomcat 第六篇:類載入機制Tomcat
- Tomcat是如何載入Spring和SpringMVC及Servlet相關知識TomcatSpringMVCServlet
- 雙親委派模型與Tomcat類載入架構模型Tomcat架構
- 類與類的載入
- 實戰分析Tomcat的類載入器結構(使用Eclipse MAT驗證)TomcatEclipse
- jvm如何載入一個類JVM
- 面試官:Java類是如何被載入到記憶體中的?面試Java記憶體
- Activity 是如何載入佈局的?
- SpringBoot是如何載入配置檔案的?Spring Boot
- tomcat7 與 tomcat8 載入 jar包的順序TomcatJAR
- 類檔案的結構、JVM 的類載入過程、類載入機制、類載入器、雙親委派模型JVM模型
- 類載入
- 類載入流程,類載入機制及自定義類載入器
- 什麼是Tomcat? 如何在IDEA中配置Tomcat?TomcatIdea
- jvm虛擬機器載入類,是把類的屬性和方法全載入了嗎JVM虛擬機
- MetingJS 是如何配合 Aplayer 載入歌單的?JS
- 虛擬機器類載入機制_類載入的過程虛擬機
- 類的載入機制
- 類的載入時機
- 探祕類載入器和類載入機制
- Tomcat在SpringBoot中是如何啟動的TomcatSpring Boot
- SpringBootApplication是如何啟動Tomcat的? | 破解SpringBoot Tomcat啟動之謎 !Spring BootAPPTomcat
- jvm類載入JVM
- [JVM]類載入JVM
- 自定義類載入器驗證類載入機制
- 虛擬機器類載入機制_類載入時機和類的生命週期虛擬機
- java類的載入過程Java
- 整理類載入的過程
- 類的載入過程概述
- 一個Java類的載入Java
- 類載入-載入時機學習
- Tomcat中的容器是如何處理請求的Tomcat