<b>Java虚拟机类装载的原理及实现</b>[Java编程]
本文“<b>Java虚拟机类装载的原理及实现</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1、引言
Java虚拟机(JVM)的类装载就是指将包含在类文件中的字节码装载到JVM中, 并使其成为JVM一部份的历程.JVM的类动态装载技术可以在运行时刻动态地加载大概替换系统的某些功效模块, 而不影响系统其他功效模块的正常运行.本文将解析JVM中的类装载系统,探究JVM中类装载的原理、实现以及利用.
2、Java虚拟机的类装载实现与利用
2.1 装载历程简介
所谓装载就是探求一个类或是一个接口的二进制情势并用该二进制情势来构造代表这个类或是这个接口的class对象的历程,此中类或接口的名称是给定了的.当然名称也可以通过计算得到,但是更常见的是通过搜索源代码经过编译器编译后所得到的二进制情势来构造.
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,此中链接又可以分成校验、预备和解析三步,除了解析外,别的步骤是严峻按照次序完成的,各个步骤的主要工作以下:
装载:查找和导入类或接口的二进制数据;
链接:履行下面的校验、预备和解析步骤,此中解析步骤是可以挑选的;
校验:查抄导入类或接口的二进制数据的精确性;
预备:给类的静态变量分配并初始化存储空间;
解析:将标记引用转成直接引用;
初始化:激活类的静态变量的初始化Java代码和静态Java代码块.
至于在类装载和虚拟机启动的历程中的具体细节和大概会抛出的错误,请参看《Java虚拟机标准》以及《深化Java虚拟机》. 由于本文的谈论重点不在此就不再多论述.
2.2 装载的实现
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件.它负责在运行时查找和装入类文件的类.
在Java中,ClassLoader是一个抽象类,它在包java.lang中,可以这样说,只要理解了在ClassLoader中的一些重要的办法,再结合上面所介绍的JVM中类装载的具体的历程,对动态装载类这项技术就有了一个对比大约的掌握,这些重要的办法包含以下几个:
①loadCass办法 loadClass(String name ,boolean resolve)此中name参数指定了JVM需求的类的名称,该名称以包表示法表示,如Java.lang.Object;resolve参数奉告办法能否需求解析类,在初始化类之前,应考虑类解析,并非全部的类都需求解析,假如JVM只需求知道该类能否存在或找出该类的超类,那么就不需求解析.这个办法是ClassLoader 的进口点.
②defineClass办法 这个办法承受类文件的字节数组并把它转换成Class对象.字节数组可以是从本地文件系统或网络装入的数据.它把字节码解析成运行时数据构造、校验有效性等等.
③findSystemClass办法 findSystemClass办法从本地文件系统装入文件.它在本地文件系统中探求类文件,假如存在,就利用defineClass将字节数组转换成Class对象,以将该文件转换成类.当运行Java利用程序时,这是JVM 正常装入类的缺省机制.
④resolveClass办法 resolveClass(Class c)办法解析装入的类,假如该类已经被解析过那么将不做处理.当调用loadClass办法时,通过它的resolve 参数决意能否要举行解析.
⑤findLoadedClass办法 当调用loadClass办法装入类时,调用findLoadedClass 办法来查看ClassLoader能否已装入这个类,假如已装入,那么返回Class对象,不然返回NULL.假如强行装载已存在的类,将会抛出链接错误.
以上是“<b>Java虚拟机类装载的原理及实现</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |