面试知识点2:Tomcat中的类加载机制

JVM类加载机制

SUN JVM中的ClassLoader采用的是双亲委派加载模式,类加载器之间是树状父子关系。加载类时首先检查父加载器能否加载,只有父加载器不能加载的情况下,才会自己加载。这样的好处是可以防止Java的核心类被恶意程序覆盖。

JVM内置的类加载器有3个:

1.        Bootstrap ClassLoader:

这个加载器是native代码实现的,主要负责加载核心的Java库rt.jar中的类。

2.        Extensions ClassLoader:

负责载入标准扩展目录中的类,例如JVM的扩展目录是/jdk/jre/lib/ext。

3.        Application ClassLoader:

默认的类加载器,加载CLASSPATH路径中的类。

Tomcat类加载机制

Tomcat中除了使用JVM的委派加载模型,还使用了自己的加载方式,称之为servlet加载模型。Tomcat8.0中WebappClassLoader的核心方法loadClass:

1.      首先检查本地缓存是否存在(findLoadedClass0/ findLoadedClass)。

2.      委托系统加载器进行加载。

3.      如果设置delegate,委托给delegate父加载器加载,不成功再从本地加载。

4.      如果没有设置delegate,先从本地进行加载,不成功委托父加载器加载。

Tomcat中默认使用的是servlet加载方式,即先检查本地是否能够加载,如果不能再委托给父加载器。

jar包的加载顺序:

1.      Java基础包

2.      Web应用:WEB-INF\classes, WEB-INF\lib下的包。

3.      Tomcat\lib下的包。

因此,如果在Web中共享jar包的话,除了将jar文件放在Tomcat\lib,还要从Web应用中删除该jar包,否则,不同应用使用不同加载器进行加载,会造成ClassCastException。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值