自适应动态编译调度方法及装置制造方法及图纸

技术编号:14444637 阅读:86 留言:0更新日期:2017-01-15 09:28
本发明专利技术提供了一种自适应动态编译调度方法及装置,涉及虚拟机编译调度技术领域,解决了现有技术中虚拟机的动态编译性能不高的问题。所述自适应动态编译调度方法包括:获取当前编译队列的长度,其中,所述当前编译队列为热点方法队列;若当前编译队列的长度大于队列长度阈值,则按照基于方法大小的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;若当前编译队列的长度不大于队列长度阈值,则按照基于方法运行速度的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;将编译调度时所选定的热点方法从所述当前编译队列中移除,并进行编译。本发明专利技术实施例适用于在JAVA等高级语言虚拟机中进行自适应动态编译调度。

【技术实现步骤摘要】

本专利技术涉及虚拟机编译调度
,尤其涉及一种自适应动态编译调度方法及装置
技术介绍
虚拟机(VM,VirtualMachine)主要通过软件或者辅以少量硬件支持的方法虚拟出一台计算机,其依托于本地的物理机,通过其执行引擎对给定的虚拟机指令序列在本地机器上模拟执行。虚拟机的执行引擎可以由解释器来实现,解释器以一条虚拟机指令为单位进行取指令、译码和执行。但单纯的解释执行性能低下,因此虚拟机中引入动态编译系统来提高其性能。编译器是动态编译系统的核心,以一组连续的虚拟机指令序列为单位整体编译成本地CPU指令序列,称为本地方法,然后由硬件直接执行翻译后的本地方法。编译器由于消除了重复的取指令和译码的过程,同时又在翻译时进行大量优化,因此其性能往往是解释器的10倍以上。解释执行期间,虚拟机会侦测程序中执行频度较高的方法,称为热点方法,编译器是在程序运行过程中,对虚拟机所侦测到的热点方法进行动态编译的,故又将其称为即时(JIT,Just-in-time)编译器。因此,现代虚拟机中一般同时包含解释器和即时编译器,并采用混合的运行模式来执行应用程序。对于程序中的任意一个方法m,均由解释器开始执行。若方法m的执行频度较高,则虚拟机调用即时编译器将方法m编译成本地方法,随后将由硬件直接执行编译生成的本地方法。这种由解释执行和硬件直接执行相混合的模式称为混合运行模式。对于采用混合运行模式的虚拟机,程序中所有方法均由解释器开始执行。解释执行期间,虚拟机会侦测程序中的热点方法。当某个热点方法被虚拟机识别后,该热点方法会被加入到编译队列中等待编译。当系统中的编译队列非空时,即时编译器会按照热点方法被加入编译队列的先后顺序,优先编译先加入队列的热点方法。在实现本专利技术的过程中,专利技术人发现现有技术中至少存在如下技术问题:按照热点方法被加入编译队列的先后顺序进行编译调度,调度策略比较单一,在程序运行过程中缺乏自适应能力,虚拟机的动态编译性能不高。
技术实现思路
本专利技术提供的自适应动态编译调度方法及装置,能够提升虚拟机的动态编译性能。第一方面,本专利技术提供一种自适应动态编译调度方法,包括:获取当前编译队列的长度,其中,所述当前编译队列为热点方法队列;若当前编译队列的长度大于队列长度阈值,则按照基于方法大小的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;若当前编译队列的长度不大于队列长度阈值,则按照基于方法运行速度的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;将编译调度时所选定的热点方法从所述当前编译队列中移除,并进行编译。第二方面,本专利技术提供一种自适应动态编译调度装置,包括:第一获取单元,用于获取当前编译队列的长度,其中,所述当前编译队列为热点方法队列;第一编译调度单元,用于在当前编译队列的长度大于队列长度阈值时,按照基于方法大小的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;第二编译调度单元,用于在当前编译队列的长度不大于队列长度阈值时,按照基于方法运行速度的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;移除单元,用于将编译调度时所选定的热点方法从所述当前编译队列中移除;编译单元,用于对所述移除单元所移除的热点方法进行编译。本专利技术实施例提供的自适应动态编译调度方法及装置,在当前编译队列的长度大于队列长度阈值时,按照基于方法大小的动态编译调度策略对当前编译队列中的热点方法进行编译调度,在当前编译队列的长度不大于队列长度阈值时,按照基于方法运行速度的动态编译调度策略对当前编译队列中的热点方法进行编译调度,并将编译调度时所选定的热点方法从当前编译队列中移除后进行编译。与现有技术相比,本专利技术能够根据编译队列的长度自适应地选择最佳的编译调度策略对当前编译队列中的所有热点方法进行编译调度,从而可以提高虚拟机动态编译的吞吐量,加快虚拟机的响应速度,提升虚拟机的动态编译性能。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术自适应动态编译调度方法实施例一的流程图;图2为本专利技术自适应动态编译调度方法实施例二的流程图;图3为本专利技术自适应动态编译调度装置实施例一的结构示意图;图4为本专利技术自适应动态编译调度装置实施例二的结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术提供一种自适应动态编译调度方法,图1为本专利技术自适应动态编译调度方法实施例一的流程图,如图1所示,本实施例的方法包括:S11、获取当前编译队列的长度,其中,所述当前编译队列为热点方法队列。这里的方法指的是面向对象程序设计中的方法,本质上是程序中的一个代码片段,是虚拟机进行编译的最小单元。因此,本文中“方法”的概念可以扩展为程序中能够被编译的最小代码片段,例如,面向过程的编程语言中的函数,以及Qemu等二进制翻译器中的基本块等。S12、若当前编译队列的长度大于队列长度阈值,则按照基于方法大小的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度。S13、若当前编译队列的长度不大于队列长度阈值,则按照基于方法运行速度的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度。S14、将编译调度时所选定的热点方法从所述当前编译队列中移除,并进行编译。本专利技术实施例提供的自适应动态编译调度方法,在当前编译队列的长度大于队列长度阈值时,按照基于方法大小的动态编译调度策略对当前编译队列中的热点方法进行编译调度,在当前编译队列的长度不大于队列长度阈值时,按照基于方法运行速度的动态编译调度策略对当前编译队列中的热点方法进行编译调度,并将编译调度时所选定的热点方法从当前编译队列中移除后进行编译。与现有技术相比,本专利技术能够根据编译队列的长度自适应地选择最佳的编译调度策略对当前编译队列中的所有热点方法进行编译调度,从而可以提高虚拟机动态编译的吞吐量,加快虚拟机的响应速度,提升虚拟机的动态编译性能。本专利技术实施例还提供一种自适应动态编译调度方法,图2为本专利技术自适应动态编译调度方法实施例二的流程图,如图2所示,本实施例的方法包括:S21、虚拟机启动,完成对解释器、编译器的初始化。S22、解释器初始化完毕后,开始解释执行程序中的方法。S23、编译器初始化完毕后进入等待编译的状态。S24、解释器在解释执行方法的同时,侦测方法是否属于热点方法,若该方法不属于热点方法,则继续解释执行;若该方法属于热点方法,则执行步骤S25。具体地,解释器侦测方法的执行次数是否超过热点阈值,若不超过热点阈值,则判定该方法不属于热点方法;若超过热点阈值,则判定该方法属于热点方法。S25、解释器将热点方法加入编译队列中,同时唤醒编译器,触发编本文档来自技高网
...
自适应动态编译调度方法及装置

【技术保护点】
一种自适应动态编译调度方法,其特征在于,包括:获取当前编译队列的长度,其中,所述当前编译队列为热点方法队列;若当前编译队列的长度大于队列长度阈值,则按照基于方法大小的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;若当前编译队列的长度不大于队列长度阈值,则按照基于方法运行速度的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;将编译调度时所选定的热点方法从所述当前编译队列中移除,并进行编译。

【技术特征摘要】
1.一种自适应动态编译调度方法,其特征在于,包括:获取当前编译队列的长度,其中,所述当前编译队列为热点方法队列;若当前编译队列的长度大于队列长度阈值,则按照基于方法大小的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;若当前编译队列的长度不大于队列长度阈值,则按照基于方法运行速度的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度;将编译调度时所选定的热点方法从所述当前编译队列中移除,并进行编译。2.根据权利要求1所述的方法,其特征在于,所述按照基于方法大小的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度包括:从所述当前编译队列中选取最小的热点方法。3.根据权利要求1所述的方法,其特征在于,所述按照基于方法运行速度的动态编译调度策略对所述当前编译队列中的热点方法进行编译调度包括:从所述当前编译队列中选取运行速度最大的热点方法。4.根据权利要求3所述的方法,其特征在于,在所述从所述当前编译队列中选取运行速度最大的热点方法进行编译之前,还包括:获取所述当前编译队列中所有热点方法的运行速度。5.根据权利要求4所述的方法,其特征在于,所述获取所述当前编译队列中所有热点方法的运行速度包括:按照如下公式计算获得当前编译队列中所有热点方法的运行速度:speed(m)=Δexecute(m)Δt]]>其中,speed(m)为热点方法m的运行速度,Δt为当前时刻前的某一时间段长度,Δexecute(m)为当前时刻前的Δt时间段内热点方法m的执行次数,Δexecute(m)=Δinvocation_count(m)+Δloop_count(m),Δinvocation_count(m)为当前时
\t刻前的Δt时间段内热点方法m被调用的次数,Δloop_count(m)为当前时刻前...

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

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

1