Skip to content

Commit f0463d1

Browse files
authored
Update classloader documentation for clarity
Clarified the role of SharedClassLoader in Tomcat's class loading hierarchy and its default behavior in relation to CommonClassLoader.
1 parent 561b774 commit f0463d1

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

docs/java/jvm/classloader.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ Tomcat 这四个自定义的类加载器对应的目录如下:
361361
从图中的委派关系中可以看出:
362362

363363
- `CommonClassLoader`作为 `CatalinaClassLoader``SharedClassLoader` 的父加载器。`CommonClassLoader` 能加载的类都可以被 `CatalinaClassLoader``SharedClassLoader` 使用。因此,`CommonClassLoader` 是为了实现公共类库(可以被所有 Web 应用和 Tomcat 内部组件使用的类库)的共享和隔离。
364-
- `CatalinaClassLoader``SharedClassLoader` 能加载的类则与对方相互隔离。`CatalinaClassLoader` 用于加载 Tomcat 自身的类,为了隔离 Tomcat 本身的类和 Web 应用的类。`SharedClassLoader` 作为 `WebAppClassLoader` 的父加载器,专门来加载 Web 应用之间共享的类比如 Spring、Mybatis
364+
- `CatalinaClassLoader``SharedClassLoader` 能加载的类则与对方相互隔离。`CatalinaClassLoader` 用于加载 Tomcat 自身的类,为了隔离 Tomcat 本身的类和 Web 应用的类。`SharedClassLoader` 作为 `WebAppClassLoader` 的父加载器,专门来加载 Web 应用之间共享的类,但是在Tomcat的默认配置下`catalina.properties`配置文件的`shared.loader= `值为空,所以`SharedClassLoader` 并不生效,`SharedClassLoader` 实际上会退化为 `CommonClassLoader``SharedClassLoader`比较合适用来加载多个web应用间共享的类库,比如整个公司级别的监控、日志等
365365
- 每个 Web 应用都会创建一个单独的 `WebAppClassLoader`,并在启动 Web 应用的线程里设置线程线程上下文类加载器为 `WebAppClassLoader`。各个 `WebAppClassLoader` 实例之间相互隔离,进而实现 Web 应用之间的类隔。
366366

367367
单纯依靠自定义类加载器没办法满足某些场景的要求,例如,有些情况下,高层的类加载器需要加载低层的加载器才能加载的类。

0 commit comments

Comments
 (0)