CN106775893B - 对程序预编译的方法及装置 - Google Patents
对程序预编译的方法及装置 Download PDFInfo
- Publication number
- CN106775893B CN106775893B CN201611254648.7A CN201611254648A CN106775893B CN 106775893 B CN106775893 B CN 106775893B CN 201611254648 A CN201611254648 A CN 201611254648A CN 106775893 B CN106775893 B CN 106775893B
- Authority
- CN
- China
- Prior art keywords
- program
- function
- optimization information
- optimized
- identifier
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开是关于一种对程序预编译的方法及装置,属于电子技术应用领域。所述方法包括:获取目标程序的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;根据所述优化信息,对每个运行阶段对应的待优化函数进行编译。由于智能设备在对目标程序进行预编译的过程中,可以仅对优化信息中记载的函数进行编译,而无需再对该目标程序中的所有函数进行编译,因此有效提高了对该目标程序的编译效率,进而提高了系统启动和运行的速度。
Description
技术领域
本公开涉及电子技术应用领域,特别涉及一种对程序预编译的方法及装置。
背景技术
智能设备在首次启动时,或者在操作系统更新后,需要先对系统中所有已安装程序进行预编译。该预编译的过程可以包括:将每个程序中的各个函数编译成预设格式(例如DEX格式)的文件,之后通过虚拟机将该预设格式的文件编译成智能设备所支持的机器码,并保存该机器码。当某个程序被触发时,智能设备可以直接执行该程序对应的机器码,从而实现程序的快速启动和运行。
相关技术中,智能设备在首次启动时,或者在操作系统更新后,需要将每个程序中的所有函数全部编译为机器码,该编译时间较长,系统启动和运行速度较慢。
发明内容
为了解决相关技术中程序启动和运行速度较慢的问题,本公开提供了一种对程序预编译的方法及装置。所述技术方案如下:
根据本公开实施例的第一方面,提供一种对程序预编译的方法,所述方法包括:
获取目标程序的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
根据所述优化信息,对每个运行阶段对应的待优化函数进行编译。
可选的,所述获取目标程序的优化信息,包括:
向服务器发送针对所述目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
接收服务器发送的所述目标程序的优化信息。
可选的,所述每个待优化函数对应的运行阶段包括:启动阶段、开始阶段和正常运行阶段,
所述根据所述优化信息,对每个运行阶段对应的待优化函数进行编译,包括:
在所述目标程序启动前,采用预编译算法对与所述启动阶段对应的待优化函数进行编译;
在所述目标程序的启动阶段,采用即时编译算法对与所述开始运行阶段对应的待优化函数进行动态编译;
在所述目标程序的开始运行阶段,采用即时编译算法对与所述正常运行阶段对应的待优化函数进行动态编译。
可选的,所述方法还包括:
保存对待优化函数进行编译后得到的机器码。
可选的,所述方法还包括:
在第一程序运行的过程中,每隔预设时间段,统计一次所述第一程序中各函数的调用次数,所述第一程序为所述智能设备中安装的任一程序;
向服务器发送所述第一程序的统计信息,所述统计信息中包括所述第一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段。
可选的,所述预设时间段与所述第一程序的运行时长正相关。
可选的,所述方法还包括:
检测所述第一程序是否为预设程序;
当所述第一程序为预设程序时,根据所述第一程序的统计信息,将第一程序中,调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述第一程序的优化信息中。
可选的,所述优化信息中还包括所述目标程序中至少一个函数经过编译后的机器码。
根据本公开实施例的第二方面,提供一种对程序预编译的方法,所述方法包括:
接收智能设备发送的针对目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
根据所述获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与所述目标程序的标识对应的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
将获取到的优化信息发送至所述智能设备。
可选的,所述方法还包括:
接收多个智能设备上报的针对多个程序的统计信息,其中,所述多个程序中的任一程序的统计信息中包括:所述任一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段;
根据多个智能设备上报的针对多个程序的统计信息,计算每个程序中,每个函数的平均调用次数;
将每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述每个程序的优化信息中。
可选的,所述任一程序的统计信息中还包括所述任一程序的启动次数,所述方法还包括:
根据多个智能设备上报的针对多个程序的统计信息,从所述多个程序中确定待优化程序,所述待优化程序为平均启动次数大于第二阈值的程序;
对所述待优化程序中,平均调用次数大于第三阈值的函数进行预编译;
将预编译后的机器码记录在所述待优化程序的优化信息中。
可选的,所述多个智能设备中第一智能设备上报的统计信息中还包括:所述第一智能设备的设备标识以及所述第一智能设备的操作系统标识,所述第一智能设备为所述多个智能设备中的任一智能设备;
所述根据多个智能设备上报的针对多个程序的统计信息,计算每个程序中,每个函数的平均调用次数,包括:
将所述多个智能设备划分N组,其中每组智能设备的操作系统标识相同,所述N为正整数;
根据预设的设备标识与权重值的对应关系,获取每组智能设备中每个智能设备的权重值;
对于所述第一程序中的每个函数,根据所述每组智能设备中每个智能设备的权重值,对每组智能设备中每个智能设备上报的调用次数进行加权平均,计算得到每个函数的N个平均调用次数,其中每个平均调用次数对应一个操作系统标识,所述第一程序为所述多个程序中的任一程序;
所述将每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述每个程序的优化信息中,包括:
对于所述第一程序中各个函数的第i个平均调用次数,将第i个平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述第一程序的第i个优化信息中,得到所述第一程序的N个优化信息,其中每个优化信息对应一个操作系统的标识,i为小于等于N的正整数。
可选的,所述获取请求中还包括所述智能设备的操作系统的标识;
所述根据所述获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与所述目标程序的标识对应的优化信息,包括:
根据所述获取请求,从预先存储的程序标识、操作系统标识和优化信息的对应关系中,获取与所述目标程序的标识和操作系统标识对应的优化信息。
根据本公开实施例的第三方面,提供一种对程序预编译的装置,所述装置包括:
获取模块,被配置为获取目标程序的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
编译模块,被配置为根据所述优化信息,对每个运行阶段对应的待优化函数进行编译。
可选的,所述获取模块,被配置为:
向服务器发送针对所述目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
接收服务器发送的所述目标程序的优化信息。
可选的,所述每个待优化函数对应的运行阶段包括:启动阶段、开始阶段和正常运行阶段,所述编译模块,被配置为:
在所述目标程序启动前,采用预编译算法对与所述启动阶段对应的待优化函数进行编译;
在所述目标程序的启动阶段,采用即时编译算法对与所述开始运行阶段对应的待优化函数进行动态编译;
在所述目标程序的开始运行阶段,采用即时编译算法对与所述正常运行阶段对应的待优化函数进行动态编译。
可选的,所述装置还包括:
存储模块,被配置为保存对待优化函数进行编译后得到的机器码。
可选的,所述装置还包括:
统计模块,被配置为在第一程序运行的过程中,每隔预设时间段,统计一次所述第一程序中各函数的调用次数,所述第一程序为所述智能设备中安装的任一程序;
发送模块,被配置为向服务器发送所述第一程序的统计信息,所述统计信息中包括所述第一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段。
可选的,所述预设时间段与所述第一程序的运行时长正相关。
可选的,所述装置还包括:
检测模块,被配置为检测所述第一程序是否为预设程序;
记录模块,被配置为当所述第一程序为预设程序时,根据所述第一程序的统计信息,将所述第一程序中,调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述第一程序的优化信息中。
可选的,所述优化信息中还包括所述目标程序中至少一个函数经过编译后的机器码。
根据本公开实施例的第四方面,提供一种对程序预编译的装置,所述装置包括:
第一接收模块,被配置为接收智能设备发送的针对目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
获取模块,被配置为根据所述获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与所述目标程序的标识对应的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
发送模块,被配置为将获取到的优化信息发送至所述智能设备。
可选的,所述装置还包括:
第二接收模块,被配置为接收多个智能设备上报的针对多个程序的统计信息,其中,所述多个程序中的任一程序的统计信息中包括:所述任一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段;
计算模块,被配置为根据多个智能设备上报的针对多个程序的统计信息,计算每个程序中,每个函数的平均调用次数;
第一记录模块,被配置为将每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述每个程序的优化信息中。
可选的,所述任一程序的统计信息中还包括所述任一程序的启动次数,所述装置还包括:
确定模块,被配置为根据多个智能设备上报的针对多个程序的统计信息,从所述多个程序中确定待优化程序,所述待优化程序为平均启动次数大于第二阈值的程序;
编译模块,被配置为对所述待优化程序中,平均调用次数大于第三阈值的函数进行预编译;
第二记录模块,被配置为将预编译后的机器码记录在所述待优化程序的优化信息中。
可选的,所述多个智能设备中第一智能设备上报的统计信息中还包括:所述第一智能设备的设备标识以及所述第一智能设备的操作系统标识,所述第一智能设备为所述多个智能设备中的任一智能设备;所述计算模块,被配置为:
将所述多个智能设备划分N组,其中每组智能设备的操作系统标识相同,所述N为正整数;
根据预设的设备标识与权重值的对应关系,获取每组智能设备中每个智能设备的权重值;
对于所述第一程序中的每个函数,根据所述每组智能设备中每个智能设备的权重值,对每组智能设备中每个智能设备上报的调用次数进行加权平均,计算得到每个函数的N个平均调用次数,其中每个平均调用次数对应一个操作系统标识,所述第一程序为所述多个程序中的任一程序;所述第一记录模块,被配置为:
对于所述第一程序中各个函数的第i个平均调用次数,将第i个平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述第一程序的第i个优化信息中,得到所述第一程序的N个优化信息,其中每个优化信息对应一个操作系统的标识,i为小于等于N的正整数。
可选的,所述获取请求中还包括所述智能设备的操作系统的标识;
所述获取模块,被配置为:
根据所述获取请求,从预先存储的程序标识、操作系统标识和优化信息的对应关系中,获取与所述目标程序的标识和操作系统标识对应的优化信息。
根据本公开实施例的第五方面,提供一种对程序预编译的装置,包括:处理器;
用于存储所述处理器的可执行指令的存储器;
其中,所述处理器被配置为:
获取目标程序的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
根据所述优化信息,对每个运行阶段对应的待优化函数进行编译。
根据本公开实施例的第六方面,提供一种对程序预编译的装置,包括:处理器;
用于存储所述处理器的可执行指令的存储器;
其中,所述处理器被配置为:
接收智能设备发送的针对目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
根据所述获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与所述目标程序的标识对应的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
将获取到的优化信息发送至所述智能设备。
本公开的实施例提供的技术方案可以包括以下有益效果:
本公开提供了一种对程序预编译的方法及装置,智能设备可以获取目标程序的优化信息,该优化信息中包括该目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;之后,智能设备可以根据该优化信息,对每个运行阶段对应的待优化函数进行编译。由于智能设备在对目标程序进行预编译的过程中,可以仅对优化信息中记载的函数进行编译,而无需再对该目标程序中的所有函数进行编译,因此有效提高了对该目标程序的编译效率,进而提高了系统启动和运行的速度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
为了更清楚地说明本公开的实施例,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据一示例性实施例示出的一种本公开部分实施例中提供的对程序预编译的方法所涉及的实施环境的示意图;
图2是根据一示例性实施例示出的一种对程序预编译的方法的流程图;
图3是根据一示例性实施例示出的另一种对程序预编译的方法的流程图;
图4-1是根据一示例性实施例示出的又一种对程序预编译的方法的流程图;
图4-2是根据一示例性实施例示出的一种智能设备计算每个函数的平均调用次数的方法流程图;
图4-3是根据一示例性实施例示出的一种智能设备运行目标程序的方法流程图;
图5-1是根据一示例性实施例示出的一种对程序预编译的装置的结构示意图;
图5-2是根据一示例性实施例示出的另一种对程序预编译的装置的结构示意图;
图6-1是根据一示例性实施例示出的又一种对程序预编译的装置的结构示意图;
图6-2是根据一示例性实施例示出的再一种对程序预编译的装置的结构示意图;
图7是根据一示例性实施例示出的一种对程序预编译的装置的框图;
图8是根据一示例性实施例示出的另一种对程序预编译的装置的框图。
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
具体实施方式
为了使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开作进一步地详细描述,显然,所描述的实施例仅仅是本公开一部份实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本公开保护的范围。
请参见图1,其示出了本公开部分实施例中提供的对程序预编译的方法所涉及的实施环境的示意图。该实施环境可以包括:服务器110和至少一个智能设备120。服务器110可以是一台服务器,或者由若干台服务器组成的服务器集群,或者是一个云计算服务中心。智能设备120可以为智能手机、电脑、多媒体播放器、电子阅读器、可穿戴式设备等。服务器110和智能设备120之间可以通过有线网络或无线网络建立连接。
图2是根据一示例性实施例示出的一种对程序预编译的方法的流程图,该方法可以应用于如图1所示的任一智能设备中,参考图2,该方法包括:
步骤101、获取目标程序的优化信息,该优化信息中包括该目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段。
在本公开实施例中,若目标程序为该智能设备中首次安装的程序,则智能设备可以从服务器中获取该目标程序的优化信息;若该目标程序为智能设备已经安装过,但经过更新后的程序,或者若该目标程序为该智能设备中的公共程序,则该智能设备也可以直接从本地获取该目标程序的优化信息。
步骤102、根据该优化信息,对每个运行阶段对应的待优化函数进行编译。
综上所述,本公开实施例提供了一种对程序预编译的方法,智能设备可以获取目标程序的优化信息,并能够在目标程序启动和运行的阶段中,对该优化信息中记载的待优化函数进行编译。由于智能设备在对目标程序进行预编译的过程中,可以仅对优化信息中记载的函数进行编译,而无需再对该目标程序中的所有函数进行编译,因此有效提高了对该目标程序的编译效率,进而提高了系统启动和运行的速度。
图3是根据一示例性实施例示出的另一种对程序预编译的方法的流程图,该方法可以应用于如图1所示的服务器中,参考图3,该方法包括:
步骤201、接收智能设备发送的针对目标程序的优化信息的获取请求,该获取请求中包括该目标程序的标识。
步骤202、根据该获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与该目标程序的标识对应的优化信息,该优化信息中包括该目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段。
步骤203、将获取到的优化信息发送至该智能设备。
综上所述,本公开实施例提供了一种对程序预编译的方法,当服务器接收到针对目标程序的优化信息的获取请求时,可以从预先存储的程序标识和优化信息的对应关系中,获取该目标程序的优化信息,并将该优化信息发送至智能设备。因此,智能设备在对目标程序进行预编译的过程中,可以仅对优化信息中记载的函数进行编译,而无需再对该目标程序中的所有函数进行编译,有效提高了对该目标程序的编译效率,进而提高了系统启动和运行的速度。
图4-1是根据一示例性实施例示出的又一种对程序预编译的方法的流程图,该方法可以应用于如图1所示的实施环境中,参考图4-1,该方法包括:
步骤301、智能设备在第一程序运行的过程中,每隔预设时间段,统计一次该第一程序中各函数的调用次数。
在本公开实施例中,该第一程序可以为该智能设备中安装的任一程序,该预设时间段可以与该第一程序的运行时长正相关。也即是,该预设时间段并不是固定值,该第一程序的运行时长越长,该预设时间段也越长。因此,在第一程序启动开始时,智能设备对每个函数调用次数的统计会较为频繁,随着第一程序运行时间的增加,智能设备统计的频率也随之下降。当该第一程序启动预设时长之后,该智能设备即可以固定的统计周期对该各个函数的调用次数进行统计。
例如,在第一程序开始启动后,该智能设备可以在第一程序启动100毫秒后,统计一次该第一程序中各个函数的调用次数;之后,该智能设备可以在第一程序启动500毫秒、启动1秒、启动5秒、启动10秒、启动1分钟以及启动10分钟等时长后分别统计一次。当第一程序启动30分钟后,该智能设备可以以30分钟为固定的统计周期,周期性的对该第一程序中各个函数的调用次数进行统计。
具体的,以智能设备中的操作系统为安卓操作系统为例,假设该安卓操作系统中采用的虚拟机为ART(英文:Android RunTime)虚拟机,该安卓操作系统中的程序均是由JAVA(一种编程语言)函数编写的,其中每个JAVA函数可以用一个ArtMethod对象代表。为了统计该每个JAVA函数的调用次数,可以为每个ArtMethod对象添加一个长整型(也称为long型)的计数器,采用该long型计数器,可以防止某个函数调用次数太多导致计数器溢出。当函数每次被调用时,就在该函数的计数器中增加一次计数。在第一程序的启动并运行过程中,智能设备可以每隔一端时间,后台启动一个线程,读取该第一程序中所有JAVA函数的计数情况。
进一步的,由于在ART虚拟机中,一个JAVA函数可以有两种调用方法:1)ART虚拟机调用被编译成机器码的函数;2)ART虚拟机用解释模式调用DEX字节码的方法。对于第一种调用情况,可以在编译一个JAVA函数时,在生成代码中插入一段计数代码,这样当该JAVA函数每次被调用时,就会自动进行计数;对于第二种调用情况,只需要在负责解释字节码的ART例程中,添加一段计数的代码即可实现对每个函数调用次数的自动统计。
在本公开实施例另一种可选的实现方式中,智能设备对每个函数的调用次数进行统计时,还可以每隔一定时间(具体可以根据不同运行阶段选取不同的时间间隔),如100ms或者1s等,统计所有线程中当前被调用的函数。统计的方法可以包括:1、读取对应线程的寄存器信息,主要获取sp(堆栈指针)信息;2、获取对应线程的Thread对象(JAVA函数中的一种对象的名称),从该对象中,读取到ManagedStack变量(JAVA函数中的一种变量的名称)的值,这个对象用于管理JAVA堆栈与非JAVA堆栈;3、根据sp和ManagedStack变量的值,得到当前被调用的JAVA函数,然后向上遍历4层,遍历的方法与ART内部遍历的方法一致;4、记录这些函数,并统计它们被记录的次数。该统计方法本质上是一种抽样统计的方法,可以通过选取合适的间隔,将对程序运行的影响减少的最小的同时,统计得到比较准确的函数调用次数。
步骤302、智能设备向服务器发送该第一程序的统计信息。
在本公开实施例中,智能设备在对第一程序中每个函数的调用次数进行统计时,还会记录该函数的函数名(该函数名还可以包括所属的类名)以及该函数对应的运行阶段,并将该调用次数、函数名和对应的运行阶段均记录在该第一程序的统计信息中。其中每个函数对应的运行阶段是指该函数被调用时,该函数所属程序的运行阶段,该运行阶段可以包括:启动阶段、开始运行阶段和正常运行阶段。
之后,该智能设备可以先将各个程序的统计信息保存在系统的存储区,然后实时检测智能设备是否满足上传条件。当满足上传条件时,再加将各个程序的统计信息上传到服务器中。该上传条件可以包括:智能设备的系统处于空闲状态且与服务器建立有网络连接,例如,该智能设备可以在处理器总占用率低于30%,且当前连接有无线保真(英文:Wireless Fidel的;简称:WIFI)的情况下向服务器上传各个程序的统计信息。
需要说明的是,在实际应用中,每个程序的统计信息中还可以包括:每个函数所在进程的进程名称以及进程运行时间等相关信息。由于智能设备中存储的各个程序的统计信息中包括大量重复的字符串,因此,为了减少数据占用的存储空间,智能设备可以对重复的字符串进行编码,用一个数字来表示一个通用的字符串。另外,由于大量的类和函数名都是固定的,在所有智能设备和多个版本的操作系统中都是长期保持一致的,因此还可以对这些通用且不变的类和函数进行统一编码,从而可以有效减少统计信息中重复字符串出现的概率,避免占用智能设备过多的存储资源,同时也能提高数据的传输效率。
还需要说明的是,在实际应用中,智能设备在对每个函数的调用次数进行统计和记录时,还可以分别对每个统计阶段设置对应的统计阈值。只有当某个函数在某个阶段的调用次数大于该某个阶段对应的统计阈值时,才会对该函数在该某个阶段的调用次数进行记录。示例的,假设在第一程序启动后5秒内,统计阈值均为0,在第一程序启动后5秒后,统计阈值为10;则智能设备在第一程序启动5秒内,只被调用过一次的函数也会被记录在该第一程序的统计信息中;在第一程序启动5秒之后,只有调用次数大于10次的函数才会被记录在该第一程序的统计信息中。其中,每个阶段对应的统计阈值可以为预先设定的经验值,本公开实施例对该每个阶段对应的统计阈值的具体数值不做限定。
表1
示例的,假设智能设备在启动并运行程序A的过程中,调用的函数包括A1至A10共10个函数,则该智能设备在程序A运行的过程中,统计得到的统计信息可以如表1所示。从表1中可以看出,函数A1和函数A3被调用的阶段为程序A的启动阶段,调用次数分别为4次和10次;函数A4在程序A的开始运行阶段被调用,调用次数为12次。
此外,函数A2、函数A5、函数A6、函数A8以及函数A10由于调用次数均小于对应的运行阶段的统计阈值,因此上述五个函数未被记录在该程序A的统计信息中。
步骤303、智能设备检测该第一程序是否为预设程序。
智能设备对各个程序的统计信息进行统计和记录后,还可以进一步检测第一程序是否为预设程序,该预设程序可以是指操作系统中会被所有的应用程序使用的公共程序(例如系统程序)。当该第一程序为预设程序时,智能设备可以执行步骤304;当该第一程序不为预设程序时,智能设备可以不做其他操作。
步骤304、当该第一程序为预设程序时,智能设备根据该第一程序的统计信息,将该第一程序中,调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在该第一程序的优化信息中。
在本公开实施例中,当第一程序为预设程序时,智能设备可以将该第一程序的统计信息中,每个函数的调用次数与第一阈值进行对比,并将调用次数大于该第一阈值的函数的函数名和对应的运行阶段记录在该第一程序的优化信息,以供操作系统使用。其中,该第一阈值可以为预先设置的。
由于该预设程序可以为系统中的公共程序,因此,智能设备可以通过模拟运行各个应用程序,对各个公共程序的调用次数进行统计,这样,可以在没有进行大规模网络统计的基础上,首先得出一个关于公共程序的优化信息,可先提供给系统使用。
步骤305、服务器根据多个智能设备上报的针对多个程序的统计信息,计算每个程序中,每个函数的平均调用次数。
在本公开实施例中,服务器可以接收多个智能设备上报的统计信息,其中每个智能设备可以上报针对多个程序的统计信息。服务器可以根据接收到的统计信息,计算每个程序中每个函数的平均调用次数,以便根据该平均调用次数,统计得到每个程序的优化信息。
可选的,该多个智能设备中第一智能设备上报的统计信息中还可以包括:该第一智能设备的设备标识以及该第一智能设备的操作系统标识,该第一智能设备为该多个智能设备中的任一智能设备。进一步的,图4-2是根据一示例性实施例示出的一种智能设备计算每个函数的平均调用次数的方法流程图,参考图4-2,该方法可以包括:
步骤3051、将该多个智能设备划分N组,其中每组智能设备的操作系统标识相同,该N为正整数。
由于在不同的操作系统中,同一类型程序中所包含的函数可能不同,各函数的调用情况也有可能不同,因此服务器可以根据操作系统的标识对多个智能设备进行分组,以便对于每一种类型的程序,都可以统计得到对应于每个操作系统的优化信息。
示例的,假设服务器接收到了四个智能设备:设备1至设备4上报的针对程序A的统计信息。其中,各个设备的设备标识和操作系统标识如表2所示。由于该设备1和设备2的操作系统标识相同,该设备3和设备4的操作系统标识相同,因此服务器可以将该四个智能设备划分为两组,其中,设备1和设备2为第一组,设备3和设备4为第二组。
表2
设备 | 设备1 | 设备2 | 设备3 | 设备4 |
设备标识 | X1 | X2 | Y1 | Y1 |
操作系统标识 | 安卓5.0 | 安卓5.0 | 安卓6.0 | 安卓6.0 |
步骤3052、根据预设的设备标识与权重值的对应关系,获取每组智能设备中每个智能设备的权重值。
对于采用同一版本的操作系统(即操作系统标识相同)的各个智能设备来说,不同设备标识的智能设备的处理器的运算能力有所不同,对函数的调用能力也有所不同,因此可以根据每个智能设备的处理器的运算能力对各个函数的调用次数进行校正。在本公开实施例中,该设备标识可以为用于标识该智能设备中处理器的类型(包括处理器的架构和版本)的标识,该服务器中可以预先存储有设备标识与权重值的对应关系,其中该权重值与该设备标识对应的处理器的处理能力负相关,也即是,若某个设备标识对应的智能设备的处理器的处理能力越高,该设备标识对应的权重值则越小。
示例的,该服务器中预先存储有设备标识与权重值的对应关系可以如表3所示,其中设备标识X1对应的权重值为0.6,设备标识X2对应的权重值为0.4;设备标识Y1对应的权重值为0.7。
表3
设备标识 | X1 | X2 | Y1 | Y2 |
权重值 | 0.6 | 0.4 | 0.7 | 0.3 |
步骤3053、对于该第一程序中的每个函数,根据该每组智能设备中每个智能设备的权重值,对每组智能设备中每个智能设备上报的调用次数进行加权平均,计算得到每个函数的N个平均调用次数。
其中,每个平均调用次数对应一个操作系统标识,该第一程序可以为该多个程序中的任一程序。在本公开实施例中,对于每个程序,服务器可以根据每组智能设备上报的统计信息对该程序中每个函数的平均调用次数进行统计,因此对于每个函数,一共可以计算得到N个平均调用次数。
示例的,假设在本公开实施例中,服务器将多个智能设备划分为了两组,即N=2。该设备1上报的统计信息如表1所示,设备2上报的统计信息如表4所示,则根据第一组智能设备:设备1和设备2上报的统计信息,以及该两个设备的权重值:0.6和0.4,该服务器可以计算得到程序A中每个函数对应于操作系统:安卓5.0的平均调用次数。其中,函数A1的平均调用次数=4×0.6+6×0.4=4.8,函数A3的平均调用次数=10×0.6+12×0.4=10.8,函数A4的平均调用次数=12×0.6+14×0.4=12.8,函数A7的平均调用次数=20×0.6+18×0.4=19.2,函数A9的平均调用次数=30×0.6+20×0.4=26,此外函数A2、A5、A6、A8和A10的平均调用次数可以默认为0。
表4
对于第二组智能设备:设备3和设备4上报的统计信息,该服务器也可以根据该两个设备的权重值,通过上述加权平均算法计算得到该程序A中每个函数对应于操作系统:安卓6.0的平均调用次数。对于该程序A中各个函数,该服务器根据两组智能设备上报的统计信息,可以计算得到的每个函数对应于两个操作系统的平均调用次数。该各个函数的两个平均调用次数可以如表5所示。从表5中可以看出,每个函数对应于不同操作系统时,其平均调用次数也有所不同。例如函数A1对应于安卓5.0的平均调用次数为4.8次,对应于安卓6.0的平均调用次数为6次。
表5
函数名 | A1 | A3 | A4 | A7 | A9 |
安卓5.0 | 4.8 | 10.8 | 12.8 | 19.2 | 26 |
安卓6.0 | 6 | 8 | 12 | 22 | 26 |
步骤306、服务器将每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在该每个程序的优化信息中。
进一步的,服务器可以将每个程序中,每个函数的平均调用次数与第一阈值进行对比,并将该每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在该每个程序的优化信息中。进一步的,为了便于查找每个程序的优化信息,该服务器可以存储程序标识与优化信息的对应关系。
具体的,由于服务器对每个函数可以计算得到N个平均调用次数,因此在对第一程序的优化信息进行统计时,对于该第一程序中各个函数的第i个平均调用次数,服务器可以将第i个平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在该第一程序的第i个优化信息中,从而可以得到该第一程序的N个优化信息,其中每个优化信息对应一个操作系统的标识,该i为小于等于N的正整数。也即是,该服务器中还可以存储有程序标识、操作系统标识和优化信息的对应关系。
示例的,假设该第一阈值为5,则对于表5中所示的程序A中每个函数的两个平均调用次数,该服务器可以分别统计得到该程序A对应于安卓5.0和安卓6.0的优化信息。由于该程序A的各个函数对应于安卓5.0的平均调用次数中,函数A3、函数A4、函数A7和函数A9的平均调用次数均大于第一阈值5,因此,该服务器可以在程序A对应于安卓5.0的优化信息中,记录函数A3、函数A4、函数A7和函数A9中每个函数的函数名,以及每个函数对应的运行阶段。同理,该服务器可以在程序A对应于安卓6.0的优化信息中,记录函数A1、函数A3、函数A4、函数A7和函数A9中每个函数的函数名,以及每个函数对应的运行阶段。
需要说明的是,在实际应用中,服务器在统计每个程序的优化信息时所参考的第一阈值可以不为固定值,即该第一阈值可以根据每个函数对应的运行阶段的不同来进行调整。示例的,对于启动阶段的函数,该第一阈值可以为5,对于正常运行阶段的函数,该第一阈值可以为10,对于正常运行阶段的函数,该第一阈值可以为20。此时,该服务器所统计得到的程序A的两个优化信息可以如表6所示。
表6
需要说明的是,在本公开实施例中,为了进一步对每个程序的优化信息进行校正,服务器还可以根据智能设备的设备标识,将N组智能设备中的第j组智能设备进行进一步划分为Mj个小组,其中,每个小组的智能设备的设备标识相同,该j为小于等于N的正整数。进一步的,服务器可以根据每个小组内多个智能设备上报的统计信息,计算每个函数的第一平均调用次数,得到每个函数的个第一平均调用次数,其中每个第一平均调用次数对应一个设备标识和一个操作系统标识。同时,该服务器可以对N组智能设备中的每组智能设备上报的统计信息,计算得到每个函数的N个第二平均调用次数。之后,该服务器可以按照预设的权重值,将每个函数的每个第一平均调用次数与对应的第二平均调用次数进行加权平均,得到每个函数的M个校正后的平均调用次数,其中,每个校正后的平均调用次数与一个设备标识以及一个操作系统标识对应。最后,服务器可以将第i个平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在该第一程序的第i个优化信息中,从而可以得到该第一程序的M个优化信息,其中每个优化信息对应一个设备标识和操作系统标识。相应的,当服务器接收到智能设备发送的获取请求时,可以根据该智能设备的设备标识和操作系统标识,获取到对应的优化信息。
步骤307、服务器根据多个智能设备上报的针对多个程序的统计信息,从该多个程序中确定待优化程序。
在本公开实施例中,每个智能设备上报的针对每个程序的统计信息中还可以包括该每个程序在预设周期内的启动次数。服务器所确定的待优化程序可以为平均启动次数大于第二阈值的程序。也即是,每个智能设备可以在每隔预设周期上报的统计信息中携带该启动次数,而在该预设周期内上报的统计信息中可以无需携带该启动次数。服务器接收到各个智能设备上报的启动次数后,可以计算每个程序的平均启动次数,并将该平均启动次数与第二阈值进行对比,若某个程序的平均启动次数大于第二阈值,则服务器可以确定该程序为使用频率较高的程序,因此可以将该程序确定为待优化程序。其中,该预设周期和第二阈值可以均为预先设定的经验值,例如该预设周期可以为一个月,该第二阈值可以为50。
示例的,假设对于程序A,四个智能设备上报启动次数分别为:10次、20次、15次和15次;对于程序B,四个智能设备上报启动次数分别为:60次、50次、50次和60次。则服务器可以计算得到程序A的平均启动次数为15次,程序B的平均启动次数为55次,由于该程序B的平均启动次数大于第二阈值:50次,因此服务器可以将该程序B确定为待优化程序。
步骤308、服务器对该待优化程序中,平均调用次数大于第三阈值的函数进行预编译。
进一步的,由于在上述步骤305中,服务器已经计算得到了每个程序中各个函数的平均调用次数,因此为了进一步提高智能设备运行待优化程序时的运行效率,对于该待优化程序中的各个函数,服务器可以直接对该平均调用次数大于第三阈值的函数进行预编译。其中,该第三阈值可以为预先设定的,且该第三阈值可以大于或者等于该第一阈值。示例的,假设程序B中的函数B1、函数B2和函数B3的平均调用次数大于该第三阈值,则服务器可以直接对该程序B中的函数B1、函数B2和函数B3进行预编译。
步骤309、服务器将预编译后的机器码记录在该待优化程序的优化信息中。
对于该使用频率较高的待优化函数,服务器可以直接将预编译后得到的机器码记录在该待优化程序的优化信息中。因此,当智能设备从服务器中获取到该待优化程序的优化信息后,可以直接执行该预编译后的机器码,从而可以有效提高程序的启动和运行速度。示例的,该服务器可以在程序B的优化信息中记录该函数B1、函数B2和函数B3预编译后的机器码。
步骤310、智能设备向服务器发送针对该目标程序的优化信息的获取请求。
在本公开实施例中,为了提高目标程序的启动和运行速度,智能设备可以在目标程序首次启动之前获取该目标程序的优化信息。该首次启动可以是指目标程序安装后的首次启动,也可以是指目标程序更新(即升级)后的首次启动,或者也可以是指智能设备操作系统更新后目标程序的首次启动。具体的,该智能设备可以在下载完目标程序的安装包后,或者在更新目标程序时,或者在完成操作系统更新后,向服务器发送用于获取该目标程序的优化信息的获取请求,该获取请求中可以包括该目标程序的标识。
示例的,假设智能设备:设备5首次安装程序A,则该设备5可以在下载完程序A的安装包后,向服务器发送获取请求,该获取请求中包括该程序A的标识。
需要说明的是,若该目标程序为更新后的首次启动,或者若该目标程序为公共程序,则该智能设备还可以在发送获取请求之前,先检测智能设备中是否已经存储有该目标程序的优化信息,若本地已经存储有该优化信息,则智能设备可以直接获取本地存储的优化信息。或者,当智能设备未从服务器中获取到该目标程序的优化信息时,也可以检测智能设备本地是否存储有该目标程序的优化信息。
步骤311、服务器根据该获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与该目标程序的标识对应的优化信息。
参考上述步骤306可知,服务器中可以存储有程序标识和优化信息的对应关系,其中目标程序的优化信息中可以包括该目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段。
可选的,在本公开实施例中,该智能设备发送的获取请求中还可以包括该智能设备的操作系统的标识。服务器在获取该目标程序的优化信息时,可以根据该操作系统的标识,从预先存储的程序标识、操作系统标识和优化信息的对应关系中,获取与该目标程序的标识和操作系统标识对应的优化信息。
示例的,假设该智能设备:设备5发送的获取请求中包括的操作系统的标识为:安卓5.0,则根据表5所示的对应关系可知,该服务器可以获取到与该程序A以及安卓5.0对应的优化信息:启动阶段:A3,开始运行阶段:A4以及正常运行阶段:A9。
步骤312、服务器向智能设备发送该目标程序的优化信息。
示例的,服务器可以向设备5发送程序A的优化信息:启动阶段:A3,开始运行阶段:A4以及正常运行阶段:A9。
步骤313、智能设备根据该优化信息,对每个运行阶段对应的待优化函数进行编译。
该每个待优化函数对应的运行阶段包括:启动阶段、开始阶段和正常运行阶段,图4-3是根据一示例性实施例示出的一种智能设备运行目标程序的方法流程图,参考图4-3,该方法可以包括:
步骤3131、在该目标程序启动前,采用预编译算法对与该启动阶段对应的待优化函数进行编译。
在目标程序首次启动前,智能设备可以先采用预编译算法对与启动阶段对应的待优化函数进行编译,并将编译结果保存到缓存文件中,然后再运行该编译结果。当智能设备完成对该启动阶段对应的函数的预编译后,目标程序就可以启动并开始运行。示例的,智能设备可以在程序A首次启动之前,采用预编译算法对启动阶段对应的函数A3进行编译。
步骤3132、在该目标程序的启动阶段,采用即时编译算法对与该开始运行阶段对应的待优化函数进行动态编译。
进一步的,在该目标程序的启动阶段,智能设备可以采用即时编译(英文:Just InTime;简称:JIT)算法对该开始运行阶段对应的待优化函数进行动态编译,动态编译出的结果可以直接运行。示例的,智能设备可以在该程序A的启动阶段,采用JIT算法对函数A4进行动态编译。
步骤3133、在该目标程序的开始运行阶段,采用即时编译算法对与该正常运行阶段对应的待优化函数进行动态编译。
示例的,智能设备可以在该程序A的开始运行阶段,采用JIT算法对函数A7进行动态编译。
由于程序启动时调用的函数可能频率低,但是对程序的启动速度影响大,程序运行时调用的函数频率较高,且对程序的运行速度影响大,因此可以对不同运行阶段的函数采用不同的编译方法进行编译。进一步的,由于JIT算法需要先以解释模式执行DEX程序,经过一段时间后找到热点代码,然后再将该热点代码编译成机器码,这个过程可能会使得系统在启动时和刚开始运行的一段时间内,运行速度慢,对启动时间也有一定的拖累,因此可以在该程序启动后再采用该JIT算法对待优化函数进行动态编译。
需要说明的是,该预编译和JIT算法的具体实现过程可以参考相关技术,本公开实施例对此不做赘述。
还需要说明的是,若该智能设备获取到的目标程序的优化信息中包括至少一个函数经过编译后的机器码,则该智能设备可以在首次启动目标程序的过程中,直接执行该编译后的机器码,由此可以极大提高该目标程序的启动和运行效率。示例的,假设设备1安装了程序B,且该设备1获取到的程序B的优化信息中还包括函数B1、函数B2和函数B3预编译后的机器码,则该设备1在首次运行程序B时,可以直接执行该函数B1、函数B2和函数B3预编译后的机器码,而无需再进行预编译的操作,使得该程序B可以快速启动和运行。
还需要说明的是,在本公开实施例中,当该目标程序为预设程序(例如系统程序或者公共程序)时,该目标程序的启动阶段、开始运行阶段和正常运行阶段也即与该智能设备操作系统的启动阶段、开始运行阶段和正常运行阶段一一对应。此外,由于优化信息中记载的待优化函数是根据统计信息确定的调用频率较高的函数,因此,在程序启动和运行的过程中,仅对该优化信息中记载的待优化函数进行编译,并不会对程序的性能造成太大影响,可以在保证程序基本性能的基础上显著提高程序的启动和运行速度。
步骤314、智能设备保存对待优化函数进行编译后得到的机器码。
在本公开实施例中,为了提高程序后续启动和运行的效率,智能设备可以保存对目标程序中待优化函数进行编译后得到的机器码,当智能设备下次再启动该目标程序时,可以直接执行该保存的机器码。
需要说明的是,在本公开实施例中,智能设备还可以将该目标程序中待优化函数编译后得到的机器码保存在该目标程序的优化信息中。当该智能设备对该目标程序进行更新或者升级后,再次启动该目标程序时,可以直接从本地获取该目标程序的优化信息,并直接执行该优化信息中的机器码。
还需要说明的是,本公开实施例提供的对程序预编译的方法的步骤的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减,示例的,步骤303和步骤304可以根据情况进行删除,步骤307至步骤309也可以根据情况进行删除。任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本公开的保护范围之内,因此不再赘述。
综上所述,本公开实施例提供了一种对程序预编译的方法,智能设备可以获取目标程序的优化信息,并能够在目标程序启动和运行的阶段中,对该优化信息中记载的待优化函数进行编译。由于智能设备在对目标程序进行预编译的过程中,可以仅对优化信息中记载的函数进行编译,而无需再对该目标程序中的所有函数进行编译,因此有效提高了对该目标程序的编译效率,进而提高了系统启动和运行的速度。
图5-1是根据一示例性实施例示出的一种对程序预编译的装置的结构示意图,该装置可以配置于图1所示的智能设备中,参考图5-1,该装置可以包括:
获取模块501,被配置为获取目标程序的优化信息,该优化信息中包括该目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段。
编译模块502,被配置为根据该优化信息,对每个运行阶段对应的待优化函数进行编译。
综上所述,本公开实施例提供了一种对程序预编译的装置,智能设备可以获取目标程序的优化信息,并能够在目标程序启动和运行的阶段中,对该优化信息中记载的待优化函数进行编译。由于智能设备在对目标程序进行预编译的过程中,可以仅对优化信息中记载的函数进行编译,而无需再对该目标程序中的所有函数进行编译,因此有效提高了对该目标程序的编译效率,进而提高了系统启动和运行的速度。
可选的,该获取模块501,具体被配置为:
向服务器发送针对该目标程序的优化信息的获取请求,该获取请求中包括该目标程序的标识;接收服务器发送的该目标程序的优化信息。
可选的,该每个待优化函数对应的运行阶段包括:启动阶段、开始阶段和正常运行阶段,该编译模块502,具体被配置为:
在该目标程序启动前,采用预编译算法对与该启动阶段对应的待优化函数进行编译;
在该目标程序的启动阶段,采用即时编译算法对与该开始运行阶段对应的待优化函数进行动态编译;
在该目标程序的开始运行阶段,采用即时编译算法对与该正常运行阶段对应的待优化函数进行动态编译。
图5-2是根据一示例性实施例示出的另一种对程序预编译的装置的结构示意图,参考图5-2,该装置还可以包括:
存储模块503,被配置为保存对待优化函数进行编译后得到的机器码。
统计模块504,被配置为在第一程序运行的过程中,每隔预设时间段,统计一次该第一程序中各函数的调用次数,该第一程序为该智能设备中安装的任一程序。其中,该预设时间段与该第一程序的运行时长正相关。
发送模块505,被配置为向服务器发送该第一程序的统计信息,该统计信息中包括该第一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段。
检测模块506,被配置为检测该第一程序是否为预设程序。
记录模块507,被配置为当该第一程序为预设程序时,根据该第一程序的统计信息,将该第一程序中,调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在该第一程序的优化信息中。
可选的,该优化信息中还包括该目标程序中至少一个函数经过编译后的机器码。
综上所述,本公开实施例提供了一种对程序预编译的装置,智能设备可以获取目标程序的优化信息,并能够在目标程序启动和运行的阶段中,对该优化信息中记载的待优化函数进行编译。由于智能设备在对目标程序进行预编译的过程中,可以仅对优化信息中记载的函数进行编译,而无需再对该目标程序中的所有函数进行编译,因此有效提高了对该目标程序的编译效率,进而提高了系统启动和运行的速度。
图6-1是根据一示例性实施例示出的又一种对程序预编译的装置的结构示意图,该装置可以配置于图1所示的服务器中,参考图6-1,该装置可以包括:
第一接收模块601,被配置为接收智能设备发送的针对目标程序的优化信息的获取请求,该获取请求中包括该目标程序的标识。
获取模块602,被配置为根据该获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与该目标程序的标识对应的优化信息。
该优化信息中可以包括该目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段。
发送模块603,被配置为将获取到的优化信息发送至该智能设备。
综上所述,本公开实施例提供了一种对程序预编译的装置,当服务器接收到针对目标程序的优化信息的获取请求时,可以从预先存储的程序标识和优化信息的对应关系中,获取该目标程序的优化信息,并将该优化信息发送至智能设备。因此,智能设备在对目标程序进行预编译的过程中,可以仅对优化信息中记载的函数进行编译,而无需再对该目标程序中的所有函数进行编译,因此有效提高了对该目标程序的编译效率,进而提高了系统启动和运行的速度。
图6-2是根据一示例性实施例示出的再一种对程序预编译的装置的结构示意图,参考图6-2,该装置还可以包括:
第二接收模块604,被配置为接收多个智能设备上报的针对多个程序的统计信息,其中,该多个程序中的任一程序的统计信息中包括:该任一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段。
计算模块605,被配置为根据多个智能设备上报的针对多个程序的统计信息,计算每个程序中,每个函数的平均调用次数。
第一记录模块606,被配置为将每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在该每个程序的优化信息中。
可选的,该任一程序的统计信息中还包括该任一程序的启动次数,参考图6-2,该装置还可以包括:
确定模块607,被配置为根据多个智能设备上报的针对多个程序的统计信息,从该多个程序中确定待优化程序,该待优化程序为平均启动次数大于第二阈值的程序。
编译模块608,被配置为对该待优化程序中,平均调用次数大于第三阈值的函数进行预编译。
第二记录模块609,被配置为将预编译后的机器码记录在该待优化程序的优化信息中。
可选的,该多个智能设备中第一智能设备上报的统计信息中还包括:该第一智能设备的设备标识以及该第一智能设备的操作系统标识,该第一智能设备为该多个智能设备中的任一智能设备;该计算模块605,具体被配置为:
将该多个智能设备划分N组,其中每组智能设备的操作系统标识相同,该N为正整数;
根据预设的设备标识与权重值的对应关系,获取每组智能设备中每个智能设备的权重值;
对于该第一程序中的每个函数,根据该每组智能设备中每个智能设备的权重值,对每组智能设备中每个智能设备上报的调用次数进行加权平均,计算得到每个函数的N个平均调用次数,其中每个平均调用次数对应一个操作系统标识,该第一程序为该多个程序中的任一程序;该第一记录模块606,被配置为:
对于该第一程序中各个函数的第i个平均调用次数,将第i个平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在该第一程序的第i个优化信息中,得到该第一程序的N个优化信息,其中每个优化信息对应一个操作系统的标识,i为小于等于N的正整数。
可选的,该获取请求中还包括该智能设备的操作系统的标识;该获取模块602,具体被配置为:
根据该获取请求,从预先存储的程序标识、操作系统标识和优化信息的对应关系中,获取与该目标程序的标识和操作系统标识对应的优化信息。
综上所述,本公开实施例提供了一种对程序预编译的装置,当服务器接收到针对目标程序的优化信息的获取请求时,可以从预先存储的程序标识和优化信息的对应关系中,获取该目标程序的优化信息,并将该优化信息发送至智能设备。因此,智能设备在对目标程序进行预编译的过程中,可以仅对优化信息中记载的函数进行编译,而无需再对该目标程序中的所有函数进行编译,因此有效提高了对该目标程序的编译效率,进而提高了系统启动和运行的速度。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图7是根据一示例性实施例示出的一种对程序预编译的装置700的框图。例如,装置700可以是移动电话,计算机,数字广播智能设备,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图7,装置700可以包括以下一个或多个组件:处理组件702,存储器704,电源组件706,多媒体组件708,音频组件710,输入/输出(I/O)的接口712,传感器组件714,以及通信组件716。
处理组件702通常控制装置700的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件702可以包括一个或多个处理器720来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件702可以包括一个或多个模块,便于处理组件702和其他组件之间的交互。例如,处理组件702可以包括多媒体模块,以方便多媒体组件708和处理组件702之间的交互。
存储器704被配置为存储各种类型的数据以支持在装置700的操作。这些数据的示例包括用于在装置700上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器704可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件706为装置700的各种组件提供电力。电源组件706可以包括电源管理系统,一个或多个电源,及其他与为装置700生成、管理和分配电力相关联的组件。
多媒体组件708包括在所述装置700和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件708包括一个前置摄像头和/或后置摄像头。当装置700处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件710被配置为输出和/或输入音频信号。例如,音频组件710包括一个麦克风(MIC),当装置700处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器704或经由通信组件716发送。在一些实施例中,音频组件710还包括一个扬声器,用于输出音频信号。
I/O接口712为处理组件702和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件714包括一个或多个传感器,用于为装置700提供各个方面的状态评估。例如,传感器组件714可以检测到装置700的打开/关闭状态,组件的相对定位,例如所述组件为装置700的显示器和小键盘,传感器组件714还可以检测装置700或装置700一个组件的位置改变,用户与装置700接触的存在或不存在,装置700方位或加速/减速和装置700的温度变化。传感器组件714可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件714还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件714还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件716被配置为便于装置700和其他设备之间有线或无线方式的通信。装置700可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件716经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件716还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,装置700可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器704,上述指令可由装置700的处理器720执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置700的处理器执行时,使得装置700能够执行上述图2以及图4-1所示实施例提供的对程序预编译的方法。
图8是根据一示例性实施例示出的一种对程序预编译的装置800的框图。例如,装置800可以被提供为一服务器。参照图8,装置800包括处理组件822,其进一步包括一个或多个处理器,以及由存储器832所代表的存储器资源,用于存储可由处理组件822执行的指令,例如应用程序。存储器832中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件822被配置为执行指令,以执行上述图3以及图4-1所示实施例提供的对程序预编译的方法。
装置800还可以包括一个电源组件826被配置为执行装置800的电源管理,一个有线或无线网络接口850被配置为将装置800连接到网络,和一个输入输出(I/O)接口858。装置800可以操作基于存储在存储器832的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
本领域技术人员在考虑说明书及实践这里公开的方案后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (24)
1.一种对程序预编译的方法,其特征在于,所述方法包括:
获取目标程序的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
根据所述优化信息,对每个运行阶段对应的待优化函数进行编译;
所述方法还包括:
在第一程序运行的过程中,每隔预设时间段,统计一次所述第一程序中各函数的调用次数,所述第一程序为智能设备中安装的任一程序;
向服务器发送所述第一程序的统计信息,所述统计信息中包括所述第一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段。
2.根据权利要求1所述的方法,其特征在于,所述获取目标程序的优化信息,包括:
向服务器发送针对所述目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
接收服务器发送的所述目标程序的优化信息。
3.根据权利要求1所述的方法,其特征在于,所述每个待优化函数对应的运行阶段包括:启动阶段、开始运行阶段和正常运行阶段,
所述根据所述优化信息,对每个运行阶段对应的待优化函数进行编译,包括:
在所述目标程序启动前,采用预编译算法对与所述启动阶段对应的待优化函数进行编译;
在所述目标程序的启动阶段,采用即时编译算法对与所述开始运行阶段对应的待优化函数进行动态编译;
在所述目标程序的开始运行阶段,采用即时编译算法对与所述正常运行阶段对应的待优化函数进行动态编译。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
保存对待优化函数进行编译后得到的机器码。
5.根据权利要求1所述的方法,其特征在于,
所述预设时间段与所述第一程序的运行时长正相关。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
检测所述第一程序是否为预设程序;
当所述第一程序为预设程序时,根据所述第一程序的统计信息,将所述第一程序中,调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述第一程序的优化信息中。
7.根据权利要求1至6任一所述的方法,其特征在于,
所述优化信息中还包括所述目标程序中至少一个函数经过编译后的机器码。
8.一种对程序预编译的方法,其特征在于,所述方法包括:
接收智能设备发送的针对目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
根据所述获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与所述目标程序的标识对应的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
将获取到的优化信息发送至所述智能设备;
所述方法还包括:
接收多个智能设备上报的针对多个程序的统计信息,其中,所述多个程序中的任一程序的统计信息中包括:所述任一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段;
根据多个智能设备上报的针对多个程序的统计信息,计算每个程序中,每个函数的平均调用次数;
将每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述每个程序的优化信息中。
9.根据权利要求8所述的方法,其特征在于,所述任一程序的统计信息中还包括所述任一程序的启动次数,所述方法还包括:
根据多个智能设备上报的针对多个程序的统计信息,从所述多个程序中确定待优化程序,所述待优化程序为平均启动次数大于第二阈值的程序;
对所述待优化程序中,平均调用次数大于第三阈值的函数进行预编译;
将预编译后的机器码记录在所述待优化程序的优化信息中。
10.根据权利要求8所述的方法,其特征在于,所述多个智能设备中第一智能设备上报的统计信息中还包括:所述第一智能设备的设备标识以及所述第一智能设备的操作系统标识,所述第一智能设备为所述多个智能设备中的任一智能设备;
所述根据多个智能设备上报的针对多个程序的统计信息,计算每个程序中,每个函数的平均调用次数,包括:
将所述多个智能设备划分N组,其中每组智能设备的操作系统标识相同,所述N为正整数;
根据预设的设备标识与权重值的对应关系,获取每组智能设备中每个智能设备的权重值;
对于第一程序中的每个函数,根据所述每组智能设备中每个智能设备的权重值,对每组智能设备中每个智能设备上报的调用次数进行加权平均,计算得到每个函数的N个平均调用次数,其中每个平均调用次数对应一个操作系统标识,所述第一程序为所述多个程序中的任一程序;
所述将每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述每个程序的优化信息中,包括:
对于所述第一程序中各个函数的第i个平均调用次数,将第i个平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述第一程序的第i个优化信息中,得到所述第一程序的N个优化信息,其中每个优化信息对应一个操作系统的标识,i为小于等于N的正整数。
11.根据权利要求10所述的方法,其特征在于,所述获取请求中还包括所述智能设备的操作系统的标识;
所述根据所述获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与所述目标程序的标识对应的优化信息,包括:
根据所述获取请求,从预先存储的程序标识、操作系统标识和优化信息的对应关系中,获取与所述目标程序的标识和操作系统标识对应的优化信息。
12.一种对程序预编译的装置,其特征在于,所述装置包括:
获取模块,被配置为获取目标程序的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
编译模块,被配置为根据所述优化信息,对每个运行阶段对应的待优化函数进行编译;
所述装置还包括:
统计模块,被配置为在第一程序运行的过程中,每隔预设时间段,统计一次所述第一程序中各函数的调用次数,所述第一程序为智能设备中安装的任一程序;
发送模块,被配置为向服务器发送所述第一程序的统计信息,所述统计信息中包括所述第一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段。
13.根据权利要求12所述的装置,其特征在于,所述获取模块,被配置为:
向服务器发送针对所述目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
接收服务器发送的所述目标程序的优化信息。
14.根据权利要求12所述的装置,其特征在于,所述每个待优化函数对应的运行阶段包括:启动阶段、开始运行阶段和正常运行阶段,所述编译模块,被配置为:
在所述目标程序启动前,采用预编译算法对与所述启动阶段对应的待优化函数进行编译;
在所述目标程序的启动阶段,采用即时编译算法对与所述开始运行阶段对应的待优化函数进行动态编译;
在所述目标程序的开始运行阶段,采用即时编译算法对与所述正常运行阶段对应的待优化函数进行动态编译。
15.根据权利要求12所述的装置,其特征在于,所述装置还包括:
存储模块,被配置为保存对待优化函数进行编译后得到的机器码。
16.根据权利要求12所述的装置,其特征在于,
所述预设时间段与所述第一程序的运行时长正相关。
17.根据权利要求12所述的装置,其特征在于,所述装置还包括:
检测模块,被配置为检测所述第一程序是否为预设程序;
记录模块,被配置为当所述第一程序为预设程序时,根据所述第一程序的统计信息,将所述第一程序中,调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述第一程序的优化信息中。
18.根据权利要求12至17任一所述的装置,其特征在于,
所述优化信息中还包括所述目标程序中至少一个函数经过编译后的机器码。
19.一种对程序预编译的装置,其特征在于,所述装置包括:
第一接收模块,被配置为接收智能设备发送的针对目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
获取模块,被配置为根据所述获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与所述目标程序的标识对应的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
发送模块,被配置为将获取到的优化信息发送至所述智能设备;
所述装置还包括:
第二接收模块,被配置为接收多个智能设备上报的针对多个程序的统计信息,其中,所述多个程序中的任一程序的统计信息中包括:所述任一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段;
计算模块,被配置为根据多个智能设备上报的针对多个程序的统计信息,计算每个程序中,每个函数的平均调用次数;
第一记录模块,被配置为将每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述每个程序的优化信息中。
20.根据权利要求19所述的装置,其特征在于,所述任一程序的统计信息中还包括所述任一程序的启动次数,所述装置还包括:
确定模块,被配置为根据多个智能设备上报的针对多个程序的统计信息,从所述多个程序中确定待优化程序,所述待优化程序为平均启动次数大于第二阈值的程序;
编译模块,被配置为对所述待优化程序中,平均调用次数大于第三阈值的函数进行预编译;
第二记录模块,被配置为将预编译后的机器码记录在所述待优化程序的优化信息中。
21.根据权利要求19所述的装置,其特征在于,所述多个智能设备中第一智能设备上报的统计信息中还包括:所述第一智能设备的设备标识以及所述第一智能设备的操作系统标识,所述第一智能设备为所述多个智能设备中的任一智能设备;
所述计算模块,被配置为:
将所述多个智能设备划分N组,其中每组智能设备的操作系统标识相同,所述N为正整数;
根据预设的设备标识与权重值的对应关系,获取每组智能设备中每个智能设备的权重值;
对于第一程序中的每个函数,根据所述每组智能设备中每个智能设备的权重值,对每组智能设备中每个智能设备上报的调用次数进行加权平均,计算得到每个函数的N个平均调用次数,其中每个平均调用次数对应一个操作系统标识,所述第一程序为所述多个程序中的任一程序;
所述第一记录模块,被配置为:
对于所述第一程序中各个函数的第i个平均调用次数,将第i个平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述第一程序的第i个优化信息中,得到所述第一程序的N个优化信息,其中每个优化信息对应一个操作系统的标识,i为小于等于N的正整数。
22.根据权利要求21所述的装置,其特征在于,所述获取请求中还包括所述智能设备的操作系统的标识;所述获取模块,被配置为:
根据所述获取请求,从预先存储的程序标识、操作系统标识和优化信息的对应关系中,获取与所述目标程序的标识和操作系统标识对应的优化信息。
23.一种对程序预编译的设备,其特征在于,包括:
处理器;
用于存储所述处理器的可执行指令的存储器;
其中,所述处理器被配置为:
获取目标程序的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
根据所述优化信息,对每个运行阶段对应的待优化函数进行编译;
所述处理器还被配置为:
在第一程序运行的过程中,每隔预设时间段,统计一次所述第一程序中各函数的调用次数,所述第一程序为智能设备中安装的任一程序;
向服务器发送所述第一程序的统计信息,所述统计信息中包括所述第一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段。
24.一种对程序预编译的设备,其特征在于,包括:
处理器;
用于存储所述处理器的可执行指令的存储器;
其中,所述处理器被配置为:
接收智能设备发送的针对目标程序的优化信息的获取请求,所述获取请求中包括所述目标程序的标识;
根据所述获取请求,从预先存储的程序标识和优化信息的对应关系中,获取与所述目标程序的标识对应的优化信息,所述优化信息中包括所述目标程序中至少一个待优化函数的函数名以及每个待优化函数对应的运行阶段;
将获取到的优化信息发送至所述智能设备;
所述处理器还被配置为:
接收多个智能设备上报的针对多个程序的统计信息,其中,所述多个程序中的任一程序的统计信息中包括:所述任一程序中每个函数的函数名、每个函数的调用次数以及每个函数对应的运行阶段;
根据多个智能设备上报的针对多个程序的统计信息,计算每个程序中,每个函数的平均调用次数;
将每个程序中,平均调用次数大于第一阈值的函数的函数名和对应的运行阶段记录在所述每个程序的优化信息中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611254648.7A CN106775893B (zh) | 2016-12-30 | 2016-12-30 | 对程序预编译的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611254648.7A CN106775893B (zh) | 2016-12-30 | 2016-12-30 | 对程序预编译的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106775893A CN106775893A (zh) | 2017-05-31 |
CN106775893B true CN106775893B (zh) | 2020-03-17 |
Family
ID=58953167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611254648.7A Active CN106775893B (zh) | 2016-12-30 | 2016-12-30 | 对程序预编译的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106775893B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109857474A (zh) * | 2017-11-30 | 2019-06-07 | 华为终端有限公司 | 启动应用程序的方法和装置 |
CN109960507B (zh) * | 2017-12-14 | 2021-06-08 | Oppo广东移动通信有限公司 | 编译优化方法、装置、存储介质、智能终端及服务器 |
CN111492345A (zh) * | 2018-10-15 | 2020-08-04 | 华为技术有限公司 | 优化和运行安卓应用程序的方法以及相关装置 |
CN109933030B (zh) * | 2019-03-22 | 2020-05-08 | 江西蓝星星火有机硅有限公司 | 一种化学工艺的顺序控制方法、化学设备及存储介质 |
CN110673887B (zh) * | 2019-08-15 | 2021-05-04 | 华为技术有限公司 | 应用程序启动方法、装置、终端设备及可读存储介质 |
CN112445487A (zh) * | 2019-09-02 | 2021-03-05 | 深圳Tcl新技术有限公司 | 一种dex优化方法、系统、智能终端及存储介质 |
CN110543338A (zh) * | 2019-09-09 | 2019-12-06 | 北京安云世纪科技有限公司 | 一种文件的动态加载方法及装置 |
CN112783499A (zh) * | 2019-11-08 | 2021-05-11 | Oppo广东移动通信有限公司 | 应用程序预编译的方法、装置、电子设备以及服务器 |
CN112947898A (zh) * | 2019-11-26 | 2021-06-11 | Oppo广东移动通信有限公司 | 热点代码确定方法、装置、服务器以及存储介质 |
CN112948026A (zh) * | 2019-11-26 | 2021-06-11 | Oppo广东移动通信有限公司 | 热点代码处理方法、装置、服务器、电子设备及存储介质 |
CN111061484B (zh) * | 2019-11-28 | 2023-05-02 | Oppo广东移动通信有限公司 | 代码编译方法、装置、服务器、用户终端及可读介质 |
CN111061483B (zh) * | 2019-11-28 | 2023-12-01 | Oppo广东移动通信有限公司 | 编译优化方法、装置及电子设备 |
CN113031953A (zh) * | 2019-12-09 | 2021-06-25 | Oppo广东移动通信有限公司 | 应用程序预编译的方法、装置、电子设备以及服务器 |
CN111078318B (zh) * | 2019-12-18 | 2023-06-13 | Oppo广东移动通信有限公司 | 配置文件的处理方法、装置、系统及存储介质 |
CN113010172B (zh) * | 2019-12-18 | 2023-08-29 | Oppo广东移动通信有限公司 | 配置文件的处理方法、装置、系统及存储介质 |
CN113032035B (zh) * | 2019-12-24 | 2022-07-12 | Oppo广东移动通信有限公司 | 配置文件处理方法、装置以及电子设备 |
CN113127047A (zh) * | 2019-12-31 | 2021-07-16 | Oppo广东移动通信有限公司 | 热点代码处理方法、装置、服务器及存储介质 |
CN113126994A (zh) * | 2019-12-31 | 2021-07-16 | Oppo广东移动通信有限公司 | 热点代码处理方法、装置、电子设备及存储介质 |
CN113126995A (zh) * | 2019-12-31 | 2021-07-16 | Oppo广东移动通信有限公司 | 热点代码处理方法、请求方法、装置及电子设备 |
CN112148386A (zh) * | 2020-10-12 | 2020-12-29 | Oppo广东移动通信有限公司 | 一种应用加载方法、装置及计算机可读存储介质 |
CN113741993B (zh) * | 2021-06-15 | 2022-07-01 | 荣耀终端有限公司 | 编译插件dex文件的方法及装置 |
CN113342323B (zh) * | 2021-06-29 | 2024-03-29 | 银清科技有限公司 | 软件在线开发的方法及装置 |
CN116382702B (zh) * | 2023-06-06 | 2023-08-18 | 湖南天河国云科技有限公司 | 智能合约热点探测方法、装置、电子设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102096638A (zh) * | 2010-11-25 | 2011-06-15 | 意法·爱立信半导体(北京)有限公司 | 静态存储的分配方法和装置 |
CN103309683A (zh) * | 2012-03-07 | 2013-09-18 | 京信通信系统(中国)有限公司 | 硬件设备的软件补丁嵌入方法及装置 |
CN103984582A (zh) * | 2014-06-04 | 2014-08-13 | 网易(杭州)网络有限公司 | 一种热更新方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2135159A4 (en) * | 2007-03-09 | 2011-11-30 | Objective Interface Systems Inc | CODE GENERATION OPTIMIZED BY ELIMINATING UNUSED VIRTUAL FUNCTIONS |
-
2016
- 2016-12-30 CN CN201611254648.7A patent/CN106775893B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102096638A (zh) * | 2010-11-25 | 2011-06-15 | 意法·爱立信半导体(北京)有限公司 | 静态存储的分配方法和装置 |
CN103309683A (zh) * | 2012-03-07 | 2013-09-18 | 京信通信系统(中国)有限公司 | 硬件设备的软件补丁嵌入方法及装置 |
CN103984582A (zh) * | 2014-06-04 | 2014-08-13 | 网易(杭州)网络有限公司 | 一种热更新方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106775893A (zh) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106775893B (zh) | 对程序预编译的方法及装置 | |
EP3096224B1 (en) | Method and apparatus for processing application installation package | |
CN104050035B (zh) | 应用程序的处理方法及装置 | |
JP6918181B2 (ja) | 機械翻訳モデルのトレーニング方法、装置およびシステム | |
CN107423106B (zh) | 支持多框架语法的方法和装置 | |
CN113220482A (zh) | 调用请求处理方法、装置、电子设备及存储介质 | |
CN111638938B (zh) | 虚拟机的迁移方法、装置、电子设备及存储介质 | |
CN109063181B (zh) | 数据配置方法、装置、服务器及存储介质 | |
CN106502740B (zh) | 应用安装方法和装置 | |
CN112114814A (zh) | 编译文件确定方法及装置、应用程序生成方法及装置 | |
CN113903034A (zh) | 一种基于公式的数据处理方法及装置 | |
CN110888822B (zh) | 内存处理方法、装置及存储介质 | |
CN112346718A (zh) | 字节码编译方法、字节码编译装置及计算机可读存储介质 | |
CN114860242A (zh) | 一种编译方法、编译装置及存储介质 | |
CN107526683B (zh) | 应用程序功能冗余度的检测方法、装置及存储介质 | |
CN106502719A (zh) | 管理应用程序的组件的方法及装置 | |
CN114077461A (zh) | 应用程序的运行方法、装置、设备及存储介质 | |
CN113722080A (zh) | 内存优化方法、装置及计算机存储介质 | |
CN112445484A (zh) | 一种寄存器处理方法、装置、电子设备及存储介质 | |
CN110995767A (zh) | 一种请求处理方法及装置 | |
CN110247828B (zh) | 识别码分配方法及装置 | |
CN110795444B (zh) | Dom数据更新方法、页面更新方法及装置 | |
CN112506628B (zh) | 代理程序的管理方法、装置、计算机设备及存储介质 | |
CN117149204A (zh) | 编译方法以及装置、电子设备及存储介质 | |
CN115268920A (zh) | 代码编译方法及装置、电子设备、存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |