【JVM】Tomcat的类加载器架构

一、概述

主流的java web服务器,如Tomcat、Jetty、webLogic等服务器,都实现了自己定义的类加载器(一般不止一个)。因为一个功能健全的web服务器,就都要解决以下几个问题

(1)部署在同一台服务器上的2个web应用程序所使用的java类库可以实现相互隔离,这个是最基本的需求。

(2)部署在同一台服务器上的2个web应用程序所使用的java类库可以相互共享,这个需求很常见,如有10个使用Spring组织的应用程序部署在同一台服务器上,如果有10分spring分别放在各个应用程序中,将会是很大的资源浪费。 另外的问题是,一个tomcat只启动一个JVM,如果10个同样的spring库类要加载10次,虚拟机JVM的方法区(类区)将会出现过度膨胀的风险

(3)服务器需要尽可能地保证自身的安全不受部署Web应用的影响。因此服务器本身也有类库依赖的问题,基于安全考虑,服务器所使用的类库是需要与应用程序的类库独立开来的

二、基于上述几个问题,Tomcat是怎么处理的

Tomcat类加载器

(1)每个应用程序都有自己的ClassPath路径,一般是以”lib”或”classed”命名。这样每个应用程序也会有自己这个程序对应的类加载器,这样会保证每个应用程序加载的类都是与其他应用程序是隔离的,WebApp ClassLoader A ,WebApp ClassLoader B。

(2)那么如果需要同时公用的类库,就放置在Tomcat/lib目录下,Common ClassLoader会进行加载,那个不管是哪个WebAPP都可以共享这个类库了

(3)
1. 放置在/common目录中;类库可被Tomcat和所有的web应用程序共同使用。
2. 放置在/server目录中:类库可被Tomcat使用,对所有的Web应用程序都不可见
3. 放置在/shared目录中:类库可被所有web应用程序共同使用,但对Tomcat自己不可见。
4. 放置在/WebApp/WEB-INF目录中:类库仅仅可以被此web应用程序使用,对Tomcat和其他web应用程序都不可见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值