ClassLoader问题
2017-03-17 14:27:53 0 举报
ClassLoader是Java类加载器的核心,负责将.class文件加载到JVM中。它采用双亲委派模型进行类的加载,即当一个类需要被加载时,首先由父类加载器尝试加载,如果父类加载器无法加载,则由子类加载器尝试加载。这种机制保证了Java核心库的类型安全和稳定性。同时,ClassLoader还支持自定义类加载器,以满足特殊需求。在实际应用中,ClassLoader的使用需要注意避免内存泄漏、确保线程安全等问题。
作者其他创作
大纲/内容
查找时:LogFactory在查找log4j.jar时使用的是Thread Current Class Loader(WebAppClassLoader), 能找到log4j.jar;加载时:LogFactory加载Log4JLogger,Log4JLogger加载Logger, LogFactory是由ApplicationClassLoader加载的; 由于传递性,加载Logger使用的是ApplicationClassLoader;
parent ClassLoader
TOMCAT/webapps/xxx/xxx.jsp
TOMCAT/webapps/xxx/classes/*.classTOMCAT/webapps/xxx/WEB-INF/lib/*.jar
JasperClassLoader
类查找顺序
类加载顺序
NoClassDefFoundError
LogFactory.classLog4JLogger.class
WebAppClassLoader
CatalinaClassLoader
Tomcat
CLASSPATH-Djava.class.path
commons-logging-1.0.4.jar
AppClassLoader
TOMCAT/shared/classes/*.classTOMCAT/shared/*.jar
custom
commons-logging.jar
TOMCAT/bin/*.jar
ExtensionClassLoader
JRE/lib/ext/*.jar-Djava.ext.dirs
BootstrapClassLoader
Tomcat6开始 common/、server/、shared/合并为lib/
JCLBindLog4jTest.class
JRE/lib/rt.jar-Xbootclasspath
CommonClassLoader
LogFactory.class
SharedClassLoader
log4j-1.2.16.jar
URLClassLoader
CustomClassLoader
Log4JLogger.class
Tomcat6以后不再包含commons-logging.jar
jcl-bind-log4j-1.0-SNAPSHOT.jar
log4j.jar
Logger.class
webapp
TOMCAT/server/classes/*.classTOMCAT/server/*.jar
TOMCAT/common/classes/*.classTOMCAT/common/*.jar
0 条评论
下一页