CN105718298A - 动态编译方法及装置 - Google Patents
动态编译方法及装置 Download PDFInfo
- Publication number
- CN105718298A CN105718298A CN201410727430.3A CN201410727430A CN105718298A CN 105718298 A CN105718298 A CN 105718298A CN 201410727430 A CN201410727430 A CN 201410727430A CN 105718298 A CN105718298 A CN 105718298A
- Authority
- CN
- China
- Prior art keywords
- speed
- hotspot approach
- size
- compiled
- hotspot
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Abstract
本发明实施例提供一种动态编译方法及装置,其中,所述动态编译方法包括:在当前编译队列中存在待编译的热点方法时,获取所述当前编译队列中各待编译的热点方法的运行速度和大小;根据所述各待编译的热点方法的运行速度和大小,确定所述各待编译的热点方法的优先级;调度所述当前编译队列中优先级最高的热点方法进行编译。本发明实施例提供的动态编译方法及装置,可以大幅度提升编译的吞吐量,有效提高虚拟机的响应速度。
Description
技术领域
本发明实施例涉及虚拟机技术,尤其涉及一种动态编译方法及装置。
背景技术
虚拟机(VirtualMachine,简称VM)指通过软件(或者辅以少量硬件支持)的方法来虚拟出一台具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机,并且这台虚拟的计算机通常还支持一套自己的指令集,称为虚拟机指令集。虚拟机依托于本地的物理机,通过其执行引擎对给定的虚拟机指令序列(即目标程序)在本地机器上模拟执行。虚拟机的执行引擎可以由解释器来实现。由于解释器具有可移植性高、实现代价低和内存占用少等特点,大多数虚拟机的执行引擎都包含解释器。解释器以一条虚拟机指令为单位进行取指令、译码和执行。但是单纯的解释执行性能低下,鉴于此,虚拟机中引入动态编译系统以提升虚拟机性能。其中,编译器是动态编译系统的核心,编译器以一组连续的虚拟机指令序列(基本块、函数或方法)为单位整体编译成本地CPU指令序列(也称为本地方法),然后由硬件直接执行编译后的本地方法。由于编译器避免了重复的取指令和译码的过程,同时又在编译时进行了大量卓有成效的优化,因而编译器的性能可以达到解释器的性能的10倍以上。由于编译器是在程序运行过程中对虚拟机所检测到的执行频度较高的方法(也称为热点方法)进行动态编译的,故又将其称为即时编译器(Just-in-timeCompiler,简称JIT)。
现有的虚拟机中一般同时包含有解释器和即时编译器,并采用混合运行模式来执行应用程序。所谓混合运行模式是指由解释执行和硬件直接执行相混合的模式,具体为:对于程序中的任意一个方法m,均由解释器开始执行;若方法m的执行频度较高,则虚拟机调用即时编译器将方法m编译成本地方法,然后由硬件直接执行编译生成的本地方法。由于解释器的解释执行的性能较低,故让程序中尽量多的方法通过硬件直接执行是提升虚拟机性能的关键。但是,和传统C/C++等静态编译不同,即时编译器是在程序运行过程中进行动态编译的,这会引入额外的运行时开销。如果编译的方法过多,动态编译将需占用大量的计算机资源,使得程序的正常执行受到影响,虚拟机对外界的响应变得迟钝。相反,如果编译的方法过少,大多数方法将由解释器执行,造成程序运行速度同样非常缓慢。故而,现在亟需一种动态编译方法,以优化动态编译过程中虚拟机的系统性能。
发明内容
本发明实施例提供一种动态编译方法及装置,以提升虚拟机动态编译的吞吐量及提高虚拟机的响应速度。
第一方面,本发明实施例提供一种动态编译方法,其中,所述方法包括:
在当前编译队列中存在待编译的热点方法时,获取所述当前编译队列中各待编译的热点方法的运行速度和大小;
根据所述各待编译的热点方法的运行速度和大小,确定所述各待编译的热点方法的优先级;
调度所述当前编译队列中优先级最高的热点方法进行编译。
根据第一方面,在第一方面的第一种可能的实现方式中,所述调度所述当前编译队列中优先级最高的热点方法进行编译之后,还包括:
将所述优先级最高的热点方法的编译状态置为已编译。
根据第一方面,在第一方面的第二种可能的实现方式中,所述调度所述当前编译队列中优先级最高的热点方法进行编译之后,还包括:
将所述优先级最高的热点方法从所述当前编译队列中删除。
根据第一方面,在第一方面的第三种可能的实现方式中,所述获取当前编译队列中各热点方法的运行速度和大小之后,还包括:
确定所述各热点方法的活跃性度量值,所述活跃性度量值用于体现所述各热点方法的活跃性;
将活跃性度量值小于或等于活跃性阈值的热点方法从所述当前编译队列中删除;其中,所述活跃性阈值大于或等于0。
根据第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述活跃性度量值为热点方法的运行速度;或者,所述活跃性度量值为热点方法的执行次数。
根据第一方面、第一方面的第一种至第四种可能的实现方式中任意一种,在第一方面的第五种可能的实现方式中,所述根据所述各待编译的热点方法的运行速度和大小,确定所述各待编译的热点方法的优先级,包括:
对于所述当前编译队列中的任一待编译的热点方法m,根据所述热点方法m的运行速度speed(m)和大小size(m),采用以下公式得到所述热点方法m的优先级p(m):
p(m)=f(size(m),speed(m));
其中,所述f表示关于所述size(m)和speed(m)的二元函数,并且满足:
(1)所述f在size(m)≥0和speed(m)≥0时有定义;
(2)对任意size(m)≥0和speed(m)≥0,所述f的值为非负;
(3)当size(m)≥0时,所述f随所述size(m)单调递减;
(4)当speed(m)≥0时,所述f随所述speed(m)单调递增。
根据第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,所述f为以下公式:
根据第一方面的第五种可能的实现方式,在第一方面的第七种可能的实现方式中,所述获取所述当前编译队列中各待编译的热点方法的运行速度,包括:采用以下公式得到所述热点方法m的运行速度speed(m):
其中,所述Δt为当前时刻前的长度为预设时间常量的时间段,Δexecute(m)表示在过去的Δt时间段内所述热点方法m的执行次数。
第二方面,本发明实施例提供一种动态编译装置,其中,所述装置包括:
参数获取模块,用于在当前编译队列中存在待编译的热点方法时,获取所述当前编译队列中各待编译的;
优先级确定模块,用于根据所述参数获取模块获取的所述待编译的各热点方法的运行速度和大小,确定所述各待编译的热点方法的优先级;
编译调度模块,用于调度所述当前编译队列中优先级最高的热点方法进行编译。
根据第二方面,在第二方面的第一种可能的实现方式中,还包括:
编译队列管理模块,用于在所述编译调度模块调度所述当前编译队列中优先级最高的热点方法进行编译之后,将所述优先级最高的热点方法的编译状态置为已编译。
根据第二方面,在第二方面的第二种可能的实现方式中,还包括:
编译队列管理模块,用于在所述编译调度模块调度所述当前编译队列中优先级最高的热点方法进行编译之后,将所述优先级最高的热点方法从所述当前编译队列中删除。
根据第二方面,在第二方面的第三种可能的实现方式中,还包括:
活跃性度量值确定模块,用于所述参数获取模块获取当前编译队列中各热点方法的运行速度和大小之后,确定所述各热点方法的活跃性度量值,所述活跃性度量值用于体现所述各热点方法的活跃性;
当前编译队列更新模块,用于将活跃性度量值小于或等于活跃性阈值的热点方法从所述当前编译队列中删除;其中,所述活跃性阈值大于或等于0。
根据第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述活跃性度量值为热点方法的运行速度;或者,
所述活跃性度量值为热点方法的执行次数。
根据第二方面、第二方面的第一种至第四种可能的实现方式中任意一种,在第二方面的第五种可能的实现方式中,所述优先级确定模块,具体用于:
对于所述当前编译队列中的任一待编译的热点方法m,根据所述热点方法m的运行速度speed(m)和大小size(m),采用以下公式得到所述热点方法m的优先级p(m):
p(m)=f(size(m),speed(m));
其中,所述f表示关于所述size(m)和speed(m)的二元函数,并且满足:
(1)所述f在size(m)≥0和speed(m)≥0时有定义;
(2)对任意size(m)≥0和speed(m)≥0,所述f的值为非负;
(3)当size(m)≥0时,所述f随所述size(m)单调递减;
(4)当speed(m)≥0时,所述f随所述speed(m)单调递增。
根据第二方面的第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述f为以下公式:
根据第二方面的第五种可能的实现方式,在第二方面的第七种可能的实现方式中,所述参数获取模块,采用以下公式得到所述热点方法m的运行速度speed(m):
其中,所述Δt为当前时刻前的长度为预设时间常量的时间段,Δexecute(m)表示在过去的Δt时间段内所述热点方法m的执行次数。
采用本发明实施例提供的动态编译方法及装置,以各待编译的热点方法的运行速度和大小为参数确定的各热点方法的优先级,综合反映了各待编译的热点方法的重要程度和所需编译时间这两个关键因素,并优先调度优先级较高的热点方法进行编译,可以大幅度提升编译的吞吐量,有效提高虚拟机的响应速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的动态编译方法的流程图;
图2为本发明实施例提供的动态编译方法的工作示意图;
图3为本发明实施例提供的虚拟机动态编译流程图;
图4为本发明实施例提供的动态编译装置的结构示意图;
图5为本发明实施例提供的动态编译装置的另一结构示意图;
图6为本发明实施例提供的动态编译装置的又一结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的动态编译方法的流程图。如图1所示,本发明实施例提供的动态编译方法,包括:
101、在当前编译队列中存在待编译的热点方法时,获取所述当前编译队列中各待编译的热点方法的运行速度和大小。
在本实施例中,方法的运行速度是指该方法的执行频度,即单位时间内该方法被调用的次数。
值得说明的是,程序中所有方法均由解释器开始执行,解释器在执行方法的同时,虚拟机会检测程序中所有方法的执行频度,将执行频度较高的方法识别为热点方法,及将该热点方法加入当前编译队列中待编译。
102、根据所述各待编译的热点方法的运行速度和大小,确定所述各待编译的热点方法的优先级。
103、调度所述当前编译队列中优先级最高的热点方法进行编译。
在本实施例中,所述方法在虚拟机中实际上就是一串虚拟机指令的集合。所述方法的大小,是指该方法中包含的所有虚拟机指令的长度总和。例如:假设方法m仅由add(长度为1个字节)、invoke(长度为3个字节)和sub(长度为1个字节)三条虚拟机指令构成,则方法m的大小为1+3+1=5(字节)。本发明实施例提供的动态编译方法的执行主体为动态编译装置,所述动态编译装置可以是编译器、虚拟机、或处理器。在本发明实施例中,在当前编译队列中存在待编译的热点方法时,获取当前编译队列中各热点方法的大小,并动态计算出各热点方法的运行速度;根据各热点方法的运行速度和大小,计算出各热点方法的优先级,并记录当前编译队列中优先级最高的热点方法;调度当前编译队列中优先级最高的热点方法进行编译。
本发明实施例提供的动态编译方法,以各热点方法的运行速度和大小为参数确定的各热点方法的优先级,综合反映了各热点方法的重要程度和所需编译时间这两个关键因素:一方面,较小的热点方法所需的编译时间也较短,优先编译较小的热点方法可以最大限度地提升编译的吞吐量;另一方面,优先编译运行速度较快的热点方法,可以充分适应程序运行时的动态行为,能够有效加快虚拟机的响应速度。
在本发明一实施例中,在上述实施例的基础上,在调度所述当前编译队列中优先级最高的热点方法进行编译之后,将所述优先级最高的热点方法的编译状态置为已编译。或者,在调度所述当前编译队列中优先级最高的热点方法进行编译之后,将所述优先级最高的热点方法从所述当前编译队列中删除,以此提高编译效率。
进一步的,由于程序运行的动态性,方法的活跃性也是不断发生变化的。例如,对于某个热点方法m,在其被加入当前编译队列前,可能处于非常活跃的状态,但在其被加入到当前编译队列之后,可能不再被执行,这种情况下对热点方法m的编译不仅不能带来任何性能上的提升,反而增加了运行时的编译开销。为了克服该缺陷,在上述实施例的基础上,本发明实施例中编译器获取当前编译队列中各热点方法的运行速度和大小之后,还确定了各热点方法的活跃性度量值,所述活跃性度量值用于体现所述各热点方法的活跃性;将活跃性度量值小于或等于预设的活跃性阈值的热点方法从当前编译队列中删除;其中,所述活跃性阈值大于或等于0。可选的,热点方法的活跃性度量值可以为热点方法的运行速度,或者,也可以为热点方法的执行次数。以活跃性度量值为运行速度为例,对于当前编译队列中任一待编译的热点方法m,若speed(m)小于或等于预设的活跃性阈值,则判定该热点方法m不再活跃,并将其从当前编译队列中删除。
本发明实施例提供的动态编译方法,以各待编译的热点方法的运行速度和大小为参数确定的各热点方法的优先级,综合反映了各待编译的热点方法的重要程度和所需编译时间这两个关键因素,并优先调度优先级较高的热点方法进行编译,可以大幅度提升编译的吞吐量,有效提高虚拟机的响应速度;通过在运行时对方法的活跃性进行监视,及时删除当前编译队列中不再活跃的方法,以减少对不再活跃的方法的编译,可以有效降低虚拟机运行时的编译开销。
在本发明一实施例中,根据各热点方法的运行速度和大小,确定各热点方法的优先级的具体步骤可以为:
对于当前编译队列中的任一待编译的热点方法m,编译器根据热点方法m的运行速度speed(m)和大小size(m),采用以下公式得到热点方法m的优先级p(m):
p(m)=f(size(m),speed(m));
其中,所述f表示关于所述size(m)和speed(m)的二元函数,并且满足:
(1)所述f在size(m)≥0和speed(m)≥0时有定义;
(2)对任意size(m)≥0和speed(m)≥0,所述f的值为非负;
(3)当size(m)≥0时,所述f随所述size(m)单调递减;
(4)当speed(m)≥0时,所述f随所述speed(m)单调递增。
在上述实施例的基础上,满足条件的f可以有很多个,可选的,f为以下公式:
值得说明的是,f中分母并不限于上述的size(m)+1,例如可以把分母size(m)+1换成size(m)+2;此外,size(m)在程序运行时可以直接获取,例如,可以通过读取其内部关于方法m大小的属性值直接获取的。speed(m)则需要动态计算。
在本发明实施例中,采用以下公式得到热点方法m的运行速度speed(m):
其中,所述Δt为当前时刻前的长度为预设时间常量的时间段,例如所述Δt可以为3ms、4ms、5ms等。
Δexecute(m)表示在过去的Δt时间段内所述热点方法m的执行次数。
采用本发明实施例提供的动态编译方法,以各待编译的热点方法的运行速度和大小为参数确定的各热点方法的优先级,综合反映了各待编译的热点方法的重要程度和所需编译时间这两个关键因素,并优先调度优先级较高的热点方法进行编译,可以大幅度提升编译的吞吐量,有效提高虚拟机的响应速度。
图2为本发明实施例提供的动态编译方法的工作示意图。图3为本发明实施例提供的虚拟机动态编译流程图。如图2、图3所示,基于本发明实施例提供的动态编译方法,应用于虚拟机,虚拟机包括解释器和编译器,在启动虚拟机的过程中,首先完成对解释器、编译器和其它部分的初始化;解释器初始化完毕后开始执行程序中的方法;编译器初始化完毕后进入等待编译的状态;解释器在执行方法的同时,通过检测识别方法是否属于热点方法;若该方法不是热点方法,则继续解释执行;若该方法是热点方法,则将其加入当前编译队列中,同时唤醒编译器,触发编译;
被唤醒的编译器按下列步骤工作,直到当前编译队列为空:
1)遍历整个当前编译队列:获取当前编译队列中各待编译的热点方法的大小,并动态计算出各待编译的热点方法的运行速度,从队列中将运行速度小于或等于活跃性阈值的方法删除;根据各热点方法的运行速度和大小,计算出各热点方法的优先级,并记录当前编译队列中优先级最高的热点方法;
2)调度当前编译队列中优先级最高的热点方法进行编译,并将该优先级最高的热点方法从当前编译队列中删除;
3)判断当前编译队列是否为空:若当前编译队列不为空,则重复执行上述步骤1)和2),直到判定当前编译队列为空;在当前编译队列为空时,进入等待编译的状态。
采用本发明实施例提供的动态编译方法,以各待编译的热点方法的运行速度和大小为参数确定的各热点方法的优先级,综合反映了各待编译的热点方法的重要程度和所需编译时间这两个关键因素,并优先调度优先级较高的热点方法进行编译,可以大幅度提升编译的吞吐量,有效提高虚拟机的响应速度。
图4为本发明实施例提供的动态编译装置的结构示意图。如图4所示,本发明实施例提供的动态编译装置400,包括:
参数获取模块401,用于在当前编译队列中存在待编译的热点方法时,获取所述当前编译队列中各待编译的热点方法的运行速度和大小;
优先级确定模块402,用于根据所述参数获取模块401获取的所述各待编译的热点方法的运行速度和大小,确定所述各待编译的热点方法的优先级;
编译调度模块403,用于调度所述当前编译队列中优先级最高的热点方法进行编译。
本发明实施例提供的动态编译装置,以各热点方法的运行速度和大小为参数确定的各热点方法的优先级,综合反映了各热点方法的重要程度和所需编译时间这两个关键因素,并优先调度优先级较高的热点方法进行编译,可以大幅度提升编译的吞吐量,有效提高虚拟机的响应速度。
图5为本发明实施例提供的动态编译装置的另一结构示意图。图5以图4为基础,如图5所示,本发明实施例提供的动态编译装置500,也包括:参数获取模块401、优先级确定模块402、编译调度模块403。进一步,所述动态编译装置500还包括:
编译队列管理模块501,用于在所述编译调度模块403调度所述当前编译队列中优先级最高的热点方法进行编译之后,将所述优先级最高的热点方法的编译状态置为已编译。
或者,编译队列管理模块501,用于在所述编译调度模块403调度所述当前编译队列中优先级最高的热点方法进行编译之后,将所述优先级最高的热点方法从所述当前编译队列中删除。
本发明实施例提供的动态编译装置,通过在运行时对方法的活跃性进行监视,及时删除当前编译队列中不再活跃的方法,以减少对不再活跃的方法的编译,可以有效降低虚拟机运行时的编译开销。
图6为本发明实施例提供的动态编译装置的又一结构示意图。图6以图4为基础,如图6所示,本发明实施例提供的动态编译装置600,也包括:参数获取模块401、优先级确定模块402、编译调度模块403。进一步,所述动态编译装置600还包括:
活跃性度量值确定模块601,用于所述参数获取模块401获取当前编译队列中各热点方法的运行速度和大小之后,确定所述各热点方法的活跃性度量值,所述活跃性度量值用于体现所述各热点方法的活跃性;
编译队列更新模块602,用于将活跃性度量值小于或等于活跃性阈值的热点方法从所述当前编译队列中删除;其中,所述活跃性阈值大于或等于0。
可选的,所述活跃性度量值为热点方法的运行速度;或者,所述活跃性度量值为热点方法的执行次数。
在上述实施例的基础上,所述优先级确定模块402,具体用于:
对于所述当前编译队列中的任一待编译的热点方法m,根据所述热点方法m的运行速度speed(m)和大小size(m),采用以下公式得到所述热点方法m的优先级p(m):
p(m)=f(size(m),speed(m));
其中,所述f表示关于所述size(m)和speed(m)的二元函数,并且满足:
(1)所述f在size(m)≥0和speed(m)≥0时有定义;
(2)对任意size(m)≥0和speed(m)≥0,所述f的值为非负;
(3)当size(m)≥0时,所述f随所述size(m)单调递减;
(4)当speed(m)≥0时,所述f随所述speed(m)单调递增。
可选的,所述f为以下公式:
可选的,所述参数获取模块401,所述参数获取模块,具体用于采用以下公式得到所述热点方法m的运行速度speed(m):
其中,所述Δt为当前时刻前的长度为预设时间常量的时间段,Δexecute(m)表示在过去的Δt时间段内所述热点方法m的执行次数。
采用本发明实施例提供的动态编译装置,以各待编译的热点方法的运行速度和大小为参数确定的各热点方法的优先级,综合反映了各待编译的热点方法的重要程度和所需编译时间这两个关键因素,并优先调度优先级较高的热点方法进行编译,可以大幅度提升编译的吞吐量,有效提高虚拟机的响应速度。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (16)
1.一种动态编译方法,其特征在于,包括:
在当前编译队列中存在待编译的热点方法时,获取所述当前编译队列中各待编译的热点方法的运行速度和大小;
根据所述各待编译的热点方法的运行速度和大小,确定所述各待编译的热点方法的优先级;
调度所述当前编译队列中优先级最高的热点方法进行编译。
2.根据权利要求1所述的方法,其特征在于,所述调度所述当前编译队列中优先级最高的热点方法进行编译之后,还包括:
将所述优先级最高的热点方法的编译状态置为已编译。
3.根据权利要求1所述的方法,其特征在于,所述调度所述当前编译队列中优先级最高的热点方法进行编译之后,还包括:
将所述优先级最高的热点方法从所述当前编译队列中删除。
4.根据权利要求1所述的方法,其特征在于,所述获取当前编译队列中各热点方法的运行速度和大小之后,还包括:
确定所述各热点方法的活跃性度量值,所述活跃性度量值用于体现所述各热点方法的活跃性;
将活跃性度量值小于或等于活跃性阈值的热点方法从所述当前编译队列中删除;其中,所述活跃性阈值大于或等于0。
5.根据权利要求4所述的方法,其特征在于,
所述活跃性度量值为热点方法的运行速度;或者,
所述活跃性度量值为热点方法的执行次数。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述根据所述各待编译的热点方法的运行速度和大小,确定所述各待编译的热点方法的优先级,包括:
对于所述当前编译队列中的任一待编译的热点方法m,根据所述热点方法m的运行速度speed(m)和大小size(m),采用以下公式得到所述热点方法m的优先级p(m):
p(m)=f(size(m),speed(m));
其中,所述f表示关于所述size(m)和speed(m)的二元函数,并且满足:
(1)所述f在size(m)≥0和speed(m)≥0时有定义;
(2)对任意size(m)≥0和speed(m)≥0,所述f的值为非负;
(3)当size(m)≥0时,所述f随所述size(m)单调递减;
(4)当speed(m)≥0时,所述f随所述speed(m)单调递增。
7.根据权利要求6所述的方法,其特征在于,所述f为以下公式:
8.根据权利要求6所述的方法,其特征在于,所述获取所述当前编译队列中各待编译的热点方法的运行速度,包括:
采用以下公式得到所述热点方法m的运行速度speed(m):
其中,所述Δt为当前时刻前的长度为预设时间常量的时间段,Δexecute(m)表示在过去的Δt时间段内所述热点方法m的执行次数。
9.一种动态编译装置,其特征在于,包括:
参数获取模块,用于在当前编译队列中存在待编译的热点方法时,获取所述当前编译队列中各待编译的热点方法的运行速度和大小;
优先级确定模块,用于根据所述参数获取模块获取的所述各待编译的热点方法的运行速度和大小,确定所述各待编译的热点方法的优先级;
编译调度模块,用于调度所述当前编译队列中优先级最高的热点方法进行编译。
10.根据权利要求9所述的装置,其特征在于,还包括:
编译队列管理模块,用于在所述编译调度模块调度所述当前编译队列中优先级最高的热点方法进行编译之后,将所述优先级最高的热点方法的编译状态置为已编译。
11.根据权利要求9所述的装置,其特征在于,还包括:
编译队列管理模块,用于在所述编译调度模块调度所述当前编译队列中优先级最高的热点方法进行编译之后,将所述优先级最高的热点方法从所述当前编译队列中删除。
12.根据权利要求9所述的装置,其特征在于,还包括:
活跃性度量值确定模块,用于所述参数获取模块获取当前编译队列中各热点方法的运行速度和大小之后,确定所述各热点方法的活跃性度量值,所述活跃性度量值用于体现所述各热点方法的活跃性;
当前编译队列更新模块,用于将活跃性度量值小于或等于活跃性阈值的热点方法从所述当前编译队列中删除;其中,所述活跃性阈值大于或等于0。
13.根据权利要求12所述的装置,其特征在于,
所述活跃性度量值为热点方法的运行速度;或者,
所述活跃性度量值为热点方法的执行次数。
14.根据权利要求9-13任一项所述的装置,其特征在于,所述优先级确定模块,具体用于:
对于所述当前编译队列中的任一待编译的热点方法m,根据所述热点方法m的运行速度speed(m)和大小size(m),采用以下公式得到所述热点方法m的优先级p(m):
p(m)=f(size(m),speed(m));
其中,所述f表示关于所述size(m)和speed(m)的二元函数,并且满足:
(1)所述f在size(m)≥0和speed(m)≥0时有定义;
(2)对任意size(m)≥0和speed(m)≥0,所述f的值为非负;
(3)当size(m)≥0时,所述f随所述size(m)单调递减;
(4)当speed(m)≥0时,所述f随所述speed(m)单调递增。
15.根据权利要求14所述的装置,其特征在于,所述f为以下公式:
16.根据权利要求14所述的装置,其特征在于,所述参数获取模块,具体用于采用以下公式得到所述热点方法m的运行速度speed(m):
其中,所述Δt为当前时刻前的长度为预设时间常量的时间段,Δexecute(m)表示在过去的Δt时间段内所述热点方法m的执行次数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410727430.3A CN105718298B (zh) | 2014-12-03 | 2014-12-03 | 动态编译方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410727430.3A CN105718298B (zh) | 2014-12-03 | 2014-12-03 | 动态编译方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105718298A true CN105718298A (zh) | 2016-06-29 |
CN105718298B CN105718298B (zh) | 2019-02-15 |
Family
ID=56143047
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410727430.3A Active CN105718298B (zh) | 2014-12-03 | 2014-12-03 | 动态编译方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105718298B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1234552A (zh) * | 1997-10-06 | 1999-11-10 | 太阳微系统有限公司 | 暂停期间进行字节代码优化的方法和装置 |
US20030163799A1 (en) * | 2002-02-22 | 2003-08-28 | Vasilik Kenneth Eric | Iterative software development environment with prioritized build rules |
CN101551748A (zh) * | 2009-01-21 | 2009-10-07 | 北京海尔集成电路设计有限公司 | 一种优化的编译方法 |
-
2014
- 2014-12-03 CN CN201410727430.3A patent/CN105718298B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1234552A (zh) * | 1997-10-06 | 1999-11-10 | 太阳微系统有限公司 | 暂停期间进行字节代码优化的方法和装置 |
US20030163799A1 (en) * | 2002-02-22 | 2003-08-28 | Vasilik Kenneth Eric | Iterative software development environment with prioritized build rules |
CN101551748A (zh) * | 2009-01-21 | 2009-10-07 | 北京海尔集成电路设计有限公司 | 一种优化的编译方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105718298B (zh) | 2019-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9104433B2 (en) | Trace generation method, trace generation device, trace generation program product, and multi-level compilation using trace generation method | |
US10871976B2 (en) | Method and apparatus for identifying hotspot intermediate code in language virtual machine | |
US9389986B2 (en) | Identifying impacted tests from statically collected data | |
CN107111498B (zh) | 利用图形虚拟化从/向主机计算机进行虚拟机的实时迁移 | |
CN110874212B (zh) | 一种硬件加速方法、编译器以及设备 | |
US9128747B2 (en) | Methods and systems for optimizing the performance of software applications at runtime | |
US10417011B2 (en) | Thread-agile execution of dynamic programming language programs | |
US20170139693A1 (en) | Code execution method and device | |
KR20120083803A (ko) | 가상머신을 위한 추가코드 생성장치 및 방법 | |
CN103440457A (zh) | 基于进程模拟的二进制程序分析系统 | |
Yadav et al. | Performance analysis for Android runtime environment | |
CN107526622A (zh) | Linux的快速异常处理方法及装置 | |
WO2018040271A1 (zh) | 线程处理器及线程处理方法 | |
WO2017206302A1 (zh) | 一种应用程序的运行方法和运行装置 | |
CN105718298A (zh) | 动态编译方法及装置 | |
Dooley et al. | Detecting and using critical paths at runtime in message driven parallel programs | |
WO2017128589A1 (zh) | 可运行文件生成方法、art虚拟机运行方法和装置 | |
JP2009009253A (ja) | プログラム実行方法、プログラム、およびプログラム実行システム | |
KR101083271B1 (ko) | 액티브엑스 컨트롤 변환 시스템 및 방법 | |
CN103942051A (zh) | 基于paas平台的应用部署方法和装置 | |
CN116775202A (zh) | 模糊测试方法、装置、介质、电子设备及计算机程序产品 | |
CN110362314B (zh) | 信息处理方法及装置、计算机可读介质、电子设备 | |
EP4196874A1 (en) | Representing asynchronous state machine in intermediate code | |
CN106325964A (zh) | 动态编译调度方法及装置 | |
CN105786586A (zh) | 热点方法识别方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |