mxdxm 发表于 2013-2-5 01:45:19

ClassLoader 原理

JVM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defined class loader)。


 
一.    ClassLoader基本概念1.ClassLoader分类类装载器是用来把类(class)装载进JVM的。
JVM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defined class loader)。

JVM在运行时会产生三个ClassLoader:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader.Bootstrap是用C++编写的,我们在Java中看不到它,是null,是JVM自带的类装载器,用来装载核心类库,如java.lang.*等。
AppClassLoader的Parent是ExtClassLoader,而ExtClassLoader的Parent为Bootstrap ClassLoader。
 
Java提供了抽象类ClassLoader,所有用户自定义类装载器都实例化自ClassLoader的子类。 System Class Loader是一个特殊的用户自定义类装载器,由JVM的实现者提供,在编程者不特别指定装载器的情况下默认装载用户类。系统类装载器可以通过ClassLoader.getSystemClassLoader() 方法得到。
 
例1,测试你所使用的JVM的ClassLoader
/*LoaderSample1.java*/
<div style="padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; padding-top: 4px; border: #cccccc 1px solid;">public   class  LoaderSample1 {
     public   static   void  main(String[] args) {
        Class c;
        ClassLoader cl;
        cl  =  ClassLoader.getSystemClassLoader();
        System.out.println(cl);
         while  (cl  !=   null ) {
            cl  =  cl.getParent();
            System.out.println(cl);
        }
         try  {
            c  =  Class.forName( " java.lang.Object " );
            cl  =  c.getClassLoader();
            System.out.println( " java.lang.Object's loader is  "   +  cl);
            c  =  Class.forName( " LoaderSample1 " );
            cl  =  c.getClassLoader();
            System.out.println( " LoaderSample1's loader is  "   +  cl);
        }  catch  (Exception e) {
            e.printStackTrace();
        }
    }
}
页: [1]
查看完整版本: ClassLoader 原理