ClassLoader

类加载器就是用来加载类的对象,而ClassLoader是一个抽象类,只要给出类的二进制名称,类加载器就能肯定或生成构建这个类的定义;一般是把二进制名称转成文件系统的文件名,再读入这个类文件。bootstrap

每一个类对象都拥有getClassLoader 这个方法;数组

数组建立的类对象不是由类加载器加载的,而是运行时按需加载,对每个数组元素调用类加载器,而元素类型为原始类型时就没有类加载器;安全

能够经过继承ClassLoader来扩展一些在JVM动态加载过程当中的处理方式网络

类加载器经常使用于安全管理,指明哪些是安全域并发

ClassLoader使用一种委托模式来查找类和资源,每一个ClassLoader的实例都有本身的父类加载器,当本身要查找类或资源前,ClassLoader先委托父类进行查找 。代理

虚拟机有一个内置的类加载器,bootstrap class loader,它没有父类加载器,却能够当其它类加载器的父类加载器。对象

 

 

类加载器支持并行加载,即所谓的并发模式,这个须要类加载在初始化阶段调用registerAsParallelCapable 本身注册;ClassLoader是默认并行的,而它的子类须要主动注册。继承

当执行环境中的代理模式层次不清时,类加载须要并行加载,由于类加载进程方法会持有加载锁,这可能致使死锁。进程

 

一般JVM加载都使用平台依赖的方式从本地加载类,例如UNIX系统,虚拟机是从CLASSPATH环境变量定义的路径开始加载类;资源

而后还有些类是从网络生成的,

 

网络类加载器的子类必须有如下2个方法,

class NetworkClassLoader extends ClassLoader {

  String host;

  int port;

  public Class findClass(String name) {

    byte[] b = loadClassData(name);

    return defineClass(name, b, 0, b.length);

  }

  private byte[] loadClassData(String name) {

    // load the class data from the connection

  }

相关文章
相关标签/搜索