64位Java虚拟机的实现方法及装置的制造方法

文档序号:10665707阅读:265来源:国知局
64位Java虚拟机的实现方法及装置的制造方法【专利摘要】本发明实例提供一种64位Java虚拟机的实现方法及装置,本发明64位Java虚拟机的实现方法,包括:接收Java字节码,并将所述Java字节码以64位格式写入64位寄存器中;采用64位汇编指令集对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取64位汇编代码;根据64位格式控制所述64位汇编代码的地址跳转,并运行所述64位汇编代码。能够使Java虚拟机运行于MIPS64位平台上,不再受到MIPS32位体系结构以及Linux操作系统内核的固有限制,从而提高程序能够使用的存储空间。【专利说明】64位Java虚拟机的实现方法及装置
技术领域
[0001]本发明实例涉及一种64位Java虚拟机的实现方法及装置。【
背景技术
】[0002]目前,在无内部互锁管道级的微处理器(MicroprocessorwithoutInterlockedPipelineStages,MIPS)平台上可运行的Java虚拟机仅支持MIPS32位版本。受到MIPS32位体系结构以及林纳斯(Linux)操作系统内核的固有限制,任何应用程序能够使用的存储空间不超过IGB。[0003]然而随着科技的进步,大多服务器应用程序,甚至越来越多的桌面应用程序都需要越来越高的吞吐量以及并发量,IGB的存储空间显然不能满足这些大吞吐量和并发量的需求,导致Java虚拟机性能和应用场景受限,因此,提高Java虚拟机的可用存储空间显然已经成为亟待解决的问题。【
发明内容】[0004]本发明实例提供一种64位Java虚拟机的实现方法及装置,该Java虚拟机能够运行于MIPS64位平台上,不再受到MIPS32位体系结构以及Linux操作系统内核的固有限制,从而提尚程序能够使用的存储空间。[0005]第一方面,本发明实例提供一种64位Java虚拟机的实现方法,所述方法包括:[0006]接收Java字节码,并将所述Java字节码以64位格式写入64位寄存器中;[0007]采用64位汇编指令集对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取64位汇编代码;[0008]根据64位格式控制所述64位汇编代码的地址跳转,并运行所述64位汇编代码。[0009]结合第一方面,在第一方面的第一种可能的实现方式中,所述将所述Java字节码以64位格式写入64位寄存器中,包括:[0010]若所述Java字节码为长整型long型或双精度double型,则将所述Java字节码写入一个所述64位寄存器中。[0011]结合第一方面,在第一方面的第二种可能的实现方式中,所述采用64位汇编指令集对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取64位汇编代码,包括:[0012]根据64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取所述64位汇编代码。[0013]结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述64位模板表包括每个所述Java字节码对应的64位模板生成函数,所述64位模板生成函数包括所述64位汇编指令集对应的64位MIPS本地汇编,其中,所述64位汇编指令集包括装载和存储指令、运算指令、类型转换指令、控制转移指令、方法调用和返回指令、操作数栈管理指令、对象创建和操纵指令。[0014]结合第一方面的第二种可能的实现方式,在第一方面的第四种可能的实现方式中,所述根据64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取所述64位汇编代码,包括:[0015]根据所述64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,将所述Java字节码转换为中间表示,形成LIR操作数,并对所述LIR操作数与所述64位寄存器中寄存的项分别进行映射,其中,所述LIR操作数为常量或寄存器类型;[0016]根据所述LIR操作数的映射得到的项对应的64位MIPS本地汇编将所述LIR转换为所述64位汇编代码。[0017]结合第一方面,在第一方面的第五种可能的实现方式中,所述根据64位格式控制所述64位汇编代码的地址跳转,包括:[0018]根据64位格式在所述64位汇编代码的入口和所述64位寄存器之间进行跳转控制。[0019]第二方面,本发明实例提供一种64位Java虚拟机的实现装置,应用于MIPS64位平台上,所述装置包括:[0020]寄存器模块,用于接收Java字节码,并以64位格式存储所述Java字节码;[0021]编译模块,用于采用64位汇编指令集对所述寄存器模块中的64位格式的所述Java字节码进行汇编,获取64位汇编代码;[0022]运行模块,用于根据64位格式控制所述64位汇编代码的地址跳转,并运行所述64位汇编代码。[0023]结合第二方面,在第二方面的第一种可能的实现方式中,所述寄存器模块,具体用于若所述Java字节码为长整型long型或双精度double型,则以64位格式存储所述Java字节码。[0024]结合第二方面,在第二方面的第二种可能的实现方式中,所述编译模块,具体用于根据64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取所述64位汇编代码。[0025]结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述64位模板表包括每个所述Java字节码对应的64位模板生成函数,所述64位模板生成函数包括所述64位汇编指令集对应的64位MIPS本地汇编,其中,所述64位汇编指令集包括装载和存储指令、运算指令、类型转换指令、控制转移指令、方法调用和返回指令、操作数栈管理指令、对象创建和操纵指令。[0026]结合第二方面的第二种可能的实现方式,在第二方面的第四种可能的实现方式中,所述编译模块,具体用于根据所述64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,将所述Java字节码转换为中间表示,形成LIR操作数,并对所述LIR操作数与所述64位寄存器中寄存的项分别进行映射,其中,所述LIR操作数为常量或寄存器类型;根据所述LIR操作数的映射得到的项对应的64位MIPS本地汇编将所述LIR转换为所述64位汇编代码。[0027]结合第二方面,在第二方面的第五种可能的实现方式中,所述运行模块,具体用于根据64位格式在所述64位汇编代码的入口和所述64位寄存器之间进行跳转控制。[0028]本发明实例64位Java虚拟机的实现方法及装置,所述Java虚拟机运行于MIPS64位平台上,采用64位指令集对接收的Java字节码进行代码汇编。Java虚拟机可以支持MIPS64位版本,不再受到32位体系结构以及Linux操作系统内核的固有限制,能够提高存储空间的大小,进而提高Java虚拟机的性能和适用范围。【附图说明】[0029]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。[0030]图1为本发明64位Java虚拟机的实现方法的一个实施例的流程图;[0031]图2为本发明64位Java虚拟机的实现装置的一个实施例的结构示意图;[0032]图3为本发明64位Java虚拟机的实现装置的另一个实施例的结构示意图;[0033]图4为本发明解释器101的结构示意图;[0034]图5为本发明编译器102的结构示意图。【具体实施方式】[0035]为使本发明实例的目的、技术方案和优点更加清楚,下面将结合本发明实例中的附图,对本发明实例中的技术方案进行清楚、完整地描述,显然,所描述的实例是本发明一部分实例,而不是全部的实例。基于本发明中的实例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实例,都属于本发明保护的范围。[0036]图1为本发明64位Java虚拟机的实现方法的一个实例的流程图,如图1所示,本实例的方法可以包括:[0037]步骤101、接收Java字节码,并将所述Java字节码以64位格式写入64位寄存器中;[0038]本实例的执行主体可以是运行于MIPS64位平台上的Java虚拟机容器,该容器以64位的处理方式对接收到的Java字节码进行存储、汇编及运行,MIPS64位平台提供了64位处理的硬件结构。Java虚拟机容器接收Java字节码,Java字节码包括由Java语言实现的Java虚拟机的程序代码、代码处理的相关数据等,Java虚拟机容器将Java字节码以64位格式写入64位寄存器中,现有的32位寄存器在寄存64位的数据类型时,是分两个寄存器进行存储的,而本发明由于MIPS64位平台的寄存器本身就是64位的,因此在寄存64位的数据类型时,只需要一个寄存器即可。而64位的寄存器比32位寄存器的存储空间大很多,可以实现4G以上的存储容量。[0039]步骤102、采用64位汇编指令集对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取64位汇编代码;[0040]Java虚拟机容器在对Java字节码进行汇编时,相应的也会使用64的汇编指令集进行处理,写64位汇编代码时,可以用到8、16、32、64位寄存器,获取到与64的汇编指令集对应的64位汇编代码。[0041]步骤103、根据64位格式控制所述64位汇编代码的地址跳转,并运行所述64位汇编代码。[0042]Java虚拟机容器是以地址驱动的方式控制64位汇编代码的运行,MIPS64位平台全部采用64位寄存器,而且对寄存器的地址也是以64位地址,这样由于地址标识的扩大,可以实现4G以上的寻址。[0043]本实例,通过在MIPS64位平台上对Java虚拟机进行汇编处理及运行,使得Java虚拟机可以支持MIPS64位版本,不再受到MIPS32位平台以及Linux操作系统内核的固有限制,能够提尚存储空间的大小,进而提尚Java虚拟机的性能和适用范围。[0044]进一步的,上述步骤101具体的实现方法可以是:若所述Java字节码为长整型long型或双精度double型,则将所述Java字节码写入一个所述64位寄存器中。[0045]具体来讲,Java虚拟机规定长整型(long型)和双精度(double型)的数据类型占用为64位存储空间。现有的32位寄存器无论是整型寄存器,还是浮点型寄存器,都只能提供32位的空间容量,因此对一个long型或者double型的数据进行存取需要两个32位寄存器。而在MIPS64位平台中,整型寄存器和浮点寄存器的容量都扩展为64位,因此对于long型和double型的数据类型都只需要一个64位寄存器即可,而对于小于64位的数据类型,则可以以补位的方式进行存储,例如对于整型数据,寄存器的低32位可以存放数据,高32位可以对数据的符号位扩展存放。[0046]进一步的,上述步骤102具体的实现方法可以是:根据64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取所述64位汇编代码。[0047]所述64位模板表包括每个所述Java字节码对应的64位模板生成函数,所述64位模板生成函数包括所述64位汇编指令集对应的64位MIPS本地汇编,其中,所述64位汇编指令集包括装载和存储指令、运算指令、类型转换指令、控制转移指令、方法调用和返回指令、操作数栈管理指令、对象创建和操纵指令。[0048]具体来讲,本实施例由于是基于MIPS64位平台,因此在对Java虚拟机进行汇编时所采用的字节码模板、模板表、派遣表、模板解释生成器和模板解释器均是64位的,因此在汇编时均是米用64位汇编指令集的。[0049]根据64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,将Java字节码转换为中间表示,形成LIR操作数,并对LIR操作数与64位寄存器中寄存的项分别进行映射,其中,LIR操作数为常量或寄存器类型;根据LIR操作数的映射得到的项对应的64位MIPS本地汇编将LIR转换为64位汇编代码。[0050]进一步的,上述步骤103具体的实现方法可以是:根据64位格式在所述64位汇编代码的入口和所述64位寄存器之间进行跳转控制。[0051]具体来讲,MIPS64位平台中的适配器可以实现参数的转换,获取要跳转的目标地址,最后跳转到目标地址处。其中,I2C适配器从解释栈帧中获取编译器入口地址;C2I适配器从方法对象中获取解释入口地址。C2I适配器在参数传递前需要检查当前方法是否还有未补丁的代码,如果有,需要先执行代码补丁,再进行参数传递和目标跳转。[0052]图2为本发明64位Java虚拟机的实现装置的一个实例的结构示意图,如图2所示,本实施例的装置可以是上述方法实施例中的Java虚拟机容器,包括:寄存器模块11、编译模块12以及运行模块13,其中,寄存器模块11,用于接收Java字节码,并以64位格式存储所述Java字节码;编译模块12,用于采用64位汇编指令集对所述寄存器模块中的64位格式的所述Java字节码进行汇编,获取64位汇编代码;运行模块13,用于根据64位格式控制所述64位汇编代码的地址跳转,并运行所述64位汇编代码。[0053]本实例的装置,可以用于执行图1所示方法实例的技术方案,其实现原理和技术效果类似,此处不再赘述。[0054]进一步的,所述寄存器模块11,具体用于若所述Java字节码为长整型long型或双精度double型,则以64位格式存储所述Java字节码。[0055]进一步的,所述编译模块12,具体用于根据64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取所述64位汇编代码。[0056]进一步的,所述64位模板表包括每个所述Java字节码对应的64位模板生成函数,所述64位模板生成函数包括所述64位汇编指令集对应的64位MIPS本地汇编,其中,所述64位汇编指令集包括装载和存储指令、运算指令、类型转换指令、控制转移指令、方法调用和返回指令、操作数栈管理指令、对象创建和操纵指令。[0057]进一步的,所述编译模块12,具体用于根据所述64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,将所述Java字节码转换为中间表示,形成LIR操作数,并对所述LIR操作数与所述64位寄存器中寄存的项分别进行映射,其中,所述LIR操作数为常量或寄存器类型;根据所述LIR操作数的映射得到的项对应的64位MIPS本地汇编将所述LIR转换为所述64位汇编代码。[0058]进一步的,所述运行模块13,具体用于根据64位格式在所述64位汇编代码的入口和所述64位寄存器之间进行跳转控制。[0059]本实施例中的寄存器模块11可以实现MIPS64位平台的寄存功能,可以寄存模板解释器中的64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器等,还可以寄存Java虚拟机的代码;编译模块12可以实现编译器的功能,实现将Java字节码汇编成64位的64位汇编代码;运行模块13即为运行环境,实现64位的地址跳转。[0060]下面采用几个具体的实施例,对图1或图2所示方法和装置实施例的技术方案进行详细说明。[0061]图3为本发明64位Java虚拟机的实现装置的另一个实施例的结构示意图,如图3所示,该装置能够运行于MIPS64位平台上,采用64位指令集对Java字节码实现代码汇编。该装置10包括:解释器101、编译器102、运行时数据区103、类装载器104、本地接口105和自动内存管理器106,其中,运行时数据区103具体包括:堆区、方法区和寄存器。[0062]具有64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器的64位解释器101,该解释器101用于对接收的Java字节码以64位为单位进行解释汇编。[0063]实现64位编译的64位编译器102,用于对接收的Java字节码以64位为单位进行编译汇编。[0064]采用8字节实现寄存的64位寄存器,用于对以64位为单位进行编译汇编或解释汇编的Java字节码的对应项进行存取。[0065]举例来说,采用64位指令集对Java字节码实现代码汇编主要是通过解释器101、编译器102和运行时数据区103三大模块的移植实现的,与现有技术的区别在于这三个模块基于MIPS64位平台,其处理对象的地址和寄存器都是64位的。[0066]图4为本发明解释器101的结构示意图,如图4所示,解释器101包括:64位字节码模板1011、64位模板表1012、64位派遣表1013、64位模板解释生成器1014和64位模板解释器1015。[0067]进一步地,64位模板表1012,具体用于定义每个Java字节码对应64位模板生成函数,64位模板生成函数用于为装载和存储指令、运算指令、类型转换指令、控制转移指令、方法调用和返回指令、操作数栈管理指令、对象创建和操纵指令定义了相应的64位MIPS本地汇编。[0068]64位字节码模板1011是用来封装每个Java字节码对应的一些信息的,如用来封装描述模板属性的标签,可以是标识字节码指针位,派遣位,标志位,宽指令标志位等的标签,还可以用来封装模板执行前栈顶缓存的状态、模板执行后栈顶缓存的状态、模板生成函数指针以及生成模板需要的参数等。[0069]64位模板表1012是用来定义每个Java字节码的模板生成函数,该函数定义了每个字节码对应的64位汇编解释代码。64位模板表1012还用于定义两个数组,分别用于存放每个Java字节码对应模板的普通模板数组和针对宽字节码的宽模板数组。模板表的初始化过程就是生成每个Java字节码对应的模板并将其保存在对应模板数组中的过程,在模板解释器101初始化时被调用。[0070]64位派遣表1013用来定义一个二维数组,该二位数组的横坐标为栈顶缓存状态的类型,纵坐标为Java字节码解释执行入口地址或者安全点入口地址。64位派遣表1013根据栈顶状态和Java字节码进行索引,这些解释执行入口地址是由64位模板解释生成器1014生成的。其中,Java字节码进行索引主要是从地址为64位的常量池中查找Java字节码所属当前类的常量池的索引地址以查找对应的项,其中,索引的宽度为基本索引的宽度乘以一个字的宽度,索引地址为基址加偏移量,基本索引的宽度为Java虚拟机为32位时的索引的宽度,基址为Java虚拟机为32位时当前类的常量池中各项的地址。如,在32位时索引的宽度为4,而64位的Java虚拟机的索引宽度为8,32位时索引地址1234,现在可以是12340000,10001234等,偏移量不做任何限定。[0071]64位模板解释器1015用于定义三个派遣表,分别是解释线程当前使用的派遣表(_active_table),存放正常字节码地址的派遣表(_normal_table)和专门用于处理safepoint安全点的派遣表(_safept_table)。三个派遣表均由64位模板解释生成器1014进行初始化。_active_table在64位模板解释生成器1014初始化时将_active_table的值设置为_normal_table,当Java虚拟机进入和退出安全点时,使用_safept_table和_normal_table的值进行切换。[0072]64位模板解释生成器1014主要用于为Java虚拟机解释执行过程中的一些特殊处理提供通用接口支持。如进入Java方法、本地(native)方法前的栈帧建立以及参数传递,处理Java虚拟机解释执行过程中遇到的安全点、运行时异常、去优化等,同时提供了这些处理实现的入口地址。64位模板解释器1015最主要的实现是模板生成函数和模板解释生成器1014的实现。[0073]需要说明的是,Java二进制文件是以单字节对齐的由一个字节的操作码后面跟零个或多个提供该操作使用的参数或者数据的操作数组成的字节码流,Java指令集中绝大多数指令是根据类型信息进行编码的,如按照功能分为的装载和存储指令、运算指令、类型转换指令、控制转移指令、方法调用和返回指令、操作数栈管理指令、对象创建和操纵指令。模板生成函数为这些指令定义了相应的64位MIPS本地汇编实现,因此绝大多数实现工作是基于MIPS64中新增的64位算术运算、存取和逻辑运算指令所进行的。此外,Java虚拟机还可以规定long型指令和double型的数据均为64位。在64位MIPS平台下,整型寄存器和浮点寄存器的宽度都扩展为64位,所以对于long型和double型的所有字节码操作都需要依据64位进行实现。而不用像32位MIPS平台那样无论是整型寄存器还是浮点寄存器都是32位,对每个long型或者double型的数据进行存取时都需要两个寄存器才能够实现,降低了存取的复杂度。[0074]编译器102是Java虚拟机实现中非常复杂的一部分,为了支持多种优化的实现,它采用了很多传统编译技术,如针对高级中间表示中的SSA格式的编译等,同时针对Java程序语言特点增加了很多特性,如虚方法调用实现机制。[0075]图5为本发明编译器102的结构示意图,如图5所示,编译器102包括:低级中间表示(LIR)生成器1021和LIR汇编器1022。[0076]举例来说,编译器102可以是即时编译器(Just-1n-TimeCompiler,JIT)编译器,64位JIT编译器102和寄存器的交互关系可以如图3所示。[0077]LIR生成器1021,用于将Java字节码转换的高级中间表示转换为低级中间表示,形成LIR操作数,并对LIR操作数与寄存器的寄存的项进行映射。[0078]LIR汇编器1022,用于将LIR操作数的映射得到的项转换为相应的64位MIPS本地汇编。[0079]进一步地,Java虚拟机10启动时初始化JIT编译器102,创建编译队列,创建编译线程。Java虚拟机10中定义了两种不同的JIT编译器102,一种是面对客户端应用的具有启动时间短,响应速度快、编译开销小等特点的客户(Client)编译器,另一种是面对服务器端应用的具有优化力度大、峰值性能高、编译开销大等特点的服务(Server)编译器。在Java虚拟机10实现中针对不同的编译器使用了不同的编译策略,当方法调用次数或者循环执行次数超过阈值则添加编译任务到编译队列中,编译线程轮询编译队列,从编译队列中取得一个编译任务,并将该编译任务指派给当前编译线程,接着,唤醒JIT编译器102编译当前方法。[0080]举例来说,JIT编译器102将Java字节码转换为高级中间表示,高级中间表示是一种使用SSA格式的,基于图的平台无关的表示方式。所谓SSA,即静态单一赋值形式,它的主要特点是,每个变量仅被赋值一次,如果在源程序中一个变量被多次赋值,则分别生成不同的变量,以原变量加下标的方式命名。接着,经过LIR生成器1021,将高级中间表示转换为低级中间表示,低级中间表示非常接近三操作数机器码,它增加了一些高级指令,如对象分配和锁操作等指令。低级中间表示的数据结构为各个平台共享,但其生成过程会包含一些平台相关的实现,如寄存器的分配。低级中间表示继续保留了高级中间表示的控制流结构,所以它仍然是以基本块为单位进行组织的。LIR指令对操作数的类型进行了清楚的定义,它们可以是虚拟寄存器、物理寄存器、栈槽或者常数。与高级中间表示相比,低级中间表示更适合低级优化,如寄存器分配,因为所有的操作数要求目标寄存器是可见的。如果目标体系结构指令集中要求一些特殊的寄存器,也已经在低级中间表示中使用物理寄存器进行了模拟。在寄存器分配完成后,所有的虚拟寄存器都被实际物理寄存器和栈槽代替。一条LIR指令对应一条或者多条机器指令,在这个过程中进行寄存器的分配和LIR操作数与寄存器的映射。最后,经过LIR汇编器1022将LIR转换为本地汇编表示,在这个过程中还进行对寄存器的分配和LIR操作数与对应的寄存器的映射。由于LIR汇编器1022中会定义LIR操作的本地汇编实现。汇编实现主要有算术操作、移位操作、数据移动(move)操作、监控地址操作、方法调用操作、以及如数组拷贝操作、对象分配操作等特殊操作等,且在MIPS64的平台上Java的寄存器和指令集都变化为64位,因此,这些汇编都需要按照64位进行实现。[0081]举例来说,Java虚拟机分别从编译栈帧映射、LIR生成器1021和LIR汇编器1022三方面对JIT编译器102与64位MIPS平台相关的部分实现,下面以LIR算术操作为例介绍LIR汇编器1022的实现。[0082]由于64位的寄存器存取数据的宽度扩展,且其算术指令、移位指令和存储指令等指令也相应的改变。导致LIR中的算术操作、移位操作和数据移动操作都需要进行相应的调整,每个指令的操作数可以是常数或者寄存器类型。[0083]算术操作是一个双操作数操作,分别记作左操作数和右操作数,算术操作的汇编实现是根据当前的LIR指令对左操作数和右操作数进行相应的运算,将最终结果保存在目标操作数对应的寄存器中。下面以左操作数是双寄存器类型举例说明。[0084]若操作数是双寄存器类型,则表示该运算是long型运算,如果目标操作数是双整型寄存器类型,在64位实现中,由于64位的寄存器宽度的扩展即以64位为单位进行存储,单个的寄存器即可保存全部的运算结果,所以采用低位寄存器保存结果即可,而不用像在32位中那样需要2个寄存器分别保存结果的低位和高位才能存储。[0085]综上在MIPS64位的平台上Java虚拟机因为寄存器的存储单位扩大为64位,各寄存器直接执行加、减法指令,或者乘法除法指令即可实现运算,即编译器102中的加运算采用MIPS64位加法指令直接调用寄存器的数据运算即可实现,减运算、乘运算和除运算均可以采用MIPS64位减法、乘法和除法指令直接调用寄存器的数据运算实现,加快了运算速度。[0086]进一步的,运行时数据区103主要用于定义解释器101和编译器102中的一些公共实现,如异常处理、慢数组拷贝、垃圾回收等。此外,运行时数据区103为解释器101和编译器102的相互转换提供支持,由于解释器101和编译器102的实现机制相差很大,如栈帧结构、字节码执行方式等,为了实现解释器101和编译器102的交替执行,需要一些运行机制支持,如方法调用约定和数据传送实现以及完成解释执行与编译执行转换的适配器,这些都由运行时数据区103负责提供。[0087]运行时数据区103具体包括:堆区、方法区和寄存器,为了实现定义解释器101和编译器102中的一些公共实现,并为解释器101和编译器102的相互转换提供支持,寄存器存取数据均以64位为单位,且寄存器采用64位加载指令。[0088]举例来说,Java虚拟机加载一个32位整型值到64位的寄存器和加载一个指针到64位的寄存器实现加载指针的移植,对于MIPS64位平台上Java虚拟机,其指针为64位,所以需要采用64位加载指令(Id)来实现各个指针功能。[0089]本发明实例提供的Java虚拟机,Java虚拟机运行于MIPS64位平台上,采用64位指令集对接收的Java字节码进行代码汇编。这样一来,Java虚拟机可以支持MIPS64位版本,不再受到32位体系结构以及Linux操作系统内核的固有限制,能够提高存储空间的大小,进而提尚Java虚拟机的性能。[0090]本领域普通技术人员可以理解:实现上述各方法实例的全部或部分步骤可以通过程序指令来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。[0091]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。【主权项】1.一种64位Java虚拟机的实现方法,其特征在于,所述方法包括:接收Java字节码,并将所述Java字节码以64位格式写入64位寄存器中;采用64位汇编指令集对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取64位汇编代码;根据64位格式控制所述64位汇编代码的地址跳转,并运行所述64位汇编代码。2.根据权利要求1所述的方法,其特征在于,所述将所述Java字节码以64位格式写入64位寄存器中,包括:若所述Java字节码为长整型long型或双精度double型,则将所述Java字节码写入一个所述64位寄存器中。3.根据权利要求1所述的方法,其特征在于,所述采用64位汇编指令集对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取64位汇编代码,包括:根据64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取所述64位汇编代码。4.根据权利要求3所述的方法,其特征在于,所述64位模板表包括每个所述Java字节码对应的64位模板生成函数,所述64位模板生成函数包括所述64位汇编指令集对应的64位MIPS本地汇编,其中,所述64位汇编指令集包括装载和存储指令、运算指令、类型转换指令、控制转移指令、方法调用和返回指令、操作数栈管理指令、对象创建和操纵指令。5.根据权利要求3所述的方法,其特征在于,所述根据64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取所述64位汇编代码,包括:根据所述64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,将所述Java字节码转换为中间表示,形成LIR操作数,并对所述LIR操作数与所述64位寄存器中寄存的项分别进行映射,其中,所述LIR操作数为常量或寄存器类型;根据所述LIR操作数的映射得到的项对应的64位MIPS本地汇编将所述LIR转换为所述64位汇编代码。6.—种64位Java虚拟机的实现装置,其特征在于,应用于MIPS64位平台上,所述装置包括:寄存器模块,用于接收Java字节码,并以64位格式存储所述Java字节码;编译模块,用于采用64位汇编指令集对所述寄存器模块中的64位格式的所述Java字节码进行汇编,获取64位汇编代码;运行模块,用于根据64位格式控制所述64位汇编代码的地址跳转,并运行所述64位汇编代码。7.根据权利要求6所述的装置,其特征在于,所述寄存器模块,具体用于若所述Java字节码为长整型long型或双精度double型,则以64位格式存储所述Java字节码。8.根据权利要求6所述的装置,其特征在于,所述编译模块,具体用于根据64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,对所述64位寄存器中的64位格式的所述Java字节码进行汇编,获取所述64位汇编代码。9.根据权利要求8所述的装置,其特征在于,所述64位模板表包括每个所述Java字节码对应的64位模板生成函数,所述64位模板生成函数包括所述64位汇编指令集对应的64位MIPS本地汇编,其中,所述64位汇编指令集包括装载和存储指令、运算指令、类型转换指令、控制转移指令、方法调用和返回指令、操作数栈管理指令、对象创建和操纵指令。10.根据权利要求8所述的装置,其特征在于,所述编译模块,具体用于根据所述64位字节码模板、64位模板表、64位派遣表、64位模板解释生成器和64位模板解释器,将所述Java字节码转换为中间表示,形成LIR操作数,并对所述LIR操作数与所述64位寄存器中寄存的项分别进行映射,其中,所述LIR操作数为常量或寄存器类型;根据所述LIR操作数的映射得到的项对应的64位MIPS本地汇编将所述LIR转换为所述64位汇编代码。【文档编号】G06F9/455GK106033370SQ201510113379【公开日】2016年10月19日【申请日】2015年3月16日【发明人】蔡嵩松,张戈,刘奇【申请人】龙芯中科技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1