classloader记录

classloader是一个双亲委派模型的结构.

一般是如上图结构
Bootstrap ClassLoader/启动类加载器
他的parent为null, 主要负责'sun.boot.class.path'系统属性指定的 或 -Xbootclasspath 选项指定的jar包装入工作.
Bootstrap ClassLoader是jvm控制的,不是java语言层面编写的,默认加载jdk_home/jre/lib/下面的jar包和其他相关的东西,如jdk的核心包rt.jar就是在这里被加载的

Extension ClassLoader/扩展类加载器
主要负责jdk_home/jre/lib/ext目录下('java.ext.dirs'系统属性指定)的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作,他的parent为 Bootstrap ClassLoader

System ClassLoader/系统类加载器
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.一般我们会配置环境变量classpath,这个就是载入classpath指定的路径下jar和class,
平常我们指定一个"."号,就是指定从当前目录下开始搜索class类.parent为 Extension ClassLoader.

User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
在程序运行期间, 通过java.lang.ClassLoader的子类加载class文件.


classloader要加载class先从底向上传递给父亲加载类,最顶层的classloader如果能够加载就加载进来,不行的话,就自上而下传递,只到一个classloader能进行类的加载,
如果没有一个classloader能加载的话,就会抛出ClassNotFoundException或者NoClassDefFoundError异常,这个就是双亲委派模式

classloader这种模式保证了不同的classloader之间类不会相互的影响,那么也保证了好的类不会被恶意的类所破坏,这个也是jvm沙箱模式安全的一个保证

在不同classloader的同名的类实例不能互相沟通,类型转换,instanceof,如果这样做,则会抛出ClassCastException.所以抛出ClassCastException的原因不止和继承,实现有关系,
还和classloader有关系.

当运行时发现一个新class要load时,除代码已指定由哪classloader的实例load外,先由调用者的classloader所在的classloader tree去load,如果super类/interface类对于这个树是新的也一起会被load。这是caller classloader的概念.
双亲委派可以被打破,全权负责也可被打破,所以运行时决定类来自哪里,还是由classloader树和load class的代码是怎样而决定。

Thread Context ClassLoader:线程上下文classloader,是hold住了一ClassLoader的实例,这个holder在线程运行流程里可以到达隐式传递classloader。这个classloader是一个不会主动load的实例,就是说在这个线程运行下遇到新类这个classloader不会主动去load,只有自己用显式代码或你看不见的jar里用显式代码用这个

classloader loadClass()或Class.forName(),才会生效。因此,caller classloader和 thread context classloader,在执行到你的代码时,已定。并且执行流程的不同,到你代码时的入口也不同,被放置入thread的thread context classloader和Caller ClassLoader不一定一样,因此是不稳定的

需要稳定的话,就要保证在设计时就考虑到各种入口和用法的情况,然后得到确定的classloader存在 thread context classloader或者第三方的class loader中,tomcat的类加载体系就是这样做的.

posted on 2011-08-24 10:40 nod0620 阅读(352) 评论(0)  编辑  收藏 所属分类: java


只有注册用户登录后才能发表评论。


网站导航:
相关文章:
 
<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜