JAVA类装载机制

  Java 虚拟机中的类加载器分为两种:原始类加载器(primordial class loader )和类加载器对象(class loader objects )。 原始类加载器是Java 虚拟机实现的一部分,类加载器对象是运行中的程序的一部分。不同类加载器加载的类被不同的命名空间所分割。
     类加载器调用了许多Java 虚拟机中其他的部分和java.lang 包中的很多类。比如,类加载对象就是java.lang.ClassLoader 子类 的实例,ClassLoader 类中的方法可以访问虚拟机中的类加载机制;每一个被Java 虚拟机加载的类都会被表示为一个 java.lang.Class 类的实例。像其他对象一样,类加载器对象和Class 对象都保存在堆中,被加载的信息被保存在方法区中。
     1
、加载、连接、初始化(Loading, Linking and Initialization
类加载子系统不仅仅负责定位并加载类文件,他按照以下严格的步骤作了很多其他的事情:(具体的信息参见第七章的 类的生命周期
          1
)、加载:寻找并导入指定类型(类和接口)的二进制信息
          2
)、连接:进行验证、准备和解析
               ①
验证:确保导入类型的正确性
               ②
准备:为类型分配内存并初始化为默认值
               ③
解析:将字符引用解析为直接饮用
          3
)、初始化:调用Java 代码,初始化类变量为合适的值
     2 、原始类加载器(The Primordial Class Loader
    
每个Java 虚拟机都必须实现一个原始类加载器,他能够加载那些遵守类文件格式并且被信任的类。但是,Java 虚拟机的规范并没有定义如何加载类,这由 Java 虚拟机实现者自己决定。 对于给定类型名的类型,原始加载器必须找到那个类型名加“.class” 的文件并加载入虚拟机中。
     3
、类加载器对象
    
虽然类加载器对象是Java 程序的一部分,但是ClassLoader 类中的三个方法可以访问Java 虚拟机中的类加载子系统。
          1
)、protected final Class defineClass(…) :使用这个方法可以出入一个字节数组,定义一个新的类型。
          2
)、protected Class findSystemClass(String name) :加载指定的类,如果已经加载,就直接返回。
          3
)、protected final void resolveClass(Class c)defineClass() 方法只是加载一个类,这个方法负责后续的动态连接和初始化。
     4
、命名空间
    
当多个类加载器加载了同一个类时,为了保证他们名字的唯一性,需要在类名前加上加载该类的类加载器的标识。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值