java动态类加载机制研究及应用

java动态类加载机制研究及应用

ID:21744872

大小:67.00 KB

页数:11页

时间:2018-10-24

java动态类加载机制研究及应用_第1页
java动态类加载机制研究及应用_第2页
java动态类加载机制研究及应用_第3页
java动态类加载机制研究及应用_第4页
java动态类加载机制研究及应用_第5页
资源描述:

《java动态类加载机制研究及应用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Java动态类加载机制研究及应用0引言Java体系结构包括Java语言、Javaclass文件、JavaAPI和Java虚拟机(JVM)4大部分,核心是JVM。JVM的主要特征是支持Java动态类加载,允许在程序运行时动态加载程序组件,而不影响其它功能模块的正常运行。本文介绍了Java类加载器的体系结构,分析Java动态类加载机制的原理,讨论了Java动态类加载机制的实现,并结合C/S结构的学生实验教学系统展示Java动态类加载机制的实际应用。并指出Java动态类加载机制在实现安全性、代码保护等其它领域的应用。1Java类加载器的体系结构JVM有灵活的类装载器结

2、构,一个应用程序中允许多个类加载器存在,并可以用自定义类加载方式。JVM中类加载器分两种类型:BootstrapClassLoader和用户自定义类加载器。图1描述Java类加载器的体系结构,BootstrapClassLoader是JVM实现的一部分,系统中惟一的、用编写虚拟机的语言编写的类加载器。若JVM用C/C++在操作系统上实现,则BootstrapClassLoader是用C/C++实现的一个部分。BootstrapClassLoader用默认方式从classpath中加载Java运行环境提供的所有核心类。这些类是所有应用程序必须的,因此不是“即用即装

3、”而是首先装入并永驻JVM,直至JVM退出。BootstrapClassLoader除加载核心类外,还加载两个Java运行环境提供的用户类加载器:ExtClassLoader和AppClass-Loader,核心类之外的类是由这两个类加载器加载的。BootstrapClassLoader只力口载jre/classes中的核心类。ExtClassLoader和AppClassLoader由JVM创建并继承自ClassLoader且由Java语言实现故被称为用户类加载器。ExtClassLoader加载jre/lib/ext中所有类,此目录下是Java运行环境所需要

4、的扩展类;AppClass-Loader加载classpath指定的路径中用户应用程序所需要的类。自定义类加载器可使用自定义方式加载类型。例如,从X络或数据库中获得class文件。尽管BootstrapClassLoader是JVM的本质(自定义类加载器不是),但自定义类加载器能够用Java语言编写,能被编译成class文件、被JVM加载,还能被实例化,实际是运行的Java应用程序可执行代码的一部分。自定义类加载器不必在编译的时候就知道运行中的Java应用程序最终加入的所有类,使得在运行时扩展Java应用程序成为可能。当它运行的时,应用程序能够决定它需要额外的类

5、,能够决定是使用一个或是更多的用户定义的类加载器来加载。Java动态类加载机制的原理JVM运行时至少会产生3个类加载器:BootstrapClassLoa-der,ExtClassLoader和AppClassLoader,为协调多个类加载器工作,Java对类加载器进行了分工和分级,不同级别的类加载器负责不同的类加载,并引入“Parent”概念,即“双亲”JVM通过基于类加载器层次关系的“双亲委托”3]机制实现按需加载。Java核心类库提供抽象类ClassLoader,所有自定义类加载器必须继承并实例化该类。自定义类加载器也依赖其它类加载器——至少依赖JVM启动

6、时创建的载器BootstrapClassLoader来实现一些类加载请求。类加载器请求另一个类加载器来加载类的过程被形式化,即“双亲委托”模型。除了启动类加载器外的类加载器有且只有一个“双亲”若没有显式地指定“双亲”,系统根据情况为它们分配一个默认的“双亲”。例如,ExtClassLoader和AppClassLoader的“双亲”就是BootstrapClassLoader。启动类加载器不是用Java语言编写的,Java规定,BootstrapClassLoader用null表示。自定义类加载器试图以常用的方式加载类型前,默认地将任务“委派”给它的“双亲”一一

7、请求“双亲”来加载这个类型。“双亲”再请求它自己的“双亲”来加载这个类型[7]。委派过程一直向上,直到BootstrapClassLoader,通常BootstrapClassLoader是委派链中最后一个。若一个类的“双亲”类加载器有能力,则这个类加载器试图自己加载这个类型。如图2所示,请求加载一个类型时,首先自底向上,逐一检查此类加载器是否成功加载所请求的类型,若己成功加载了类型,则直接返回类型的引用实例。若直到启动类加载器也未成功加载类型,则自顶向下,逐一尝试加载类型,直到CustomClassLoader。若CustomClassLoader没成功加载类

8、型则抛出ClassNot

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

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

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