JVM17_Tomcat打破双亲委派机制、执行顺序、底层代码原理、Tomcat|JDBC破坏双亲委派机制带来的面试题(一)

简介: ①. Tomcat类加载机制②. Tomcat执行顺序

①. Tomcat类加载机制


①. 可以看到,在原来的 JVM 的类加载机制上面,Tomcat 新增了几个类加载器,包括 3 个基础类加载器和每个 Web 应用的类加载器。3个基础类加载器在 conf/catalina.properties 中进行配置:


common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
server.loader=
shared.loader=


②.Common:以应用类加载器为父类,是Tomcat顶层的公用类加载器,其路径由conf/catalina.pr operties中的common.loader指定,默认指向${catalina.home}/lib下的包


③. Catalina:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不 可见,其路径由server.loader指定,默认为空,此时Tomcat使用Common类加载器加载应用服务器


④. Shared:以Common类加载器为父类,是所有Web应用的父类加载器,其路径由shared.loader指定,默认为空,此时Tomcat使用Common类加载器作为Web应用的父加载器


⑤. Web应用:以Shared类加载器为父类,加载/WEB-INF/classes目录下的未压缩的Class和资源文件以及/WEB-INF/lib目录下的jar包,该类加载器只对当前Web应用可见,对其他Web应用均不可见


⑥. Tomcat8 和 Tomcat6比较大的区别是:


Tomcat8可以通过配置 <Loader delegate="true"/>表示遵循双亲委派机制


微信图片_20220107154002.png


②. Tomcat执行顺序


①. 使用bootstrap引导类加载器加载


②. 使用system系统类加载器加载


③. 使用应用类加载器在WEB-INF/classes中加载


④. 使用应用类加载器在WEB-INF/lib中加载


⑤. 使用common类加载器在CATALINA_HOME/lib中加载


⑥.我们已经知道了tomcat为什么要这么设计,以及是如何设计的,那么,tomcat违背了java推荐的双亲委派模型了吗?答案是:违背了。我们前面说过:双亲委派模型要求除了顶层的启动类加载器之外,其余的类加载器都应当由自己的父类加载器加载。


很显然,tomcat不是这样实现,tomcat为了实现隔离性,没有遵守这个约定,每个webappClassLoad er加载自己的目录下的class文件,不会传递给父类加载器。


微信图片_20220107154030.png




相关文章
|
21天前
|
存储 缓存 Java
金石原创 |【JVM盲点补漏系列】「并发编程的难题和挑战」深入理解JMM及JVM内存模型知识体系机制(1)
金石原创 |【JVM盲点补漏系列】「并发编程的难题和挑战」深入理解JMM及JVM内存模型知识体系机制(1)
34 1
|
6月前
|
Java 开发者 容器
【面试题精讲】JVM-打破双亲委派机制-OSGI模块化
【面试题精讲】JVM-打破双亲委派机制-OSGI模块化
|
1月前
|
安全 前端开发 Java
【JVM】双亲委派机制详细解读(通俗易懂)
【JVM】双亲委派机制详细解读(通俗易懂)
81 0
|
3月前
|
缓存 安全 前端开发
JVM(类的加载与ClassLoader、双亲委派机制)
JVM(类的加载与ClassLoader、双亲委派机制)
|
3月前
|
前端开发 Java API
JVM 类加载器 双亲委派机制
【1月更文挑战第3天】JVM 类加载器 双亲委派机制
|
4月前
|
SQL 算法 Java
jdbc(ikun)实现事务的开启,提交,回滚代码示例
jdbc(ikun)实现事务的开启,提交,回滚代码示例
|
4月前
|
存储 缓存 前端开发
JVM(二):Class加载机制
JVM(二):Class加载机制
|
5月前
|
存储 算法 安全
面试~jvm(JVM内存结构、类加载、双亲委派机制、对象分配,了解垃圾回收)
面试~jvm(JVM内存结构、类加载、双亲委派机制、对象分配,了解垃圾回收)
53 0
|
6月前
|
Arthas 前端开发 安全
【面试题精讲】JVM-双亲委派机制
【面试题精讲】JVM-双亲委派机制
|
6月前
|
前端开发 Java C++
【面试题精讲】JVM-打破双亲委派机制-自定义类加载器
【面试题精讲】JVM-打破双亲委派机制-自定义类加载器