用于改进爪哇虚拟机性能的方法和系统技术方案

技术编号:2861555 阅读:429 留言:0更新日期:2012-04-11 18:40
一种用于改进Java虚拟机性能的方法和系统,包括:抽取组成Java类的方法的字节码;合并所抽取的字节码以产成具有预定字节大小的第二代码,并且将第二代码分配给预定类型的数据结构;和由在Java虚拟机中被使用的执行引擎来执行第二代码。

【技术实现步骤摘要】

本专利技术涉及一种用于改进Java(Sun微系统公司的注册商标)虚拟机性能的方法和系统,更具体地讲,涉及一种用于通过将传统的基于以一字节为单位的Java字节码转换成具有扩展为传统Java字节码四倍的四字节大小的数据类型的代码而提高Java程序的执行速度的方法。
技术介绍
Java(爪哇)编程语言自二十世纪九十年代中期出版以来已经快速地激增,但是存在着它们的代码与如C或C++的其它编程语言组成的代码相比具有慢的运算速度的缺点。为了克服这个缺点,两种应用到传统的基于解释器的Java虚拟机的技术以前已经被建议一种是动态代码产生技术如实时(Just-In-Time)编译器,另一种是静态代码产生技术如预先(Ahead-Of-Time)编译器。Java平台基本包括Java虚拟机和Java类。类文件由与类的数据结构相关的信息组成,包括字段信息(field information)、方法信息等等。方法的执行代码由与硬件或操作系统无关的字节码形成。通过根据执行引擎来分类传统的Java虚拟机,它能被区分为基于解释器的Java虚拟机、基于实时(JIT)编译器的虚拟机、使用基于解释器和基于JIT编译器的Java虚拟机的Java虚拟机、基于预先(AOT)编译器的Java虚拟机等等。基于解释器的Java虚拟机解释旨在逐一地执行的方法的字节码,由此执行应用。JIT编译器通过编译字节码来获得依赖于当前Java平台的机器语言代码,然后执行机器语言代码以实施应用。图1示出一种传统的Java虚拟机的结构。Java虚拟机100包括解释器110、JIT或AOT编译器120、用于装载类的类装载器130、用于结合并操作组件110、120和130的运行时系统(run time system)140、将被执行的应用类150和以前已经定义的系统类160。图2示出一种传统的Java类文件的一般配置。类文件包括类或接口定义,并且由定义在类中的各种属性、字段信息、方法信息等组成。方法信息定义被称为字节码并规定在解释器中执行的字节流。字节码从编译包含Java源语言语句的文件(如具有“java”扩展的文件)而获得。字节码类似于用于执行的程序模块,因为在计算机内部其被一次一个字节地执行。但是字节码的指令是被发送到逻辑和抽象的Java虚拟机的实际的指令。字节码能够由JIT编译器再次编译以和特定系统平台兼容,包括它需要仅一次被一个字节解释,因此加速了Java程序的执行速度。作为增加解释器中的Java程序的执行速度的一种方法,有在字节码内的操作码的位置上写解释器内的操作码处理程序地址的“线程解释器”技术。图3示出在传统Java虚拟机中被执行的字节码。字节码的指令由操作数和操作码组成,两者都有一字节的大小以区别所执行的操作。一个操作码可包括几个操作数。操作码和每个操作数都以一字节为单位被存储,从而它们被表示成连续字节以表示具有一个或多个字节大小的操作数。例如,16位值由两个连续字节组成和32位值由四个连续字节组成。在图3中,第一行表示实际的字节码的十六进制值,第二行表示被分成操作码和操作数的字节码。图4示出在传统Java虚拟机中装载和执行类的过程。应用类由Java虚拟机的类装载器载入(S400),并经历链接过程(S410)和初始化过程(S420),然后相关信息被存储在运行时系统内的数据结构中,并由如解释器或JIT编译器的执行引擎来执行方法(S430)。图5是显示在传统Java解释器中执行每一操作码的示例性的操作的流程图。在典型的解释器中,字节码以图5所示的方式被执行。当在解释器中调用方法时(S500),指示该方法的字节码的程序计数器递增(S510),然后确定该方法的字节码是否是最后的字节码(S520)。如果该方法的字节码不是最后的字节码,那么取出一字节的操作码(S530)。随后,控制使用程序中的切换语句来转向对应于所取的一字节操作码的处理程序,从而,执行处理程序(S540和S550)。这个过程随着字节码的大小被多次重复,然后用于该方法的解释过程终止(S560)。图5所示的过程能够用下面的伪代码来表示Loop{Op=*pc++;switch(Op){case op_1//op_1的执行break;case op_2//op_2的执行break;case op_3//op_3’的执行break;…}}在对各个操作码的处理程序中,如果操作码所需的操作数的数据大小大于1字节,那么操作数的值就以连续字节被储存。因此,按每一位通过“或”运算符和移位运算符,连续字节被重构成一有效值。例如,在使用“小头(LittleEndian)”格式的CPU中,如果某一操作码A所需的操作数是在连续的字节字节1、字节2、字节3和字节4中,那么,字节4表示被逻辑地指示的32位值的第一位到第八位,字节3表示被逻辑地指示的32位值的第九位到第十六位,字节2表示被逻辑地指示的32位值的第十七位到第二十四位,字节1表示被逻辑地指示的32位值的第二十五位到第三十二位。因此,操作码A实际所需的32位值能够通过像“[(byte1<<24)|(byte1<<16)|(byte1<<8)|byte4]”的操作而获得。在现有的Java虚拟机中,结合这样的操作数的过程在方法被执行的任何时候发生。因为现在许多CPU具有32位体系结构并使用内置的32位寄存器,所以取出32位数据显示出比取出8位数据更好的性能。此外,在传统的Java字节码中,因为操作码和操作数以一字节为单位被存储,所以操作码的位大小被限制到8位,这能表示最大仅256个不同的位配置。因此,一旦预定的操作码被排斥,那么剩余的能够专用于新的可定义的操作码的位配置的数量受到相当大地限制。因为这个原因,在其中需要许多可再定义的操作码的动态代码产生技术上存在许多限制。对于操作数来讲,当操作数的数据大小大于1字节时,那么操作数将以连续字节被排列,并且,连续字节按每一位通过“或”运算符和移位运算符在执行方法的任何时候将被重构。当Java程序被执行时,这个过程运行可能以大量的系统开销来运行。因此,需要通过克服这些限制来改进Java虚拟机的性能。
技术实现思路
因此,本专利技术的目的直接在于通过提供一种方法来解决上述在现有技术所发生的问题,该方法通过将传统的以一字节为单位的Java字节码转换成具有被扩展为传统的Java字节码四倍的4字节大小的数据类型的代码(以下称作为“中间代码”的代码),而提高Java虚拟机的执行速度。然而,本专利技术的实施例没有被要求解决这里所描述的任何问题。为了实现上述目的,本专利技术提供一种用于改进Java虚拟机的性能的方法。该方法包括第一步骤,抽取组成Java类的方法的字节码;第二步骤,合并抽取的字节码、产生具有预定字节大小的第二代码,并且将第二代码分配给预定类型的数据结构;和第三步骤,由组成Java虚拟机的执行引擎执行第二代码。在这种情况下,最好但并非必要的是字节大小取决于配备有Java虚拟机的中央处理单元的数据处理能力。最好但并非必要的是数据结构是整数类型之一。最好但并非必要的是如果所抽取的字节码的至少两个字节被合并以表示逻辑值,那么第二步骤是这样一个步骤,其用于合并该至少两个字节、产生具有预定字节大小的第二代码,并且将第二代码分配给预定类型的数据结构。最好本文档来自技高网
...

【技术保护点】
一种用于改进Java虚拟机性能的方法,该方法包括:抽取Java类的方法的字节码;合并所抽取的字节码,产生具有预定字节大小的第二代码,并且将第二代码分配给预定类型的数据结构;和由Java虚拟机的执行引擎执行第二代码。

【技术特征摘要】
KR 2004-1-17 03590/041.一种用于改进Java虚拟机性能的方法,该方法包括抽取Java类的方法的字节码;合并所抽取的字节码,产生具有预定字节大小的第二代码,并且将第二代码分配给预定类型的数据结构;和由Java虚拟机的执行引擎执行第二代码。2.根据权利要求1所述的方法,其中,字节大小取决于配备有Java虚拟机的中央处理单元(CPU)的数据处理能力。3.根据权利要求1所述的方法,其中,数据结构是整数类型的数据结构。4.根据权利要求1所述的方法,其中,当所抽取的字节码的至少两个字节被合并以表示逻辑值时,合并、产生和分配的步骤分别包括合并该至少两个字节,产生具有预定字节大小的第二代码,和将第二代码分配给数据结构。5.根据权利要求1所述的方法,其中,当所抽取的字节码是使用宽的操作数的操作码时,合并、产生和分配的步骤分别包括将使用宽的操作数的操作码转换成不使用宽的操作...

【专利技术属性】
技术研发人员:权浩凡罗曼奥弗斯基亚历克塞崔正必赵雄石
申请(专利权)人:三星电子株式会社
类型:发明
国别省市:KR[韩国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1