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
- 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