JAVA虚拟机技术研究与实践思考

2015-04-20 21:42刘冠梅
科技创新与应用 2015年11期

摘 要:针对传统类装载器装载完成后的二进制数据流不易理解的问题,文章首先分为五个模块介绍了JAVA虚拟机技术的体系结构,重点对JAVA虚拟机的类装载器模块进行研究和改进,改进后的类装载器与传统类装载器相比较,具有class文件数据显示功能,以及可以完成文件查找和解析。

关键词:JAVA;JAVA虚拟机;类装载器

1 JAVA技术简介

随着Internet技术的高速发展,JAVA技术在我国应用已经日趋成熟。作为JAVA技术的核心是JAVA虚拟机,虚拟机与编程接口(API)共同构建成JAVA平台[1],JAVA平台上的程序能够在不同类型的软件上运行,这说明JAVA平台具有无关性。JAVA语言编程环境,分为编译环境和运行环境,使用JAVA语言编写好的程序通过应用接口传递编译完成的class文件,JAVA程序的class文件的运行环境就是在JAVA虚拟机中,经过调用class文件实现程序的调用[2]。JAVA技术除了具有平台无关性,还具备网络移动性和安全性,因此研究JAVA语言以及JAVA虚拟机技术具有重要意义。

2 JAVA虚拟机技术体系结构

作为JAVA技术的核心,JAVA虚拟机的体系结构包括五个部分:类装载器、运行环境下的数据区、执行环境下的引擎、本地方法应用接口以及垃圾收集部分[3]。

类装载器主要的功能是从JAVA应用程序接口装载class文件,类装载器装载文件时,必须按照正确的顺序进行装载,正确的顺序为:查找、装载——链接(先验证、再准备、后解析)——初始化。在运行程序时,数据区主要用来存储程序中包含的信息,例如参数值、局部变量、返回值、字节码等。JAVA虚拟机中运行程序主要包含方法区、堆、PC寄存器和JAVA栈的数据区[4]。执行引擎执行包括解释、动态编译等技术,JAVA程序中线程整个生命周期都属于执行实例。JAVA虚拟机中本地方法接口模块与内部工作联系紧密,任何JAVA虚拟机实现都支持本地接口,本地方法与JAVA虚拟机的内部状态进行交互,允许执行传递、查询变量、调用类方法等[5]。垃圾收集主要是为了空间回收再利用,方便堆空间的分配。垃圾收集可以提升JAVA程序的性能,保证了JAVA程序的完整性。

3 类装载器设计与实现

由第二节可以知道类装载器是从JAVA应用程序接口装载class文件,传统类装载器装载完成后所生成的數据结构为规范的二进制数据流,程序员无法读懂数据流的含义。针对这一问题,文章将对传统类装载器进行改进。

3.1 类装载器功能设计

文章主要介绍改进类装载器的功能设计,文章所设计的类装载器提供了class文件字节码显示功能,如图1所示,为class文件字节码显示流程图。

图1 字节码显示流程图

完成字节码显示后,要进行系统文件查找,文件名包含java以及javax开头的,CLASSPATH环境下对目录集进行遍历搜索,搜索得到的文件会找到JRE安装目录,进而可以搜索到JAR包,如果找到JAR包则可以进行相应的文件处理。如图2所示,为JAR文件处理流程图,通过利用aunzip32.dll和azip32.dll进行压缩和解压缩,文件处理中需要调用addUNZIP_ArchiveName和addUNZIP_ExtractTo函数[6]。

图2 JAR文件处理流程

3.2 改进功能的实现

通过JAVA class文件可以完成对一个类或接口的描述, class文件的格式定义要求相对严格,文章改进后的类装载器具有字节码显示功能,在执行过程中查看日志文件功能等。

通过ClassLoader程序的运行,可以显示功能界面,其中就包含Bytecode Display功能。用户可以选择一个指定的class文件,运行程序可以显示class文件的字节码[6]。字节码所包含的信息包含文件字段、属性、常量等。文件的查找功能也是通过ClassLoader程序下解析class文件,查找成功后包含文件的基本信息,包括文件大小、文件路径等。文件解析过程中要依据JAVA虚拟机规范从中获得有用二进制流信息,解析完成后可以将文件信息的内存数据结构显示给用户。

4 结束语

作为JAVA技术的核心部分,JAVA虚拟机的体系结构包括类装载器、运行环境下的数据区、执行引擎、本地方法应用接口以及垃圾收集五个部分,文章分别讨论了五个部分的具体功能,并且对JAVA虚拟机中传统类装载器模块进行研究和改进,改进后的类装载器与传统类装载器相比较,类装载器具有显示、查找和解析等功能。

参考文献

[1]刘艳贤,杨凯.Java平台上装载远程类文件的实现[J].河北理工学院学报,2003,25(4):100-105.

[2]李风云.Java虚拟机性能及关键技术分析[J].山东交通学院学报,2004,12(2):68-71

[3]谌宁,覃证.基于嵌入式Java虚拟机的垃圾回收算法[J].计算机应用,2005,25(1):218-223

[4]黄广君,王万城.java虚拟机的研究与设计[J].控制工程,2003,10(5):444-446.

[5]倪红波,谷建华,周兴社.嵌入式系统中Java虚拟机的研究与移植[J].计算机工程,2004,30(24):52-54.

[6]杨灿群,张晓军,沈志宇.Java语言环境实现技术探讨[J].计算机工程和科学,2001(2).

作者简介:刘冠梅(1982,10-),女,汉族,江西南昌人,硕士,讲师,单位:江西省公安厅信息中心。