动态编译方法及装置制造方法及图纸

技术编号:13799893 阅读:37 留言:0更新日期:2016-10-07 03:07
本发明专利技术实施例提供一种动态编译方法及装置,其中,所述方法包括:从虚拟机的代码缓存中获取待编译的热点方法的参数的预测值;若确定为所述参数传入的传入值与所述预测值不同,则将所述预测值更新为所述传入值;在将所述待编译的热点方法转化为中间代码后,使用所述预测值替换所述中间代码中的相应变量;对所述替换后的中间代码进行优化,并将优化后的中间代码转化为待执行的本地目标代码。本发明专利技术实施例提供的动态编译方法及装置,可以降低编译生成的代码规模,提升虚拟机的系统性能。

【技术实现步骤摘要】

本专利技术实施例涉及虚拟机技术,尤其涉及一种动态编译方法及装置
技术介绍
虚拟机是构建在指令集架构(ISA)或者应用二进制接口(ABI)间的转换层,虚拟机为上层的操作系统或应用程序提供不同于底层机器的虚拟执行环境。Java虚拟机是虚拟机的一种,它具有自己完善的体系架构及相应的指令系统,屏蔽与具体平台相关的信息,使Java程序只需生成虚拟机上运行的目标代码,就可在多种平台上不加修改地运行。虚拟机依托于本地的物理机,通过其执行引擎对给定的虚拟机指令序列(即目标程序)在本地机器上模拟执行。虚拟机的执行引擎一般包括解释器和编译器两种类型:解释器以单一目标指令为单位进行取指令、分析、执行;但是,解释器的单纯解释执行过程带来大量重复的取指令和译码操作,导致解释执行的性能低下。编译器以一组连续的目标指令(基本块、函数或方法)为单位整体编译成本地CPU指令集(也称为本地方法),然后由硬件直接执行本地方法;编译器避免了大量重复的取指令和译码的过程,同时又在编译时进行了大量卓有成效的优化,因而编译器性能可以达到解释器性能的10倍以上。和传统C/C++等静态编译不同,编译器是在虚拟机运行过程中进行动态编译的,故又称为即时编译器(Just-in-time Compiler,简称JIT),即时编译器会对检测到的执行频度较高的方法(也称为热点方法,或程序热点)进行编译。即时编译器的编译过程包括生成中间代码、优化中间代码及生成本地目标代码等阶段。现有技术编译输出的本地目标代码的冗余指令较多,影响了虚拟机的系统性能。
技术实现思路
本专利技术实施例提供一种动态编译方法及装置,以降低编译生成的代码规模,提升虚拟机的系统性能。第一方面,本专利技术实施例提供一种动态编译方法,其中,所述方法包括:从虚拟机的代码缓存中获取待编译的热点方法的参数的预测值;若确定为所述参数传入的传入值与所述预测值不同,则将所述预测值更新为所述传入值;在将所述待编译的热点方法转化为中间代码后,使用所述预测值替换所述中间代码中的相应变量;对所述替换后的中间代码进行优化,并将优化后的中间代码转化为待执行的本地目标代码。根据第一方面,在第一方面的第一种可能的实现方式中,还包括:若确定为所述参数传入的传入值与所述预测值相同,则将所述代码缓存中存储的与所述待编译的热点方法对应的本地目标代码,作为待执行的本地目标代码。根据第一方面,在第一方面的第二种可能的实现方式中,所述将优化后的中间代码转化为待执行的本地目标代码之后,还包括:在所述代码缓存中存储所述待执行的本地目标代码。根据第一方面、第一方面的第一种至第二种可能的实现方式中的任意一种,在第一方面的第三种可能的实现方式中,所述对所述替换后的中间代码进行优化,包括:在所述对所述替换后的中间代码进行优化时,对所述预测值所在的代码片段进行优化。根据第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述对所述预测值所在的代码片段进行优化,包括:采用常量合并和传播的优化方法对所述预测值所在的代码片段进行优化;或者,采用无用代码消除的优化方法对所述预测值所在的代码片段进行优化。第二方面,本专利技术实施例提供一种动态编译装置,其中,所述装置包括:获取模块,用于从虚拟机的代码缓存中获取待编译的热点方法的参数的预测值;更新模块,用于若确定为所述参数传入的传入值与所述预测值不同,则将所述预测值更新为所述传入值;转化模块,用于将所述待编译的热点方法转化为中间代码;替换模块,用于所述转化模块将所述待编译的热点方法转化为中间代码后,使用所述预测值替换所述中间代码中的相应变量;优化模块,用于对所述替换后的中间代码进行优化;所述转化模块,还用于将所述优化模块优化后的中间代码转化为待执行的本地目标代码。根据第二方面,在第二方面的第一种可能的实现方式中,还包括:确定模块,用于若确定为所述参数传入的传入值与所述预测值相同,则将所述代码缓存中存储的与所述待编译的热点方法对应的本地目标代码,作为待执行的本地目标代码。根据第二方面,在第二方面的第二种可能的实现方式中,还包括:存储模块,用于在所述转化模块将优化后的中间代码转化为待执行的本地目标代码之后,在所述代码缓存中存储所述生成的本地目标代码。根据第二方面、第二方面的第一种至第二种可能的实现方式中的任意一种,在第二方面的第三种可能的实现方式中,所述优化模块,具体用于在所述对所述替换后的中间代码进行优化时,对所述预测值所在的代码片段进行优化。根据第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述优化模块,具体用于:采用常量合并和传播的优化方法对所述预测值所在的代码片段进行优化;或者,采用无用代码消除的优化方法对所述预测值所在的代码片段进行优化。本专利技术实施例提供的动态编译方法及装置,若确定待编译的热点方法的参数的当前值与其预测值不同,则在将待编译的热点方法转化为中间代码之后,使用所述预测值替换所述中间代码中对应的变量,将方法的参数对应的变量转化为常数,使得在对替换后的中间代码进行优化时,也能够对所述预测值(该预测值与所述待编译的热点方法的参数对应)所在的代码片段进行优化处理,从而生成精简的本地目标代码,相比于现有技术,本专利技术实施例提供的动态编译方法能够减少生成后的本地目标代码中的指令条数,降低编
译生成的代码规模,缩小编译后代码的空间开销,也可以提升本地目标代码的执行性能,提升虚拟机的性能。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例提供的动态编译方法的流程图;图2为本专利技术实施例提供的动态编译方法的另一流程图;图3为本专利技术实施例提供的动态编译装置的结构示意图;图4为本专利技术实施例提供的动态编译装置的另一结构示意图;图5为本专利技术实施例提供的动态编译装置的又一结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。图1为本专利技术实施例提供的动态编译方法的流程图。如图1所示,本专利技术实施例提供的动态编译方法,包括:101、从虚拟机的代码缓存中获取待编译的热点方法的参数的预测值。102、若确定为所述参数传入的传入值与所述预测值不同,则将所述预测值更新为所述传入值。即相当于在为参数输入传入值时,若该传入值与缓存的预测值不同,则使预测值等于传入值。103、在将所述待编译的热点方法转化为中间代码后,使用所述预测值替换所述中间代码中的相应变量。热点方法中的参数是与编译后的中间代码中的变量一一对应的,因此用
预测值替换中间代码中的变量,即相当于是将参数由不确定的变量转换为固定的常数值,并用该常数值替换中间代码中的对应变量。104、对所述替换后的中间代码进行优化,并将优化后的中间代码转本文档来自技高网
...

【技术保护点】
一种动态编译方法,其特征在于,包括:从虚拟机的代码缓存中获取待编译的热点方法的参数的预测值;若确定为所述参数传入的传入值与所述预测值不同,则将所述预测值更新为所述传入值;在将所述待编译的热点方法转化为中间代码后,使用所述预测值替换所述中间代码中的相应变量;对所述替换后的中间代码进行优化,并将优化后的中间代码转化为待执行的本地目标代码。

【技术特征摘要】
1.一种动态编译方法,其特征在于,包括:从虚拟机的代码缓存中获取待编译的热点方法的参数的预测值;若确定为所述参数传入的传入值与所述预测值不同,则将所述预测值更新为所述传入值;在将所述待编译的热点方法转化为中间代码后,使用所述预测值替换所述中间代码中的相应变量;对所述替换后的中间代码进行优化,并将优化后的中间代码转化为待执行的本地目标代码。2.根据权利要求1所述的方法,其特征在于,还包括:若确定为所述参数传入的传入值与所述预测值相同,则将所述代码缓存中存储的与所述待编译的热点方法对应的本地目标代码,作为待执行的本地目标代码。3.根据权利要求1所述的方法,其特征在于,所述将优化后的中间代码转化为待执行的本地目标代码之后,还包括:在所述代码缓存中存储所述待执行的本地目标代码。4.根据权利要求1-3中任意一项所述的方法,其特征在于,所述对所述替换后的中间代码进行优化,包括:在所述对所述替换后的中间代码进行优化时,对所述预测值所在的代码片段进行优化。5.根据权利要求4所述的方法,其特征在于,所述对所述预测值所在的代码片段进行优化,包括:采用常量合并和传播的优化方法对所述预测值所在的代码片段进行优化;或者,采用无用代码消除的优化方法对所述预测值所在的代码片段进行优化。6.一种动态编译装置,其特征在于,包括:获取模块,用于从虚拟机的代码缓存...

【专利技术属性】
技术研发人员:王一光靳国杰高翔
申请(专利权)人:龙芯中科技术有限公司
类型:发明
国别省市:北京;11

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

1