JAVA的类装载器(ClassLoader)

原创 2007年09月13日 13:12:00
Java的类装载器是Java 动态性核心,Java虚拟机使用每一个类时的第一件事就是将该类的字节码装载进来,装载字节码的功能是由类装载起来完成的,类装载器负责根据一个类的名称类定位和生成类的字节码数据后返回给Java虚拟机。所以把类装载器描叙为类字节码的制造器更容易让人理解。
 
Java虚拟机中内嵌了一个bootstrap的装载器,它是用来装载核心库中的类(即jdk/jre/lib/rt.jar文件中类),Java核心包中有另外两个类装载器:ExtClassLoader和AppClassLoader,它们都是用java编写的java类,ExtClassLoader类装载器负责加载放在<JAVA_HOME>/jre/lib/ext目录下的jar包中了类,AppClassLoader负责加载应用程序的启动加载类。
 
Java提供了抽象类ClassLoader,所有用户自定义类装载器都实例化自ClassLoader的子类。
System Class Loader是一个特殊的用户自定义类装载器,由JVM的实现者提供,在编程者不特别指定装载器的情况下默认装载用户类。系统类装载器可以通过ClassLoader.getSystemClassLoader() 方法得到。
 
 
例1,测试你所使用的JVM的ClassLoader
/*LoaderSample1.java*/
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();//parent实例化
                     System.out.println(cl);         
              }
 
              try
              {
                     c = Class.forName(“java.lang.Object”);
                     cl = c.getClassLoader();//核心类java.lang.Object实例化
                     System.out.println(“java.lang.Object’s loader is ” + cl);
 
                     c = Class.forName(“LoaderSample1”);
cl = c.getClassLoader();//用户类LoaderSample1的实例化
                     System.out.println(“LoaderSample1’s loader is ” + cl);
              }
              catch (Exception e)
              {
                     e.printStackTrace();
}
       }
}
 
在我的机器上(Sun Java 1.5.0)的运行结果
sun.misc.Launcher$AppClassLoader@82ba41
sun.misc.Launcher$ExtClassLoader@923e30
null
java.lang.Object’s loader isnull
LoaderSample1’s loader is sun.misc.Launcher$AppClassLoader@82ba41
第一行表示,系统类装载器实例化自类sun.misc.Launcher$AppClassLoader
第二行表示,系统类装载器的parent实例化自类sun.misc.Launcher$ExtClassLoader
第三行表示,系统类装载器parent的parent为bootstrap
第四行表示,核心类java.lang.Object是由bootstrap装载的
第五行表示,用户类LoaderSample1是由系统类装载器装载的
 

JAVA反射机制深入学习(三)ClassLoader类装载器介绍

接下来介绍下JAVA中非常重要的一个类ClassLoader(类装载器) 类装载器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件。主要工作由ClassLoader及其子类负责,Clas...
  • icarus_wang
  • icarus_wang
  • 2016年05月29日 12:55
  • 881

深入理解Java虚拟机 类加载子系统2

与C/C++那些需要在编译器期进行连接工作的语言不同,Java类的加载、连接和初始化都是在程序运行时完成的,只有在类被需要的时候才进行动态加载。1)JVM何时加载类? 有且只有以下5种情况: 创建新...
  • isunn
  • isunn
  • 2016年01月11日 13:03
  • 793

JAVA的类装载器(ClassLoader)

 JAVA的类装载器(ClassLoader) Java的类装载器是Java 动态性核心,Java虚拟机使用每一个类时的第一件事就是将该类的字节码装载进来,装载字节码的功能是由类装载起来完成的,类装载...
  • sanshiqiduer
  • sanshiqiduer
  • 2006年08月25日 20:07
  • 1504

类装载器——ClassLoader

类装载器——ClassLoader Java反射机制
  • m0_37105443
  • m0_37105443
  • 2017年04月12日 17:17
  • 164

Java类装载器 ClassLoader

  • likaiwalkman
  • likaiwalkman
  • 2013年07月17日 11:58
  • 336

深入理解Java类加载器(ClassLoader)

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/73413292 出自【...
  • javazejian
  • javazejian
  • 2017年06月26日 09:34
  • 16370

Java中的类装载器(ClassLoader)

类装载器是寻找类的字节码文件并构造出来在JVM内部表示的对象组件。在Java中,类装载器把一个类装入JVM中,要经过以下步骤: 1、装载:查找和导入Class文件。 2、链接:执行校验、准备和解析步骤...
  • gexiuhua
  • gexiuhua
  • 2013年09月16日 10:46
  • 985

ClassLoader——类装载器

首先看一下类装载器的工作机制 定义一:类装载器是寻找类的字节码文件并构造出类在JVM内部表示对象的组件。 在java中,类装载器将一个类装载到JVM中,要经过的步骤如下: 1.装载:查找和导入C...
  • zhuali_linkin
  • zhuali_linkin
  • 2012年06月04日 22:08
  • 301

类装载器ClassLoader

类装载器是寻找类的字节码(也就是class文件)文件并构造出类在JVM内部表示的对象组件。       类装载器把一个类装入JVM三个步骤 1、装载:查找导入class文件 2、链接:校验、准...
  • elapse008
  • elapse008
  • 2012年11月05日 23:00
  • 300

扩展ClassLoader定制类装载器

    Java的ClassLoader与Package机制介绍了C
  • mingjava
  • mingjava
  • 2004年10月14日 17:43
  • 2651
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA的类装载器(ClassLoader)
举报原因:
原因补充:

(最多只允许输入30个字)