JVM类加载器
- 父类委托机制
父类委托机制
- 加载器层级关系: CustomClassLoader -> AppClassLoader(应用类) -> ExtClassloader(jdk/jre/lib/ext) -> BootstrapClassLoader(JVM需要的类)
- 加载器需要加载classA时,先委托父类加载classA
- 每个类的加载过程都是自顶向下加载
注意点
- 如果应用类与系统类同名,只会加载系统类
- 这样做的原因是,防止用户自定义了Object应用类,JVM误加载了用户自定义的Object类,导致所有系统Object类的派生类使用异常
Tomcat类加载器
- 加载器层级关系:
- Bootstrap:JVM类及$JAVA_HOME/jre/lib/ext)
- System(catalina.bat/catalina.sh中指定位置的类
- $CATALINA_HOME/bin/bootstrap.jar
- CATALINABASE/bin/tomcat−juli.jar或 C A T A L I N A B A S E / b i n / t o m c a t − j u l i . j a r 或 CATALINA_HOME/bin/tomcat-juli.jar(日志功能辅助类)
- $CATALINA_HOME/bin/commons-daemon.jar
- Common
- $CATALINA_BASE/lib下已解压的类和资源
- $CATALINA_BASE/lib下jar包
- $CATALINA_HOME/lib下已解压的类和资源
- $CATALINA_HOME/lib下jar包
- WebappX
- /WEB-INF/classes
- /WEB-INF/lib
- 加载顺序:
- Bootstrap
- WebappX
- System
- Common