(转)java类加载器及常用java应用服务器类加载机制简介

一.java类加载器机制简介



这个由Bootstrap Loader -> ExtClassLoader -> AppClassLoader,就是java类装载器的层次体系。

Bootstrap Loader是参考系统参数sun.boot.class.path;
ExtClassLoader是参考系统参数java.ext.dirs;
AppClassLoader 是参考从系统参数java.class.path取出的字符串。

Bootstrap Loader搜索路径是系统参数,无法更改,他的搜索路径为jdk目录\jre\lib下的一些jar包;
ExtClassLoader的搜索路径为jdk目录\jre\lib\ext下的所有class或jar包;
AppClassLoader的搜索路径为系统的classpath。

AppClassLoader和ExtClassLoader的搜索路径可以修改,但是不能在执行时间动态更改。

java中类装载采用“代理机制”,即子装载器如果需要装载一个类文件,首先会将此任务提交给父装载器,
如果父装载器找不到此类文件,才有子装载器来装载类文件,如果子装载器也找不到,
那么就会报告ClassNotFoundException异常。



如图所示:

[img]http://dl.iteye.com/upload/attachment/427764/f25a397d-df68-3dcd-bcca-36d7eef9b69e.bmp[/img]




二.tomcat应用服务器中的类加载机制



1.BootStrap classloader(加载JRE/lib下的rt.jar和其他重要jar文件)
2.ExtClassLoader (加载JRE/lib/ext下的jar文件,Java扩展框架使用)
3.AppClassLoader ($CATALINA_HOME/bin/下bootstrap.jar, commons-logging -api.jar,commons-daemon.jar,$JAVA_HOME/lib/tools.jar,jmx.jar)
4.common (加载$CATALINA_HOME/common/,Tomcat本身和Web App共享类)
5.Catalina (加载$CATALINA_HOME /server/,Tomcat本身使用的类)
Shared (加载$CATALINA_BASE /shared/,所有Web App共享类)
6.WebappClassLoader (加载各个Web App的class,不同的Web App被隔离开)

注意:Tomcat完全忽略了classpath的设置,而重新设置了classpath,所以AppClassLoader 载入的类将不是class path设置的类。



三.weblogic应用服务器中的类加载机制



当部署一个应用的时候,weblogic server会自动创建一个具有层次结构的类装载器。
在图中,
1. 系统类路径加载器负责装载应用中的所有的EJB JAR文件;
2. 应用程序加载器负责装载所有的Web application 中的WAR 文件(所有得jsp文件除外);
3. Jsp Classloader 负责装载Web application 中的所有的jsp 文件;

weblogic中默认有以下几个级别:
1.系统类路径,除了java路径和java扩展路径,这个算是级别最高的了。
2.APP-INF/lib or APP-INF/classes,它比系统类路径的级别低了一级。
3.WEB-INF/lib or WEB-INF/classes,这个应该是最低的级别了。

classLoader在装载类的时间会从上而下的顺序来装载类。首先装载java自身的类(安全考虑),如果没有找到要装载的类,就查找java扩展路径下的类,如果还没找到就系统类路径,在然后 APP-INF/lib or APP-INF/classes,再然后WEB-INF/lib or WEB-INF/classes。



如图所示:


[img]http://dl.iteye.com/upload/attachment/427766/dcbe20a2-2e59-30bc-aca7-e647b537b119.bmp[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值