jvm类加载器介绍及其父亲委托机制parentdelegation-java开发java经验技巧

jvm类加载器介绍及其父亲委托机制parentdelegation-java开发java经验技巧

ID:31317477

大小:69.50 KB

页数:3页

时间:2019-01-08

jvm类加载器介绍及其父亲委托机制parentdelegation-java开发java经验技巧_第1页
jvm类加载器介绍及其父亲委托机制parentdelegation-java开发java经验技巧_第2页
jvm类加载器介绍及其父亲委托机制parentdelegation-java开发java经验技巧_第3页
资源描述:

《jvm类加载器介绍及其父亲委托机制parentdelegation-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、JVM类加载器介绍及Jt父亲委托机制PcirentDelegation-编程开发技术JVM类加载器介绍及其父亲委托机制ParentDelegation原文出处:arthinking1、类加载器:类加载器用来把类加载到Java虚拟机中。从JDK1.2版木开始,类的加载过程采用父亲委托机制,这种机制能更好的保证Java平台的安全。在此委托机制中,除了Java虚拟机自带的根类加载器Z外,其余的类加载器都有且只有一个父加载器。当Java程序请求加载器loader1加载Sample类是,loaderl类首先委托口己的父加载器去加载Sample类,若父加载器能加载,则由父加载器完成加载任务,否则才由加

2、载器loader1本身加载Sample类。2、类加载器的父亲委托机制(ParentDelegation)2.1、Java虚拟机自带了以下几种加载器:根(Bootstrap)类加载器:该加载器没有父加载器。它负责加载虚拟机的核心类库,如java.lang.*等。例如java.lang.Object就是由根类加载器加载的。根类加载器从系统属性sun.boot,class,path所指定的目录中加载类库。根类加载器的实现依赖于底层操作系统,屈于虚拟机的实现的一部分,它并没有继承java.lang.ClassLoader类。扩展(Extension)类加载器:它的父加载器为根类加载器。它从java

3、.ext.dirs系统属性所指定的口录屮加载类库,或者从JDK的安装口录的jre/lib/ext子口录(扩展目录)下加载类库,如果把用户创建的JAR文件放在这个目录下,也会口动由扩展类加载器加载。扩展类加载器是纯匕阳类,是java.lang.ClassLoader类的子类。系统(System)类加载器:也称为应用类加载器,它的父加载器为扩展类加载器。它从环境变量classpath或者系统属性java,class,path所指定的目录中加载类,它是用户自定义的类加载器的默认父加载器。系统类加载器是纯Java类,是java.lang.ClassLoader类的了类。父子加载器并非继承关系,也就

4、是说子加载器不一定是继承了父加载器。2.2、自定义类加载器:除了以上虚拟机口带的加载器以外,用户还可以定制口己的类加载器(User-definedClassLoader)。Java提供了抽象类java.lang.ClassLoader,所有用户自定义的类加载器应该继承ClassLoader类。2.3、类加载器的关系:根类加载器〈-扩展类加载器〈-系统类加载器〈-用户口定义加载器在父亲委托机制中,齐个加载器按照父了关系形成了树形结构,除了根类加载器以外,其余的类加载器都冇月•只冇一个父加载器。2.4、父加载的父亲委托机制:ClasssampleClass=loader2.1oadCIass(

5、"Sample");loader2首先从口己的命名空间中查找Sample类是否已经被加载,如果已经加载,就直接返回代表Sample类的Class对象的引用。如果Sample类还没有被加载,loader2首先请求loader1代为加载,loader1再请求系统类加载器代为加载,系统类加载器再请求扩展类加载器代为架了啊,扩展类加载器在请求根类加载器代为加载。若根加载器和扩展加载器都不能加载,则系统类加载器尝试加载,若能加载成功,则将Sample类所对应的Class对象的引用返冋给loaderl,loaderl再将引用返冋给loader2,从而成功将Sample类加载进虚拟机。若系统类加载器不能

6、加载Samp1e类,贝ljloaderl尝试加载Sample类,若laodcrl也不能成功加载,则loader2尝试加载。若所有的父加载器及laoder2本身都不能加载,则抛出ClassNotFoundException异常。加载器之间的父子关系实际上指的是加载器对彖之间的包装关系,而不是类之间的继承关系。一对父子加载器可能是同一个加载器类的两个实例,也可能不是。在子加载器对象中包装了一个父加载器对象ClassLoaderloaderl=newMyClassLoader();//参数loaderl将作为loader2的父加载器ClassLoaderloader2二newMyClassLoa

7、der(loaderl);2・5、定义类加载器:如果某个类加载器能够加载一个类,那么该类加载器就称作定义类加载器;定义类加载器及其所有子类加载器都称作初始类加载器。假设loaderl实际加载了Sample类,则loaderl为Sample类的定义类加载器,laoder2和loaderl为Sample类的初始类加载器。ClassLoaderprotectedCJassLoacfer(ClassLoaderparent)使用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。