语言虚拟机中热点中间代码的识别方法以及装置制造方法及图纸

技术编号:14567607 阅读:70 留言:0更新日期:2017-02-06 01:13
一种热点中间代码的识别方法以及装置。其中热点中间代码的识别方法包括:在待识别函数被语言虚拟机执行时,获取指令计数器中的指令地址,判断指令地址对应的本地指令是否为待识别函数的本地指令;在指令地址对应的本地指令为待识别函数的本地指令时,将待识别函数的当前的热度值增加预设值,以更新待识别函数的热度值;判断待识别函数的更新后的热度值是否大于或等于待识别函数的热度阈值,在待识别函数的更新后的热度值大于或等于待识别函数的热度阈值时,将待识别函数的中间代码作为热点中间代码。使用上述方法,可以识别出热点中间代码。

【技术实现步骤摘要】

本专利技术涉及编译技术,具体涉及一种热点中间代码的识别方法以及装置。
技术介绍
在代码的执行过程中,为了屏蔽平台的差异性,首先要把源代码转换为中间代码,然后运行在各自的语言虚拟机,语言虚拟机为运行中间代码的虚拟机,例如执行JAVA的中间代码(字节码)的JAVA虚拟机(JVM,JavaVirtualMachine)一般包括解释器(Interpreter)、即时(JIT,JustInTime)编译器。在中间代码的执行过程中,解释器用于在程序启动时,对中间代码进行逐个翻译并执行,执行效率比较低,即时编译器用于将中间代码编译为用于被调用执行的本地代码,本地代码的执行效率比较高。一些即时编译器又可以细分为轻量级编译器、重量级编译器。重量级编译器相比轻量级编译器优化手段更丰富,编译效果更好,但编译时开销更大。然而,在不能有效地识别热点的中间代码(执行频率高的中间代码)时,使得即时编译器编译出执行频率低的本地代码,这些执行频率低的本地代码占据了大量存储空间,会影响接下来的执行频率高的中间代码的编译过程,造成了存储空间浪费且严重影响语言虚拟机整体运行性能。
技术实现思路
本专利技术的目的在于提供一种热点中间代码的识别方法以及装置,用于识别热点的中间代码。上述目标和其它目标将通过独立权利要求中的特征来达成。进一步的实现方式在从属权利要求、说明书和附图中体现。第一方面,提供一种热点中间代码的识别装置,所述装置包括:获取电路,用于在待识别函数被语言虚拟机执行时,获取指令计数器中的指令地址;第一判断电路,用于根据所述获取电路获取的所述指令计数器中的指令地址,判断所述指令计数器中的指令地址对应的本地指令是否为所述待识别函数的本地指令;更新电路,用于在所述第一判断电路确定所述指令计数器中的指令地址对应的本地指令为所述待识别函数的本地指令时,将所述待识别函数的当前的热度值增加预设值,以更新所述待识别函数的热度值;第二判断电路,用于判断所述更新电路得到的所述待识别函数的更新后的热度值是否大于或等于所述待识别函数的热度阈值,在所述待识别函数的更新后的热度值大于所述待识别函数的热度阈值时,将所述待识别函数的中间代码作为热点中间代码。其中,更新所述待识别函数的热度值指的是用新的热度值来替换当前的热度值,当前的热度值在更新前后会发生改变,更新之后的当前的热度值,或者说更新后的热度值就变成了更新前的那个新的热度值。该装置通过获取指令计数器中的指令地址,判断所述指令计数器中的指令地址对应的本地指令是否为所述待识别函数的本地指令,使得可以实现在解释器或是即时编译执行代码的过程中识别出热点中间代码。根据第一方面,在所述装置第一种可能的实现方式中,所述第一判断电路用于:判断所述指令计数器中的指令地址是否在所述待识别函数的本地指令空间的地址范围内,所述待识别函数的本地指令空间中的本地指令包括所述待识别函数的本地指令,并且所述待识别函数的本地指令空间中的本地指令不包括用于实现所述语言虚拟机功能的本地指令。该实现方式可以有效区分当前正在执行的指令是用于实现语言虚拟机自身功能的本地指令,还是语言虚拟机执行的函数的本地指令,从而简单且有效的实现判断所述指令计数器中的指令地址对应的本地指令是否为所述待识别函数的本地指令。其中函数也可以称为方法,用于实现语言虚拟机自身功能的本地指令也可以称为主机端代码中的指令,语言虚拟机执行的函数的本地指令也可以称为客户端代码中的指令。根据第一方面的第一种实现方式,在所述装置第二种可能的实现方式中,所述语言虚拟机包括解释器,所述待识别函数的本地指令空间中的本地指令包括用于中的本地指令包括所述解释器翻译的中间指令对应的本地指令,所述用于所述解释器翻译的中间指令对应的本地指令包括所述待识别函数的本地指令。相应的,所述待识别函数被执行可以包括:所述待识别函数的中间代码被执行。在语言虚拟机中的解释器翻译中间代码的过程中,所有中间指令对应的本地指令被存储在连续的存储空间,也就是可通过所述解释器翻译获得的本地指令的存储空间,所述存储空间可以是内存空间,所述本地代码可以是汇编代码,所述中间代码也可以是字节码,通过判断当前执行的本地指令的指令地址是否在可通过所述解释器翻译获得的本地指令的存储空间的地址范围内,可实现解释器翻译阶段中判断所述指令计数器中的指令地址对应的本地指令是否为所述待识别函数的本地指令。根据第一方面的第一种实现方式,在所述装置第三种可能的实现方式中,所述语言虚拟机包括及时编译器,所述待识别函数的本地指令空间用于存储所述待识别函数的本地代码,所述待识别函数的本地指令为所述待识别函数的本地代码中的指令,所述待识别函数的本地代码通过所述及时编译器编译获得。相应的,所述待识别函数被执行可以包括:所述待识别函数的本地代码被执行。即时编译器编译获得的所述待识别函数的本地代码,会以所述待识别函数为一个整体,将所述待识别函数的本地代码存储在用于存储所述待识别函数的本地代码的存储空间,其中,该存储空间可以是内存,例如,该存储空间可以是代码缓冲区(codecache),其中所述待识别函数的本地代码可以是通过及时编译器中的轻量级编译器获得的所述待识别函数的轻量级本地代码,也可以是通过及时编译器中的重量级编译器获得的所述待识别函数的重量级本地代码。在所述待识别函数的本地代码为轻量级本地代码时,通过判断当前执行的本地指令的指令地址是否在用于存储所述待识别函数的本地代码的存储空间的地址范围内,可实现在轻量级本地代码被执行阶段中,判断所述指令计数器中的指令地址对应的本地指令是否为所述待识别函数的本地指令;在所述待识别函数的本地代码为重量级本地代码时,通过判断当前执行的本地指令的指令地址是否在用于存储所述待识别函数的本地代码的存储空间的地址范围内,可实现在重量级本地代码被执行阶段中,判断所述指令计数器中的指令地址对应的本地指令是否为所述待识别函数的本地指令,从而实现对重量级本地代码的执行频率的统计。根据第一方面,或以上第一方面的任意一种实现方式,在所述装置第四种可能的实现方式中,所述更新电路包括热度值计数器,所述热度值计数器用于:将所述热度值计数器中的所述待识别函数的热度值加1。该热度值计数器为计数器,可以通过输入的电平(例如,通过电平变化的上升沿)来触发计数,从而替代软件计数的实现方式,从而减轻软件实现的负担。并且由本文档来自技高网...

【技术保护点】
一种热点中间代码的识别方法,其特征在于,所述方法包括:在待识别函数被语言虚拟机执行时,获取指令计数器中的指令地址,判断所述指令计数器中的指令地址对应的本地指令是否为所述待识别函数的本地指令;在所述指令计数器中的指令地址对应的本地指令为所述待识别函数的本地指令时,将所述待识别函数的当前的热度值增加预设值,以更新所述待识别函数的热度值;判断所述待识别函数的更新后的热度值是否大于或等于所述待识别函数的热度阈值,在所述待识别函数的更新后的热度值大于或等于所述待识别函数的热度阈值时,将所述待识别函数的中间代码作为热点中间代码。

【技术特征摘要】
1.一种热点中间代码的识别方法,其特征在于,所述方法包括:
在待识别函数被语言虚拟机执行时,获取指令计数器中的指令地址,判
断所述指令计数器中的指令地址对应的本地指令是否为所述待识别函数的本
地指令;
在所述指令计数器中的指令地址对应的本地指令为所述待识别函数的本
地指令时,将所述待识别函数的当前的热度值增加预设值,以更新所述待识
别函数的热度值;
判断所述待识别函数的更新后的热度值是否大于或等于所述待识别函数
的热度阈值,在所述待识别函数的更新后的热度值大于或等于所述待识别函
数的热度阈值时,将所述待识别函数的中间代码作为热点中间代码。
2.根据权利要求1所述的方法,其特征在于,所述判断所述指令计数器
中的指令地址对应的本地指令是否为所述待识别函数的本地指令,包括:
判断所述指令计数器中的指令地址是否在所述待识别函数的本地指令空
间的地址范围内,所述待识别函数的本地指令空间中的本地指令包括所述待
识别函数的本地指令所述待识别函数的本地指令空间,并且所述待识别函数
的本地指令空间中的本地指令不包括用于实现所述语言虚拟机功能的本地指
令。
3.根据权利要求2所述的方法,其特征在于,所述语言虚拟机包括解释
器,所述待识别函数的本地指令空间中的本地指令包括用于被所述解释器翻
译的中间指令对应的本地指令,所述用于所述解释器翻译的中间指令对应的
本地指令包括所述待识别函数的本地指令。
4.根据权利要求2所述的方法,其特征在于,所述语言虚拟机包括及时
编译器,所述待识别函数的本地指令空间用于存储所述待识别函数的本地代
码,所述待识别函数的本地指令为所述待识别函数的本地代码中的指令,所
述待识别函数的本地代码通过所述及时编译器编译获得。
5.根据权利要求2至4任一项所述的方法,所述待识别函数的本地指令
空间为地址连续的存储空间,所述待识别函数的本地指令空间的地址范围用
所述待识别函数的本地指令空间的起始地址和所述待识别函数的本地指令空
间的终止地址来表示,其中,所述待识别函数的本地指令空间的终止地址大

\t于或等于所述待识别函数的本地指令空间的起始地址,所述判断所述指令计
数器中的指令地址是否在所述待识别函数的本地指令空间的地址范围内包
括:
判断所述指令计数器中的指令地址是否大于或等于所述待识别函数的本
地指令空间的起始地址,并且所述指令计数器中的指令地址是否小于或等于
所述待识别函数的本地指令空间的终止地址;
在所述指令计数器中的指令地址大于或等于所述待识别函数的本地指令
空间的起始地址,并且小于或等于所述待识别函数的本地指令空间的终止地
址时,则指示所述指令计数器中的指令地址在所述待识别函数的本地指令空
间的地址范围内。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述获取指令
计数器中的指令地址包括:周期性地获取所述指令计数器中的指令地址;
所述判断所述待识别函数的更新后的热度值是否大于或等于所述待识别
函数的热度阈值包括:
在所述语言虚拟机返回所述待识别函数时,或在所述语言虚拟机返回所
述待识别函数之后,判断所述待识别函数的更新后的热度值是否大于或等于
所述待识别函数的热度阈值。
7.根据权利要求1至6任一项所述的方法,其特征在于,在判断所述待
识别函数的更新后的热度值大于或等于所述待识别函数的热度阈值之后,所
述方法还包括:
在所述待识别函数的在预设的时段之前的热度值大于或等于所述待识别
函数的热度值阈值时,计算所述待识别函数的更新后的热度值减去所述待识
别函数的在预设的时段之前的热度值而获得的差值;
在所述差值小于预设的删除阈值时,将所述待识别函数的本地代码从所
述待识别函数的本地代码的存储空间中删除。
8.一种热点中间代码的识别装置,其特征在于,所述装置包括:
获取电路,用于在待识别函数被语言虚拟机执行时,获取指令计数器中
的指令地址;
第一判断电路,用于根据所述获取单元获取的所述指令计数器中的指令

\t地址,判断所述指令计数器中的指令地址对应的本地指令是否为所述待识别
函数的本地指令;
更新电路,用于在所述第一判断单元确定所述指令计数器中的指令地址
对应的本地指令为所述待识别函数的本地指令时,将所述待识别函数的当前
的热度值增加预设值,以更新所述待识别函数的热度值;
第二判断电路,用于判断所述更新单元得到的所述待识别函数的更新后
的热度值是否大于或等于所述待识别函数的热度阈值,在所述待识别函数的
更新后的热度值大于所述待识别函数的热度阈值时,将所述待识别函数的中
间代码作为热点中间代码。
9.根据权利要求8所述的装置,其特征在于,所述第一判断电路用于:
判断所述指令计数器中的指令地址是否在所述待识别函数的本地指令空
间的地址范围内,所述待识别函数的本地指令空间中的本地指令包括所述待
识别函数的本地指令,并且所述待识别函数的本地指令空间中的本地指令不
包括用于实现所述语言虚拟机功能的本地指令。
10.根据权利要求9所述的装置,其特征在于,所述语言虚拟机包括解
释器,所述待识别函数的本地指令空间中的本地指令包括用于被所述解释器
翻译的中间指令对应的本地指令,所述用于所述解释器翻译的中间指令对应
的本地指令包括所述待识别函数的本地指令。
11.根据权利要求9所述的装置,其特征在于,所述语言虚拟机包括及
时编译器,所述待识别函数的本地指令空间用于存储所述待识别函数的本地
代码,所述待识别函数的本地指令为所述待识别函数的本地代码中的指令,
所述待识别函数的本地代码通过所述及时编译器编译获得。
12.根据权利要求8至11任一项所述的装置,所述更新电路包括热度值
计数器,所述热度值计数器用于:...

【专利技术属性】
技术研发人员:易明亮陈龙
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东;44

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

1