动态编译方法及装置的制造方法

文档序号:9929420阅读:237来源:国知局
动态编译方法及装置的制造方法
【技术领域】
[0001] 本发明实施例涉及虚拟机技术,尤其涉及一种动态编译方法及装置。
【背景技术】
[0002] 虚拟机(Virtual Machine,简称VM)指通过软件(或者辅以少量硬件支持)的方 法来虚拟出一台具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机,并 且这台虚拟的计算机通常还支持一套自己的指令集,称为虚拟机指令集。虚拟机依托于本 地的物理机,通过其执行引擎对给定的虚拟机指令序列(即目标程序)在本地机器上模拟 执行。虚拟机的执行引擎可以由解释器来实现。由于解释器具有可移植性高、实现代价低 和内存占用少等特点,大多数虚拟机的执行引擎都包含解释器。解释器以一条虚拟机指令 为单位进行取指令、译码和执行。但是单纯的解释执行性能低下,鉴于此,虚拟机中引入动 态编译系统以提升虚拟机性能。其中,编译器是动态编译系统的核心,编译器以一组连续的 虚拟机指令序列(基本块、函数或方法)为单位整体编译成本地CPU指令序列(也称为本 地方法),然后由硬件直接执行编译后的本地方法。由于编译器避免了重复的取指令和译 码的过程,同时又在编译时进行了大量卓有成效的优化,因而编译器的性能可以达到解释 器的性能的10倍以上。由于编译器是在程序运行过程中对虚拟机所检测到的执行频度较 高的方法(也称为热点方法)进行动态编译的,故又将其称为即时编译器(Just-in-time Compiler,简称 JIT)。
[0003] 现有的虚拟机中一般同时包含有解释器和即时编译器,并采用混合运行模式来执 行应用程序。所谓混合运行模式是指由解释执行和硬件直接执行相混合的模式,具体为:对 于程序中的任意一个方法m,均由解释器开始执行;若方法m的执行频度较高,则虚拟机调 用即时编译器将方法m编译成本地方法,然后由硬件直接执行编译生成的本地方法。由于 解释器的解释执行的性能较低,故让程序中尽量多的方法通过硬件直接执行是提升虚拟机 性能的关键。但是,和传统C/C++等静态编译不同,即时编译器是在程序运行过程中进行动 态编译的,这会引入额外的运行时开销。如果编译的方法过多,动态编译将需占用大量的计 算机资源,使得程序的正常执行受到影响,虚拟机对外界的响应变得迟钝。相反,如果编译 的方法过少,大多数方法将由解释器执行,造成程序运行速度同样非常缓慢。故而,现在亟 需一种动态编译方法,以优化动态编译过程中虚拟机的系统性能。

【发明内容】

[0004] 本发明实施例提供一种动态编译方法及装置,以提升虚拟机动态编译的吞吐量及 提尚虚拟机的响应速度。
[0005] 第一方面,本发明实施例提供一种动态编译方法,其中,所述方法包括:
[0006] 在当前编译队列中存在待编译的热点方法时,获取所述当前编译队列中各待编译 的热点方法的运行速度和大小;
[0007] 根据所述各待编译的热点方法的运行速度和大小,确定所述各待编译的热点方法 的优先级;
[0008] 调度所述当前编译队列中优先级最高的热点方法进行编译。
[0009] 根据第一方面,在第一方面的第一种可能的实现方式中,所述调度所述当前编译 队列中优先级最高的热点方法进行编译之后,还包括:
[0010] 将所述优先级最高的热点方法的编译状态置为已编译。
[0011] 根据第一方面,在第一方面的第二种可能的实现方式中,所述调度所述当前编译 队列中优先级最高的热点方法进行编译之后,还包括:
[0012] 将所述优先级最高的热点方法从所述当前编译队列中删除。
[0013] 根据第一方面,在第一方面的第三种可能的实现方式中,所述获取当前编译队列 中各热点方法的运行速度和大小之后,还包括:
[0014] 确定所述各热点方法的活跃性度量值,所述活跃性度量值用于体现所述各热点方 法的活跃性;
[0015] 将活跃性度量值小于或等于活跃性阈值的热点方法从所述当前编译队列中删除; 其中,所述活跃性阈值大于或等于0。
[0016] 根据第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式 中,所述活跃性度量值为热点方法的运行速度;或者,所述活跃性度量值为热点方法的执行 次数。
[0017] 根据第一方面、第一方面的第一种至第四种可能的实现方式中任意一种,在第一 方面的第五种可能的实现方式中,所述根据所述各待编译的热点方法的运行速度和大小, 确定所述各待编译的热点方法的优先级,包括:
[0018] 对于所述当前编译队列中的任一待编译的热点方法m,根据所述热点方法m的运 行速度speed (m)和大小size (m),采用以下公式得到所述热点方法m的优先级p(m):
[0019] p (m) = f (size (m), speed (m));
[0020] 其中,所述f表示关于所述size (m)和speed (m)的二元函数,并且满足:
[0021] (1)所述f在size (m)多0和speed(m)多0时有定义;
[0022] (2)对任意size (m)彡0和speed (m)彡0,所述f的值为非负;
[0023] (3)当size (m)彡0时,所述f随所述size (m)单调递减;
[0024] (4)当speed (m)多0时,所述f随所述speed (m)单调递增。
[0025] 根据第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式 中,所述f为以下公式:
[0028] 根据第一方面的第五种可能的实现方式,在第一方面的第七种可能的实现方式 中,所述获取所述当前编译队列中各待编译的热点方法的运行速度,包括:采用以下公式得 到所述热点方法m的运行速度speed (m):
[0030] 其中,所述At为当前时刻前的长度为预设时间常量的时间段,A execute (m)表 示在过去的△ t时间段内所述热点方法m的执行次数。
[0031] 第二方面,本发明实施例提供一种动态编译装置,其中,所述装置包括:
[0032] 参数获取模块,用于在当前编译队列中存在待编译的热点方法时,获取所述当前 编译队列中各待编译的;
[0033] 优先级确定模块,用于根据所述参数获取模块获取的所述待编译的各热点方法的 运行速度和大小,确定所述各待编译的热点方法的优先级;
[0034] 编译调度模块,用于调度所述当前编译队列中优先级最高的热点方法进行编译。
[0035] 根据第二方面,在第二方面的第一种可能的实现方式中,还包括:
[0036] 编译队列管理模块,用于在所述编译调度模块调度所述当前编译队列中优先级最 高的热点方法进行编译之后,将所述优先级最高的热点方法的编译状态置为已编译。
[0037] 根据第二方面,在第二方面的第二种可能的实现方式中,还包括:
[0038] 编译队列管理模块,用于在所述编译调度模块调度所述当前编译队列中优先级最 高的热点方法进行编译之后,将所述优先级最高的热点方法从所述当前编译队列中删除。
[0039] 根据第二方面,在第二方面的第三种可能的实现方式中,还包括:
[0040] 活跃性度量值确定模块,用于所述参数获取模块获取当前编译队列中各热点方法 的运行速度和大小之后,确定所述各热点方法的活跃性度量值,所述活跃性度量值用于体 现所述各热点方法的活跃性;
[0041] 当前编译队列更新模块,用于将活跃性度量值小于或等于活跃性阈值的热点方法 从所述当前编译队列中删除;其中,所述活跃
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1