类加载机制

类加载机制
    叙述:类加载机制就是将.class文件加载到JVM,并形成class对象的机制。之后就可以对其实例化并使用,这个机制可以动态的加载外部的类、远程下载的class文件,并且可以做到类之间的隔离。
    步骤:JVM加载的步骤:装载、链接、初始化。
            装载:将class文件中的字节码加载到JVM,并通过全名(org.test.Test)和类加载器(ClassLoader)来加载到JVM中。
            链接:负责对装载的二进制字节码的格式进行检验,初始化类中的静态标量并检查类中调用的接口、类。最后对所有的属性、方法进行检验。
         初始化:初始化是执行静态初始化代码、构造器代码和静态属性的初始化
                    出发的方式:1.new 2.反射 3.子类调用初始化 4.JVM启动参数中的类
ClassLoader:有4种ClassLoader负责加载类。
    1.Bootstrap ClassLoader
        由C++实现的,来加载jre/lib/rt.jar、resources.jar等。在java中无法拿到此对象。
    2.Extension ClassLoader
        用来加载java扩展包,jre/lib/ext/*.jar。
    3.System ClassLoader
        用来加载参数中的指定的classpath的jar,在类中显示对应的是AppClassLoader。
    4.User-Defined ClassLoad
        是java开发人员继承ClassLoader抽象类自行实现的ClassLoader,可以加载非classpath中的类(网络下载的java、class),还可以在加载之前做一些事情。

加载顺序:
     首先要说明一个误区,这个误区是经常理解有问题的。
        classloader加载的只是class(类),不要认为它加载的是对象,这样你就会很是理解不了classloader加载顺序。
        classloader的顺序是先父后子(这里因为Bootstrap ClassLoader在java中拿不到,所以他是最先完成加载的)
        已委托的方式循序加载
        例如:User-Defined ClassLoad有个一类要加载则先会去委托System ClassLoader加载依此类推,每个节点都会委托父节点去加载,
                如果父节点没有加载到自己再去加载,如果父节点加载了将吧加载的引用返回给自己。
        两个java类相同的条件不尽需要同样的包名和class而且加载器也必须相同,这样的类才算是统一各类。比如有classloaderA和classloaderB,都加在了
Test类,两次别加载的类是不一样的。这也体现出了隔离性。

posted on 2012-03-27 15:16 海峰 阅读(139) 评论(0)  编辑  收藏 所属分类: JVM理解


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


网站导航:
 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜