Java动态类加载机制究及应用.docVIP

  • 0
  • 0
  • 约2.7千字
  • 约 6页
  • 2018-07-04 发布于福建
  • 举报
Java动态类加载机制究及应用

Java动态类加载机制研究及应用   摘 要 Java是当前应用最广、最具有发展前景的编程体系之一,其中JVM是核心,Java动态类加载是JVM的重要特征之一,其主要通过Bootstrap ClassLoader和用户自定义两种加载器完成加载、连接、初始化步骤,通过隐式加载与显式加载实现动态挂载,丰富了Java程序功能。 中国论文网 /1/viewhtm  【关键词】Java JVM 动态类类加载   Java是当前应用最广、最具有发展前景的编程体系之一,其体系主要可分为Java语言、Java class文件、Java API和虚拟机(JVM),其中JVM是核心。支持Java动态类加载是JVM的重要特征之一,既允许程序动态加载程序组建,程序本身运行并不受太大的影响,为程序的扩展创造了条件,同时极大的节省了运算空间。本文简要的概述Java动态类加载机制,并探讨其部分领域中的应用价值。   1 Java类加载器   Java加载体系灵活,一个程序可允许多种不同类别加载器存在,并允许一定程度的自定义。总体而言,Java加载器可分为Bootstrap ClassLoader和用户自定义两种。Bootstrap ClassLoader是JVM实现的一部分,依据JVM实现形式的不同,可成为实现形式的一部分,其通过默认方式加载Java运行环境提供了核心类(是所有应用程序必须的核心类),并永驻JVM,直至JVM退出基础操作系统。Bootstrap ClassLoader还加载Ext ClassLoader与App ClassLoader两个用户类加载器,以满足不同类型的加载需求。自定义加载器顾名思义,可采用自定义方式加载,其可支持Java语言编写,还可被翻译成为class文件,还能被实例化,实际上自定义加载器已成为程序的一部分。自定义加载器最大的优势在于为扩展Java提供了可能。   2 Java动态类加载机制   JVM解释字节码过程主要可分为加载、连接与初始化三个步骤:   (1)加载:寻找类或接口子解码文件,并进行解析,并构造成为JVM内部对象能够表示的组件;   (2)连接:是将已加载的数据合并进入JVM中允许,连接又可分为坚持、准备、解析三个步骤;   (3)初始化,是将静态变量、代码快,进行初始化工作。前文提到JVM 运行需要多种加载器,每个加载器的稳定运行都需要许多类加载器进行支持,类加载器又有许多分级、分工,不同的类加载器复杂加载不同的类,JVM据此构建复杂的层级关系,构建“全盘负责双亲委托模型”机制进行加载。当有载入某类加载器需求时,便通过路径寻找父加载器载入,若无对应的父类加载器,则需要按照搜索路径进行递归性搜索,这个类加载器在载入一个类时,该类所以来的父类或搜索获得的引用类都有该类加载器载入。当一个加载器被请求载入某类时,在确认该类若已被加载,则直接返回已被加载过的类对象,若未被加载,则定义后委托父类加载,若能加载成功,则发挥该类对应的class对象,否则继续移交,一直到获得根引导类加载器。整个过程遵循严格的递归调用,尽管耗时费力,但是经过严格的层级检查,则相对安全,不易被植入恶意基础类,保证类根类使用的安全性。   前文提到,因为类加载器会检查目标类是否被加载,故每个类仅会被同一个类加载器加载1次。再次过程中,每个被加载的类被加载过程都由其名称以及加载器名称控制。在每个类没装载解析后,JVM都会形成对应的java.lang.Class对象,提供有关于此次加载过程的描述,每个Class对象都有一个完整的定义,以供加载器引用。   3 Java动态类加载实现   JVM加载类的方式主要可分为隐式加载与显式加载两种,前者主要针对new等方式生成的对象,通过隐式调用加载,后者主要通过程序员调用自定义加载器调用加载需要的类,其又可经过Class.forName(1)方法与loadClass(2)提供,显示加载灵活性强,大大提高了JVM的适应性。自定义加载器任何子类中创建,通过制定的已存在的父加载器,挂载到JVM加载器层次树中。此外,任何类的加载都需通过抽象ClassLoader类及其子类实现,后者是Java核心API的重要组成部分,所有的自定义类都必须继承并实例化该类,可供选择的途径主要有:① Class loadClass(String name,boolean recsove),使用制定的二进制加载类,name是指已有的指定二进制类名称,在初始化类之前需进行类解析,该方法使用委托机制加载类,若已加载则采用findClass方法加载;②Class defineCLass(String name,byte[]b,int off,int len),将byte数组转化为Class类实例并解析,即将一个字节组转化

文档评论(0)

1亿VIP精品文档

相关文档