首页 / 专利库 / 软件 / 控制流图 / 动态编译方法和装置、可读存储介质及电子设备

动态编译方法和装置、可读存储介质及电子设备

阅读:29发布:2020-05-11

专利汇可以提供动态编译方法和装置、可读存储介质及电子设备专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种动态编译方法和装置、可读存储介质及 电子 设备,其中所述动态编译方法获取热点方法对应的剖面分析数据;对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据;依据所述目标剖面分析数据将所述热点方法编译为本地代码。本发明提供的动态编译方法,能够提升剖面分析数据的准确性,通过纠正后的目标剖面分析数据编译所对应的热点方法,能够提升系统的性能。,下面是动态编译方法和装置、可读存储介质及电子设备专利的具体信息内容。

1.一种动态编译方法,其特征在于,所述方法包括:
获取热点方法对应的剖面分析数据;其中,所述热点方法为一组连续的虚拟机指令序列;
对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据;
依据所述目标剖面分析数据将所述热点方法编译为本地代码。
2.根据权利要求1所述的方法,其特征在于,所述热点方法包含至少一个调用点;所述剖面分析数据中包含每个调用点及其对应的调用次数;
对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据的步骤,包括:
获取所述剖面分析数据中调用点对应的调用次数为零的数据;
从所述调用次数为零的数据中确定污点数据,并对所述污点数据进行纠正,生成目标剖面分析数据。
3.根据权利要求2所述的方法,其特征在于,对所述污点数据进行纠正,生成目标剖面分析数据的步骤,包括:
基于预先构造的所述热点方法对应的程序控制流图,确定所述热点方法调用的第一节点集合;其中,所述热点方法包含的每个调用点在所述程序控制流图中均有对应的节点;
按照第一预设规则循环遍历所述第一节点集合中的每个第一节点,确定调用次数为污点数据的第一节点,并对确定的所述第一节点对应的调用次数进行纠正,直至所述确定的第一节点对应的调用次数均不再变化为止;
将纠正后的每个第一节点对应的调用次数确定为目标剖面分析数据。
4.根据权利要求3所述的方法,其特征在于,按照第一预设规则循环遍历所述第一节点集合中的每个第一节点,确定调用次数为污点数据的第一节点,并对确定的所述第一节点对应的调用次数进行纠正的步骤,包括:
根据所述预先构造的热点方法对应的程序控制流图,分别确定所述每个第一节点被调用时必经的第二节点集合;其中,所述第二节点集合中的每一个节点均属于第一节点集合;
当判定所述剖面分析数据中存在任意一第一节点对应的调用次数为零时,若所述任意一节点满足预设条件,则将所述任意一节点作为所述确定的第一节点,并保持所述确定的第一节点对应的调用次数不变;
当判定所述剖面分析数据中存在任意一第一节点对应的调用次数不为零时,按照第二预设规则遍历所述任意一第一节点被调用时必经的第二节点集合中的每个第二节点,分别对所述每个第二节点对应的调用次数进行纠正;
根据纠正后的所有第二节点对应的调用次数,对所述确定的第一节点对应的调用次数进行纠正。
5.根据权利要求4所述的方法,其特征在于,按照第二预设规则遍历所述任意一第一节点被调用时必经的第二节点集合中的每个第二节点,分别对所述每个第二节点对应的调用次数进行纠正的步骤,包括:
针对所述第二节点集合中的每个第二节点,均执行如下操作:
判断所述剖面分析数据中所述第二节点对应的调用次数是否为零;
若是,则将所述第二节点对应的调用次数纠正为预设值;其中,所述预设值为非零值;
若否,则保持所述第二节点对应的调用次数不变。
6.一种动态编译装置,其特征在于,所述装置包括:
获取模,用于获取热点方法对应的剖面分析数据;其中,所述热点方法为一组连续的虚拟机指令序列;
纠正模块,用于对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据;
编译模块,用于依据所述目标剖面分析数据将所述热点方法编译为本地代码。
7.根据权利要求6所述的装置,其特征在于,所述纠正模块包括:
获取子模块,用于获取所述剖面分析数据中调用点对应的调用次数为零的数据,其中,所述热点方法包含至少一个调用点;所述剖面分析数据中包含每个调用点及其对应的调用次数;
纠正子模块,用于从所述调用次数为零的数据中确定污点数据,并对所述污点数据进行纠正,生成目标剖面分析数据。
8.根据权利要求7所述的装置,其特征在于,所述纠正子模块包括:
第一确定单元,用于基于预先构造的所述热点方法对应的程序控制流图,确定所述热点方法调用的第一节点集合;其中,所述热点方法包含的每个调用点在所述程序控制流图中均有对应的节点;
遍历单元,用于按照第一预设规则循环遍历所述第一节点集合中的每个第一节点,确定调用次数为污点数据的第一节点,并对确定的所述第一节点对应的调用次数进行纠正,直至所述确定的第一节点对应的调用次数均不再变化为止;
第二确定单元,用于将纠正后的每个第一节点对应的调用次数确定为目标剖面分析数据。
9.根据权利要求8所述的装置,其特征在于,所述遍历单元具体用于:
根据所述预先构造的热点方法对应的程序控制流图,分别确定所述每个第一节点被调用时必经的第二节点集合;其中,所述第二节点集合中的每一个节点均属于第一节点集合;
当判定所述剖面分析数据中存在任意一第一节点对应的调用次数为零时,若所述任意一节点满足预设条件,则将所述任意一节点作为所述确定的第一节点,并保持所述确定的第一节点对应的调用次数不变;
当判定所述剖面分析数据中存在任意一第一节点对应的调用次数不为零时,按照第二预设规则遍历所述任意一第一节点被调用时必经的第二节点集合中的每个第二节点,分别对所述每个第二节点对应的调用次数进行纠正;
根据纠正后的所有第二节点对应的调用次数,对所述确定的第一节点对应的调用次数进行纠正。
10.根据权利要求9所述的装置,其特征在于,所述遍历单元按照第二预设规则遍历所述任意一第一节点被调用时必经的第二节点集合中的每个第二节点,对所述确定的第二节点对应的调用次数进行纠正时,具体用于:
针对所述第二节点集合中的每个第二节点,均执行如下操作:
判断所述剖面分析数据中所述第二节点对应的调用次数是否为零;
若是,则将所述第二节点对应的调用次数纠正为预设值;其中,所述预设值为非零值;
若否,则保持所述第二节点对应的调用次数不变。
11.一种电子设备,其特征在于,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行如权利要求1-5中一个或多个所述的动态编译方法。
12.一种可读存储介质,其特征在于,当所述可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1-5中一个或多个所述的动态编译方法。

说明书全文

动态编译方法和装置、可读存储介质及电子设备

技术领域

[0001] 本发明涉及虚拟机技术领域,特别是涉及一种动态编译方法和装置、可读存储介质及电子设备。

背景技术

[0002] 虚拟机包括解释器和动态编译器;虚拟机最初由解释器解释执行,随着技术的改进,当虚拟机侦测到某个方法被频繁调用时,该方法被称为热点方法,虚拟机中的编译线程会按照一定的编译调度策略使用即时编译器将热点方法编译为与本地平台相关的机器码(简称本地代码)。此后当执行该热点方法的时候,可以直接调用上述本地代码,能够大幅提升程序的执行效率。
[0003] 在虚拟机的解释器解释执行期间,通常会对程序进行剖面分析,以期通过收集大量的运行信息来指导后续动态编译的优化过程,收集的运行信息为剖面分析数据;在具体实现过程中,通过剖面分析系统来收集剖面分析数据,由剖面分析系统对热点方法进行编译。该系统对于程序中任意一个方法m的执行次数进行计数,当其执行次数超过某个阈值时,启动对方法m的剖面分析功能,以获得剖面分析数据。
[0004] 剖面分析的有条件启动会导致方法在编译时,部分代码片段尚未来得及执行剖面分析的计数,使得收集到的剖面分析数据中包含与实际不符的污点数据,导致剖面分析数据准确性差;例如:在剖面分析数据中记录某调用点的调用次数为零,而实际上该调用点的调用次数并非零。剖面分析数据中的污点数据会造成内联等基于剖面分析数据的优化算法出现误判,最终导致系统的性能大幅降低。

发明内容

[0005] 本发明提供了一种动态编译方法和装置、可读存储介质及电子设备,以解决现有技术中存在的热点方法剖面分析数据准确性差的问题。
[0006] 为了解决上述问题,本发明公开了一种动态编译方法,其中,所述方法包括:获取热点方法对应的剖面分析数据;其中,所述热点方法为一组连续的虚拟机指令序列;对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据;依据所述目标剖面分析数据将所述热点方法编译为本地代码。
[0007] 为了解决上述问题,本发明还公开了一种动态编译装置,其中,所述装置包括:获取模,用于获取热点方法对应的剖面分析数据;其中,所述热点方法为一组连续的虚拟机指令序列;纠正模块,用于对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据;编译模块,用于依据所述目标剖面分析数据将所述热点方法编译为本地代码。
[0008] 为了解决上述问题,本发明又公开了一种电子设备,其中所述电子设备包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行本发明中的一种或多种动态编译方法。
[0009] 为了解决上述问题,本发明再次公开了一种可读存储介质,其中,当所述可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行本发明中的一种或多种动态编译方法。
[0010] 与现有技术相比,本发明包括以下优点:
[0011] 本发明实施例提供的动态编译方法和装置、可读存储介质及电子设备,在动态编译的过程中,对剖面分析数据中的与实际不符的污点数据进行纠正,能够提升剖面分析数据的准确性。通过纠正后的目标剖面分析数据编译所对应的热点方法,能够提升系统的性能。附图说明
[0012] 图1是根据本发明实施例一的一种动态编译方法的步骤流程图
[0013] 图2是根据本发明实施例二的一种动态编译方法的步骤流程图;
[0014] 图3是按照第一预设规则循环遍历第一节点集合中各第一节点的步骤流程图;
[0015] 图4是根据本发明实施例三的一种动态编译装置的结构框图
[0016] 图5是根据本发明实施例四的一种动态编译装置的结构框图;
[0017] 图6是根据本发明实施例五的一种电子设备的结构框图。

具体实施方式

[0018] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0019] 虚拟机主要通过软件的方法来虚拟出一台计算机,并且这台虚拟的计算机通常还支持一套独有的指令集,称为虚拟机指令集。虚拟机依托于本地的物理机,通过虚拟机的执行引擎对给定的虚拟机指令序列在本地机器上模拟执行。虚拟机的执行引擎可以由解释器来实现,由于解释器具有可移植性高、实现代价低和内存占用少等特点,大多数虚拟机的执行引擎都包含解释器。解释器以一条虚拟机指令为单位进行取指令、指令分派、取操作数和执行。但单纯的解释执行性能低下,因此虚拟机中引入动态编译系统来提高其性能。编译器是动态编译系统的核心,编译器是以一组连续的虚拟机指令序列(基本块、函数或方法)为单位,并将该单位整体编译成本地CPU(Central Processing Unit,中央处理器)指令序列,称为本地代码,然后由硬件直接执行编译后的本地代码。编译器由于消除了重复的取指令和指令分派等过程,同时又在翻译时进行大量卓有成效的优化,因此其性能往往是解释器的10倍以上。由于编译器是在程序运行过程中进行动态编译的,故又将其称为即时编译器。
[0020] 动态编译是决定虚拟机性能的关键,和传统C/C++等静态编译不同,动态编译行为发生在程序运行期间,会引入额外的编译开销。研究表明,程序运行的时间分布具有明显的局部性特征,即程序执行的大部分时间集中在小部分代码上。为了尽可能降低由动态编译产生的额外开销,现代虚拟机的动态编译系统通常依据“选择性编译”理论进行设计和实现。其核心思想是:仅编译程序中频繁执行的部分(称为程序热点或热点方法)。程序中所有的方法均由解释器开始执行。在解释器解释执行期间,虚拟机为每个方法分别维护一个方法调用计数器和内部循环计数器,两个计时器之和为该方法的累计调用次数。当上述两个计数器之和等于热点识别阈值(第二预设次数)时,对应的方法便被识别为热点方法,被加入到编译队列中等待编译。随后,虚拟机中的编译线程会按照一定的编译调度策略从编译队列中选择热点方法进行编译。当方法编译完成后,此后对该方法的调用均直接执行编译后生成的本地代码,从而大幅提升程序的执行效率。
[0021] 为了提升动态编译生成本地代码的质量,虚拟机在解释执行期间,通常会对程序以方法为单位进行剖面分析,通过计数收集大量的运行时信息,用于指导后续动态编译的优化过程。剖面分析所收集的运行时信息包括:方法调用信息、分支跳转信息和对象类型分布等数据。剖面分析结果反映了程序的运行特征,基于剖面分析数据的动态编译使得编译生成的本地代码更加适应程序实际的行为特征,从而获得更好的性能优化效果。因此,设计先进的剖面分析系统对于提升系统的性能非常重要。
[0022] 现代高性能虚拟机系统中,通常使用方法调用的剖面分析数据,即被剖面分析的方法中各个方法调用点的统计信息,来决定是否进行内联优化。内联优化是最重要的编译优化手段,对系统性能起决定性影响。不符合实际执行行为的方法调用剖面分析数据会误导虚拟机进行错误的内联优化决策,从而导致系统性能下降。故尽可能提供准确的关于方法调用的剖面分析数据是剖面分析系统设计的关键。
[0023] 本发明中提供了动态编译方案,该方案可得到准确度高的剖面分析数据进行热点方法编译,从而提升系统性能。本发明中提供的动态编译方案具体如下述实施例中所述。
[0024] 实施例一
[0025] 参照图1,示出了本发明实施例一种动态编译方法的步骤流程图。
[0026] 本发明实施例提供的动态编译方法,其执行主体可以是CPU,包括以下步骤:
[0027] 步骤101:获取热点方法对应的剖面分析数据。
[0028] 其中,热点方法为一组连续的虚拟机指令序列。本发明实施例中,在虚拟机程序中包含多个方法,针对同一个方法,当其对应的累计调用次数大于或等于第二预设次数时,确定该方法为热点方法。方法中通常包含多个调用点,调用点表示方法调用的虚拟指令,各个调用点被调用的次数是剖面分析数据中非常关键的信息。
[0029] 步骤102:对剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据。
[0030] 其中,剖面分析数据中包含热点方法包含的各调用点和各调用点对应的调用次数。在具体实现过程中,对剖面分析数据中的污点数据进行纠正时,可获取剖面分析数据中调用点对应的调用次数为零的数据,根据调用次数为零的数据获取污点数据,以对获取的污点数据进行纠正,生成目标剖面分析数据。
[0031] 下面以示例的形式阐述启动获取剖面分析数据的过程以及热点方法的确定过程。例如:integrate方法的运行逻辑如下:
[0032]
[0033] 针对integrate方法的剖面分析数据中记录有该方法历史执行过程中调用的各调用点1、2和3的累计调用次数统计数据。假定热点识别阈值即第二预设次数为10000,剖面分析启动阈值即第一预设次数为3300。integrate方法执行期间,当for循环中该方法的累计调用次数为3300时,由于累计调用次数是内部循环计数器记录的循环次数和方法调用计数器记录的调用次数之和,因此该integrate方法的累计调用次数之和大于或等于第一预设次数,虚拟机启动对integrate方法的剖面分析。此时,程序依然在integrate方法的for循环中执行,故剖面分析系统只能对调用点2和3进行计数。当for循环中count=10000时,integrate方法被识别为程序热点,虚拟机随即启动对integrate方法的编译。即时编译器编译integrate方法时,该integrate方法可能依然在for循环中执行。由于剖面分析启动后,调用点1尚未来得及执行,故即时编译器获得的剖面分析数据中关于调用点1的累计调用次数计数值为零。而实际的情况是,integrate方法一旦运行,调用点1必然会执行,剖面分析数据中将其累计调用次数计数为零是不符合实际的。此时,调用点1的剖面分析数据为一个污点数据。
[0034] 步骤103:依据目标剖面分析数据将热点方法编译为本地代码。
[0035] 本发明实施例中,动态编译器依据目标剖面分析数据编译热点方法,将热点方法编译为本地代码,对于具体编译方式参照相关现有技术即可,本发明实施例中对此不做具体限制。
[0036] 本发明实施例中,污点数据为调用次数为零的数据,可以根据调用次数为零的数据确定污点数据,并对污点数据一一进行纠正;以所有调用次数为零的调用点对应的剖面分析数据为依据,对污点数据进行纠正,提高了最终获得的剖面分析数据的准确性,确保了动态编译系统的性能。
[0037] 本发明实施例提供的动态编译方法,在动态编译的过程中,对剖面分析数据中与实际不符的污点数据进行纠正,能够提升剖面分析数据的准确性。通过纠正后的目标剖面分析数据编译所对应的热点方法,能够提升系统的性能。
[0038] 实施例二
[0039] 参照图2,示出了本发明实施例二的一种动态编译方法。
[0040] 本发明实施例的动态编译方法具体包括以下步骤:
[0041] 步骤201:针对任意一方法,按照预设规则记录该任意一方法对应的剖面分析数据,在该任意一方法的累计调用次数大于或等于第二预设次数时,将其确定为热点方法。
[0042] 虚拟机程序中包含多个方法,在虚拟机程序运行过程中方法可根据运行需求被调用,当任意一方法被调用时,剖面分析系统判断该任意一方法对应的累计调用次数是否大于或等于第一预设次数且小于第二预设次数;若累计调用次数大于或等于第一预设次数且小于第二预设次数,则执行该任意一方法并开始生成方法对应的剖面分析数据;若累计调用次数小于第一预设次数,则仅执行方法;当该任意一方法对应的累计调用次数大于或等于第二预设次数时,将上述任意一方法设置为热点方法。其中,该任意一方法被调用一次则对应的累计调用次数加一;对该任意一方法对应的累计调用次数进行实时监控,直至满足上述剖面分析数据生成启动条件或者热点方法判定条件。
[0043] 当上述任意一方法对应的累计调用次数大于或等于第一预设次数时,确定该任意一方法满足剖面分析启动条件,因此执行该任意一方法的同时生成该任意一方法对应的剖面分析数据。当该任意一方法对应的累计调用次数大于或等于第二预设次数时,确定该方法为热点方法,基于历史所生成的该方法对应的剖面分析数据,将该方法编译为本地代码。
[0044] 步骤202:获取热点方法对应的剖面分析数据。
[0045] 其中,热点方法为一组连续的虚拟机指令序列。剖面分析数据中包含热点方法包含的各调用点和各调用点对应的调用次数。构建热点方法对应的CFG(ontrol flow graph,程序控制流图),上述热点方法中的每个调用点在CFG中对应一个节点,且该CFG中包含各节点间的关联关系,CFG中包含的节点记为CFG(m)。在对剖面分析数据进行纠正时,将调用点与调用次数的对应关系,转换为节点与调用次数的对应关系。
[0046] 步骤203:获取剖面分析数据中调用点对应的调用次数为零的数据。
[0047] 本发明实施例中,获取到剖面分析数据后,为提升剖面分析数据的准确性,需要对剖面分析数据进行纠正,纠正时主要获取剖面分析数据中调用点对应的调用次数为零的数据;对调用次数为零的数据进行筛选,从中确定污点数据,对污点数据进行纠正,生成目标剖面分析数据,具体纠正方式如步骤204至步骤205中所示。
[0048] 步骤204:基于预先构造的热点方法对应的控制流图,确定热点方法调用的第一节点集合。
[0049] 其中,热点方法包含的每个调用点在程序控制流图中均有对应的一个节点。
[0050] 热点方法调用的第一节点集合可以用calls(m)表示,该第一节点集合中包含了至少一个第一节点。
[0051] 步骤205:按照第一预设规则循环遍历第一节点集合中的每个第一节点,确定调用次数为污点数据的第一节点,对确定的第一节点对应的调用次数进行纠正,直至上述确定的第一节点对应的调用次数均不再变化为止。
[0052] 可选的,上述确定的第一节点对应的调用次数均不再发生变化是指,可以在经历相邻多次的遍历后,确定的第一节点对应的调用次数均相同;其中,该相邻多次可以为预设的次数。
[0053] 按照第一预设规则循环遍历第一节点集合中的每个第一节点,对每个第一节点对应的调用次数进行纠正的流程如附图3所示,具体可以包括如下子步骤:
[0054] 子步骤2051:根据预先构造的热点方法对应的程序控制流图,分别确定每个第一节点被调用时必经的第二节点集合;
[0055] 其中,第二节点集合中的每一个节点均属于第一节点集合。
[0056] 对任意一个第一节点v∈calls(m),求解v在CFG(m)中的必经节点集合,将求解得到的必经节点集合记为dom(v)。
[0057] 子步骤2052:当判定剖面分析数据中存在任意一第一节点对应的调用次数为零时,保持该任意一第一节点对应的调用次数不变;
[0058] 本发明实施例中,若上述任意一第一节点满足预设条件,则将该任意一第一节点作为上述确定的第一节点,即调用次数为污点数据的第一节点;其中,该预设条件是指任意一第一节点对应的调用次数为零,但是该任意一第一节点作为其他第一节点的必经节点时,该其他第一节点对应的调用次数不为零。
[0059] 子步骤2053:当判定剖面分析数据中存在任意一第一节点对应的调用次数不为零时,按照第二预设规则遍历所述任意一第一节点被调用时必经的第二节点集合中的每个第二节点,分别对所述每个第二节点对应的调用次数进行纠正。
[0060] 具体地,按照第二预设规则遍历所述任意一第一节点调用时必经的第二节点集合中的每个第二节点,分别对每个第二节点对应的调用次数进行纠正时,针对第二节点集合中的每个第二节点,均执行如下操作:
[0061] 判断剖面分析数据中第二节点对应的调用次数是否为零;若是,则将第二节点对应的调用次数纠正为预设值;其中,预设值为非零值;若否,则保持第二节点对应的调用次数不变。
[0062] 预设值可以由本领域技术人员根据实际需求进行设置,例如:设置为1、2或3等,本发明实施例中对此不做具体限制。
[0063] 通过执行子步骤2051至子步骤2053,能够可有效排查出污点数据并对其进行纠正。
[0064] 上述对确定的第一节点对应的调用次数进行纠正的方式,具体如下:针对任意一第一节点v,当v对应的调用次数为零,那么跳过该节点,并去检查下一个第一节点;当第一节点v对应的调用次数不为零时,那么去检查v经过的各第二节点,基于第一节点v对应的调用次数不为零时,第一节点v必经的各第二节点对应的调用次数必然不为零的理论,去检查第一节点v必经的第二节点中是否存在调用次数为零的第二节点,如果存在任意一第二节点w对应的调用次数为零,那么说明第二节点w对应的调用次数为错误的,即第二节点w对应的调用次数为污点数据,需要对第二节点w对应的调用次数进行纠正。同理,第一节点v也会是其他节点的必经节点,因此直接跳过,通过检测其他调用次数非零的第一节点,即可对调用次数为零的第一节点v进行纠正。当存在任意一第一节点对应的调用次数为零,但是该任意一第一节点作为另一个第一节点的必经节点时,该另一个第一节点对应的调用次数不为零时,该任意一第一节点对应的调用次数即为污点数据,基于上述对第一节点对应的调用次数进行纠正方式,能够有效排查出污点数据并对其进行纠正。
[0065] 本发明实施例中,第一节点集合和第二节点集合中每一个节点对应的节点标识并不会改变,即每一个节点对应的节点标识为唯一的,任意一个第二节点在上述按照第二规则进行遍历的过程中会被纠正,可以将纠正后的第二节点对应的调用次数作为该第二节点对应的节点标识所指向的第一节点对应的调用次数。例如,第一节点集合中包含第一节点的节点标识为节点a,节点a作为第一节点时对应的调用次数为零,且节点a属于节点b的必经节点集合,即节点a此时作为第二节点,但是节点b对应的调用次数并不是零,那么节点a作为第二节点时,被纠正为预设值,亦即节点a作为第一节点时对应的调用次数被纠正为预设值。
[0066] 步骤206:将纠正后的每个第一节点对应的调用次数确定为目标剖面分析数据。
[0067] 步骤207:依据目标剖面分析数据,将该热点方法编译为本地代码。
[0068] 动态编译器依据目标剖面分析数据编译热点方法,对于具体编译方式参照相关现有技术即可,本发明实施例中对此不做具体限制。
[0069] 本发明实施例提供的动态编译方法,除具有实施例一中所示的动态编译方法所具有的有益效果外,循环遍历热点方法调用的每个节点,对各节点对应的调用次数中为污点数据的调用次数进行纠正,将纠正后的每个节点对应的调用次数确定为目标剖面分析数据,能够提升数据纠正的全面性以及精准性。
[0070] 实施例三
[0071] 参照图4,示出了本发明实施例三的一种动态编译装置的结构框图。
[0072] 本发明实施例的动态编译装置包括:获取模块401,用于获取热点方法对应的剖面分析数据;其中,所述热点方法为一组连续的虚拟机指令序列;纠正模块402,用于对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据;编译模块403,用于依据所述目标剖面分析数据将所述热点方法编译为本地代码。
[0073] 本发明实施例提供的动态编译装置,在动态编译的过程中,对剖面分析数据中的与实际不符的污点数据进行纠正,能够提升剖面分析数据的准确性。通过纠正后的目标剖面分析数据编译所对应的热点方法,能够提升系统的性能。
[0074] 实施例四
[0075] 参照图5,示出了本发明实施例四的一种动态编译装置的结构框图。
[0076] 本发明实施例的动态编译装置是对实施例三中的装置的进一步优化,优化后的动态编译装置可以包括:获取模块501,用于获取热点方法对应的剖面分析数据;其中,所述热点方法为一组连续的虚拟机指令序列;纠正模块502,用于对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据;编译模块503,用于依据所述目标剖面分析数据将所述热点方法编译为本地代码。
[0077] 优选地,所述纠正模块502包括:获取子模块5021,用于获取所述剖面分析数据中调用点对应的调用次数为零的数据,其中,所述热点方法包含至少一个调用点;所述剖面分析数据中包含每个调用点及其对应的调用次数;纠正子模块5022,用于从所述调用次数为零的数据中确定污点数据,并对所述污点数据进行纠正,生成目标剖面分析数据。
[0078] 优选地,所述纠正子模块5022包括:第一确定单元50221,用于基于预先构造的所述热点方法对应的程序控制流图,确定所述热点方法调用的第一节点集合;其中,所述热点方法包含的每个调用点在所述程序控制流图中均有对应的一个节点;遍历单元50222,用于按照第一预设规则循环遍历所述第一节点集合中的每个第一节点,确定调用次数为污点数据的第一节点,并对确定的所述第一节点对应的调用次数进行纠正,直至所述确定的第一节点对应的调用次数均不再变化为止;第二确定单元50223,用于将纠正后的每个第一节点对应的调用次数确定为目标剖面分析数据。
[0079] 优选地,所述遍历单元50222具体用于:根据所述预先构造的热点方法对应的程序控制流图,分别确定所述每个第一节点被调用时必经的第二节点集合;其中,所述第二节点集合中的每一个节点均属于第一节点集合;当判定所述剖面分析数据中存在任意一第一节点对应的调用次数为零时,若所述任意一节点满足预设条件,则将所述任意一节点作为所述确定的第一节点,并保持所述确定的第一节点对应的调用次数不变;当判定所述剖面分析数据中存在任意一第一节点对应的调用次数不为零时,按照第二预设规则遍历所述任意一第一节点被调用时必经的第二节点集合中的每个第二节点,分别对所述每个第二节点对应的调用次数进行纠正;根据纠正后的所有第二节点对应的调用次数,对所述确定的第一节点对应的调用次数进行纠正。
[0080] 优选地,所述遍历单元50222按照第二预设规则遍历所述任意一第一节点被调用时必经的第二节点集合中的每个第二节点,分别对所述每个第二节点对应的调用次数进行纠正时,具体用于:针对所述第二节点集合中的每个第二节点,均执行如下操作:判断所述剖面分析数据中所述第二节点对应的调用次数是否为零;若是,则将所述第二节点对应的调用次数纠正为预设值;其中,所述预设值为非零值;若否,则保持所述第二节点对应的调用次数不变。
[0081] 本发明实施例中的动态编译装置用于实现前述方法实施例中相应的动态编译方法,并且具有相应的方法实施的有益效果,在此不再赘述。
[0082] 实施例五
[0083] 参照图6,示出了本发明实施例五的一种用于动态编译的电子设备的结构示意图。
[0084] 图6是根据一示例性实施例示出的一种用于动态编译的电子设备的框图。
[0085] 参照图6,电子设备可以包括以下一个或多个组件:处理组件602,存储器604,电源组件606,多媒体组件608,音频组件610,输入/输出(I/O)的接口612,传感器组件614,以及通信组件616。
[0086] 处理组件602通常控制电子设备的整体操作,诸如与显示,数据通信,相机操作和记录操作相关联的操作。处理元件602可以包括一个或多个处理器620来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件602可以包括一个或多个模块,便于处理组件602和其他组件之间的交互。例如,处理部件602可以包括多媒体模块,以方便多媒体组件608和处理组件602之间的交互。
[0087] 存储器604被配置为存储各种类型的数据以支持在电子设备的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器604可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
[0088] 电源组件606为电子设备的各种组件提供电。电源组件606可以包括电源管理系统,一个或多个电源,及其他与为终端600生成、管理和分配电力相关联的组件。
[0089] 多媒体组件608包括在所述电子设备和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件608包括一个前置摄像头和/或后置摄像头。当电子设备处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
[0090] 音频组件610被配置为输出和/或输入音频信号。例如,音频组件610包括一个麦克(MIC),当终端处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器604或经由通信组件616发送。在一些实施例中,音频组件610还包括一个扬声器,用于输出音频信号。
[0091] I/O接口612为处理组件602和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和定按钮。
[0092] 传感器组件614包括一个或多个传感器,用于为电子设备600提供各个方面的状态评估。例如,传感器组件614可以检测到电子设备600的打开/关闭状态,组件的相对定位,例如所述组件为终端的显示器和小键盘,传感器组件614还可以检测终端或终端一个组件的位置改变,用户与电子设备接触的存在或不存在,电子设备方位或加速/减速和电子设备的温度变化。传感器组件614可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件614还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件614还可以包括加速度传感器,陀螺仪传感器,磁传感器压力传感器或温度传感器。
[0093] 通信组件616被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信部件616经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信部件616还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
[0094] 在示例性实施例中,电子设备可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程阵列(FPGA)、控制器微控制器微处理器或其他电子元件实现,用于执行上述动态编译方法。
[0095] 所述动态编译方法包括:获取热点方法对应的剖面分析数据;其中,所述热点方法为一组连续的虚拟机指令序列;对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据;依据所述目标剖面分析数据将所述热点方法编译为本地代码。
[0096] 优选地,所述热点方法包含至少一个调用点;所述剖面分析数据中包含每个调用点及其对应的调用次数;对所述剖面分析数据中的污点数据进行纠正,生成目标剖面分析数据的步骤,包括:获取所述剖面分析数据中调用点对应的调用次数为零的数据;从所述调用次数为零的数据中确定污点数据,并对所述污点数据进行纠正,生成目标剖面分析数据。
[0097] 优选地,对所述污点数据进行纠正,生成目标剖面分析数据的步骤,包括:基于预先构造的所述热点方法对应的程序控制流图,确定所述热点方法调用的第一节点集合;其中,所述热点方法包含的每个调用点在所述程序控制流图中均有对应的一个节点;按照第一预设规则循环遍历所述第一节点集合中的每个第一节点,确定调用次数为污点数据的第一节点,并对确定的所述第一节点对应的调用次数进行纠正,直至所述确定的第一节点对应的调用次数均不再变化为止;将纠正后的每个第一节点对应的调用次数确定为目标剖面分析数据。
[0098] 优选地,按照第一预设规则循环遍历所述第一节点集合中的每个第一节点,确定调用次数为污点数据的第一节点,并对确定的所述第一节点对应的调用次数进行纠正的步骤,包括:根据所述预先构造的热点方法对应的程序控制流图,分别确定所述每个第一节点被调用时必经的第二节点集合;其中,所述第二节点集合中的每一个节点均属于第一节点集合;当判定所述剖面分析数据中存在任意一第一节点对应的调用次数为零时,若所述任意一节点满足预设条件,则将所述任意一节点作为所述确定的第一节点,并保持所述确定的第一节点对应的调用次数不变;当判定所述剖面分析数据中存在任意一第一节点对应的调用次数不为零时,按照第二预设规则遍历所述任意一第一节点被调用时必经的第二节点集合中的每个第二节点,分别对所述每个第二节点对应的调用次数进行纠正;根据纠正后的所有第二节点对应的调用次数,对所述确定的第一节点对应的调用次数进行纠正。
[0099] 优选地,按照第二预设规则遍历所述任意一第一节点被调用时必经的第二节点集合中的每个第二节点,对所述确定的第二节点对应的调用次数进行纠正的步骤,包括:针对所述第二节点集合中的每个第二节点,均执行如下操作:判断所述剖面分析数据中所述第二节点对应的调用次数是否为零;若是,则将所述第二节点对应的调用次数纠正为预设值;其中,所述预设值为非零值;若否,则保持所述第二节点对应的调用次数不变。
[0100] 在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器604,上述指令可由电子设备的处理器620执行以完成上述动态编译方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
[0101] 一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述实施例中所示的任意一种动态编译方法。
[0102] 本发明实施例的电子设备用于实现前述多个方法实施例中相应的动态编译方法,并且具有相应的方法实施的有益效果,在此不再赘述。
[0103] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0104] 以上对本发明所提供的一种动态编译方法和装置、可读存储介质及电子设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
[0105] 在此提供的算法和显示不与任何特定计算机、电子系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0106] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0107] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0108] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0109] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0110] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的浏览器客户端设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0111] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈