博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tomcat的class加载机制
阅读量:7217 次
发布时间:2019-06-29

本文共 1143 字,大约阅读时间需要 3 分钟。

hot3.png

众所周知,jvm ClassLoader采用双亲委派加载机制,先进行科普下jvm的双亲委派(parents Delegation Model)。

jvm有三种加载类分别是

BootClassLoader,用于加载虚拟机自己的类包,路径JAVA_HOME/lib 或者 -Xbootclasspath指定的,下并且是被虚拟机识别的(按照文件名识别,如果在lib下但是不被虚拟机识别的名称的jar也不会加载的)

ExtensionClassLoader, 加载系统拓展类,路径JAVA_HOME/lib/ext  或者 java.ext.dirs系统变量指定的路径

ApplicationClassLoader 应用加载类,主要就是用户自己开发的类 

他们的层级也自然是从下至上,但是他们的上下级关系不是真正的继承而是组合模式(引用父级classLoader)

那么何为双亲委派呢?当一个类加载器要加载一个类时它会首先问自己的 上级是否能够加载,逐级询问直到最高级都不能加载时它再去加载。

tomcat在遵循双亲委派机制的同时,自己额外新增了几个个加载器分别是commonclassloader   sharedclassloader  catalinaclassloader webappclassloader  jspclassloader

我们先不讨论这几个加载器是干嘛用的,tomcat有支持4个目录分别是common、shared、server、web-inf/lib,common下的类库tomcat和应用都能使用,shared目录下的类库所有的web应用都能共享,server目录下的类库只有tomcat能够使用,最后一个WEB-INF/lib下的类库只能被所属系统应用使用,那么从描述自然可以感受到上述几个加载器对应加载目录及层级关系了

225859_PdH3_1378657.png

(catalinaclassloader加载server目录下类库)

一个web应用一个webappclassloader

jspclassloader专门用于加载jsp生成的class文件的,一个jsp文件一个jspclassloader,当jsp文件发生更改时都会新增一个jspclassloader用与加载器并删除旧的jsp加载器。

tomcat6以上的版本,大家可能看不到common,shared,server这些目录,只有lib,lib目录的作用就相当于common的作用,如果需要server,shared这样的类库区分,可以在conf下修改catalina.xml配置就,指定server.loader  shared.loader

转载于:https://my.oschina.net/francis0115/blog/389232

你可能感兴趣的文章
PowerDesigner执行SQL生成模型
查看>>
软件项目技术点(2)——Canvas之平移translate、旋转rotate、缩放scale
查看>>
软件项目技术点(25)——提升性能之检测绘制范围
查看>>
linux的基本操作1
查看>>
puppeteer 填充基础表单
查看>>
邻接表存储
查看>>
web 常用开发工具
查看>>
Silverlight LoaderException错误
查看>>
qt5.4.1的imx6编译
查看>>
我的window10
查看>>
【转载】jQuery的.live()和.die()
查看>>
函数式编程--函数式接口
查看>>
python--常用模块calendar
查看>>
register form
查看>>
Java中的clone
查看>>
Lucene基础(2)
查看>>
Oracle 存储过程
查看>>
java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?...
查看>>
FlasCC发布说明
查看>>
如何在macOS Sierra中运行CORE Keygen破解程序
查看>>