什么是 tomcat 类加载机制?

1 个回答

  • 林霜
    垆边人似月,皓腕凝霜雪。
    ### 什么是 Tomcat 类加载机制? 在 Tomcat 中,类加载机制与一般的 Java 应用有所不同。Tomcat 在启动时会创建几种类加载器,各自有不同的职责和作用域。以下是 Tomcat 类加载器的层次结构和工作机制: ### Tomcat 类加载器层次结构 1. **Bootstrap 类加载器** - **作用**:加载 JVM 启动所需的类,以及标准扩展类(位于 `jre/lib/ext` 下)。 - **加载内容**:核心 Java 类库。 2. **System 类加载器** - **作用**:加载 Tomcat 启动的类。 - **加载内容**:如 `bootstrap.jar`,通常在 `catalina.bat` 或 `catalina.sh` 中指定,位于 `CATALINA_HOME/bin` 下。 3. **Common 类加载器** - **作用**:加载 Tomcat 共享的库。 - **加载内容**:位于 `CATALINA_HOME/lib` 下的类库。 4. **Webapp 类加载器** - **作用**:加载每个 Web 应用的类和库。 - **加载内容**:包括 `WEB-INF/classes` 和 `WEB-INF/lib` 下的类和 JAR 文件。 5. **Shared 类加载器** - **作用**:加载共享类库(已在新版 Tomcat 中取消)。 - **加载内容**:位于 `CATALINA_HOME/shared/lib` 下的类库(仅适用于旧版 Tomcat)。 ### 类加载器的工作机制 1. **双亲委派模型** - **流程**:类加载请求会首先委派给父加载器,父加载器无法加载时,子加载器才会尝试加载。 - **优点**:保证 Java 核心类库的安全性和统一性。 2. **Web 应用隔离** - **特点**:每个 Web 应用都有自己的类加载器,互相隔离,确保应用间不会发生类冲突。 ### 类加载顺序 1. **引导类加载器**加载 JVM 的核心类库。 2. **系统类加载器**加载 Tomcat 启动类。 3. **通用类加载器**加载 Tomcat 的共享库。 4. **Web 应用类加载器**加载各自应用的类和库。 ### 示例 ```text Bootstrap └── System └── Common ├── Webapp1 ├── Webapp2 └── ... ``` ### 总结 Tomcat 的类加载机制通过层次结构和双亲委派模型,实现了类的安全加载和应用的隔离,保证了 Tomcat 的高效运行和稳定性。 ### Tomcat 类加载机制与 JVM 类加载机制的区别 #### JVM 类加载机制 - **Bootstrap 类加载器**:加载核心 Java 类库(如 `java.lang.*`)。 - **Extension 类加载器**:加载扩展类库(如 `javax.*`)。 - **System 类加载器**:加载应用程序类路径(如 `CLASSPATH`)。 #### Tomcat 类加载机制 - **Bootstrap 类加载器**:加载 JVM 核心类库。 - **System 类加载器**:加载 Tomcat 启动类(如 `bootstrap.jar`)。 - **Common 类加载器**:加载 Tomcat 共享库(如 `CATALINA_HOME/lib`)。 - **Webapp 类加载器**:加载各个 Web 应用的类和库(如 `WEB-INF/classes` 和 `WEB-INF/lib`)。 #### 主要区别 1. **加载范围**:Tomcat 具有额外的类加载层次,用于隔离和管理多个 Web 应用的类库。 2. **共享与隔离**:Tomcat 的类加载器隔离各个 Web 应用,防止类库冲突;JVM 类加载器主要管理系统和应用的类库。 3. **层次结构**:Tomcat 类加载器层次更复杂,增加了 `Common` 和 `Webapp` 类加载器,以支持 Web 应用的独立运行和资源共享。 ### 总结 Tomcat 的类加载机制通过增加更多的加载层次和隔离机制,增强了对多个 Web 应用的支持和管理,相对于 JVM 的类加载机制更适合复杂的服务器环境。
    发布于 2024-07-23 12:30 •IP属地 山东
    举报
    评论
    收藏