【技术实现步骤摘要】
本专利技术涉及编译技术,具体涉及一种热点中间代码的识别方法以及装置。
技术介绍
在代码的执行过程中,为了屏蔽平台的差异性,首先要把源代码转换为中间代码,然后运行在各自的语言虚拟机,语言虚拟机为运行中间代码的虚拟机,例如执行JAVA的中间代码(字节码)的JAVA虚拟机(JVM,JavaVirtualMachine)一般包括解释器(Interpreter)、即时(JIT,JustInTime)编译器。在中间代码的执行过程中,解释器用于在程序启动时,对中间代码进行逐个翻译并执行,执行效率比较低,即时编译器用于将中间代码编译为用于被调用执行的本地代码,本地代码的执行效率比较高。一些即时编译器又可以细分为轻量级编译器、重量级编译器。重量级编译器相比轻量级编译器优化手段更丰富,编译效果更好,但编译时开销更大。然而,在不能有效地识别热点的中间代码(执行频率高的中间代码)时,使得即时编译器编译出执行频率低的本地代码,这些执行频率低的本地代码占据了大量存储空间,会影响接下来的执行频率高的中间代码的编译过程,造成了存储空间浪费且严重影响语言虚拟机整体运行性能。
技术实现思路
本专利技术的目的在于提供一种热点中间代码的识别方法以及装置,用于识别热点的中间代码。上述目标和其它目标将通过独立权利要求中的特征来达成。进一步的实现方式在从属权利要求、说明书和附图中体现。第一方面,提供一种热点中间代码的识别装置,所述装置包括 ...
【技术保护点】
一种热点中间代码的识别方法,其特征在于,所述方法包括:在待识别函数被语言虚拟机执行时,获取指令计数器中的指令地址,判断所述指令计数器中的指令地址对应的本地指令是否为所述待识别函数的本地指令;在所述指令计数器中的指令地址对应的本地指令为所述待识别函数的本地指令时,将所述待识别函数的当前的热度值增加预设值,以更新所述待识别函数的热度值;判断所述待识别函数的更新后的热度值是否大于或等于所述待识别函数的热度阈值,在所述待识别函数的更新后的热度值大于或等于所述待识别函数的热度阈值时,将所述待识别函数的中间代码作为热点中间代码。
【技术特征摘要】
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任一项所述的装置,所述更新电路包括热度值
计数器,所述热度值计数器用于:...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。