CN111949328A - 一种启动加速方法、装置、计算机设备及存储介质 - Google Patents
一种启动加速方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN111949328A CN111949328A CN202010782430.9A CN202010782430A CN111949328A CN 111949328 A CN111949328 A CN 111949328A CN 202010782430 A CN202010782430 A CN 202010782430A CN 111949328 A CN111949328 A CN 111949328A
- Authority
- CN
- China
- Prior art keywords
- module
- configuration file
- functional modules
- optimized
- starting
- 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
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/44557—Code layout in executable memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本文涉及计算机技术领域,尤其涉及一种启动加速方法、装置、计算机设备及存储介质,解决了现有技术中应用程序启动速度慢的问题。其中方法包括获取待优化目标程序启动过程中的功能模块;根据所述功能模块的启动顺序生成配置文件;根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中。利用本文实施例,可以加快应用程序启动速度,避免现有技术中对应用程序启动优化不够完善的问题。
Description
技术领域
本文涉及计算机技术领域,尤其涉及一种启动加速方法、装置、计算机设备及存储介质。
背景技术
随着终端设备的普及,应用程序的使用更加的多样和频繁,并且已经融入到人们生活中的方方面面,用户对于应用程序的启动、运行的操作感受有了越来越高的要求。
用户对于应用程序或者应用程序中的“小程序”启动的缓慢而感到无法忍受,现有技术中出现了一些对应用程序等启动进行加速的技术方案,例如,苹果公司官方提供了一种名为“配置文件引导式优化”(Profile Guided Optimization,PGO)的方法,以通过改进应用程序的编译器来优化运行内存空间,提升应用程序的性能,使用该方法可以提升应用程序的5%-10%的性能。但是这种方法对于应用程序启动加速不够明显,并且提升性能有限,用户感知不明显。
如何实现应用程序等的启动进行优化是亟需解决的问题。
发明内容
为解决现有技术中的问题,本文实施例提供了一种启动加速方法、装置、计算机设备及存储介质,解决了现有技术中应用程序启动速度慢的问题。
本文实施例提供了一种启动加速方法,包括,
获取待优化目标程序启动过程中的功能模块;
根据所述功能模块的启动顺序生成配置文件;
根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中。
根据本文实施例的一个方面,获取待优化目标程序启动过程中的功能模块中进一步包括,
在所述待优化目标程序编译期间,获取所述待优化目标程序启动过程中的功能模块。
根据本文实施例的一个方面,所述启动加速方法还包括,
获取待优化目标程序运行过程中的所有功能模块;
在根据所述功能模块的启动顺序生成配置文件中进一步包括,根据所述功能模块的启动顺序以及所有功能模块生成配置文件。
根据本文实施例的一个方面,根据所述功能模块的启动顺序生成配置文件进一步包括,
将获取的所述功能模块的名称根据预定规则进行转换;
按照所述待优化目标程序中功能模块的启动顺序将所述转换后的功能模块名称写入所述配置文件。
根据本文实施例的一个方面,在根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中进一步包括,
按照所述配置文件中的功能模块的顺序,产生所述功能模块相应的连续的逻辑地址;
将所述功能模块的逻辑地址对应到连续页号的页表。
本文实施例还提供了一种启动加速装置,包括,
启动阶段功能模块获取单元,用于获取待优化目标程序启动过程中的功能模块;
配置文件生成单元,用于根据所述功能模块的启动顺序生成配置文件;
处理单元,用于根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中。
根据本文实施例的一个方面,所述启动阶段功能模块获取单元在所述待优化目标程序编译期间,获取所述待优化目标程序启动过程中的功能模块。
根据本文实施例的一个方面,该启动加速装置还包括运行阶段功能模块获取单元,用于获取待优化目标程序运行过程中的所有功能模块;
所述配置文件生成单元还用于,根据所述功能模块的启动顺序以及所有功能模块生成配置文件。
根据本文实施例的一个方面,所述配置文件生成单元进一步包括,
名称转换模块,用于将获取的所述功能模块的名称根据预定规则进行转换;
写入模块,用于按照所述待优化目标程序中功能模块的启动顺序将所述转换后的功能模块名称写入所述配置文件。
根据本文实施例的一个方面,所述处理单元进一步包括,
逻辑地址生成模块,用于按照所述配置文件中的功能模块的顺序,产生所述功能模块相应的连续的逻辑地址;
页表模块,用于将所述功能模块的逻辑地址对应到连续页号的页表。
本文实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的方法。
本文实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现上述的方法。
利用本文实施例,可以加快应用程序启动速度,避免现有技术中对应用程序启动优化不够完善的问题。
附图说明
为了更清楚地说明本文实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本文的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1所示为本文实施例一种启动加速方法的流程图;
图2所示为本文实施例功能模块排布于页表的示意图;
图3所示为本文实施例一种启动加速装置的结构示意图;
图4所示为本文实施例启动加速装置的具体结构示意图;
图5所示为本文实施例一种应用程序启动加速的方法流程图;
图6所示为本文实施例银行应用程序中功能模块的页表示意图;
图7所示为本文实施例编译器编译银行应用程序的过程示意图;
图8所示为本文实施例一种应用程序中功能启动加速的方法流程图;
图9所示为本文实施例转账功能中功能模块的页表示意图;
图10为本文实施例一种智能终端的结构示意图。
【附图标记说明】
301、启动阶段功能模块获取单元;
302、配置文件生成单元;
3021、名称转换模块;
3022、写入模块;
303、处理单元;
3031、逻辑地址生成模块;
3032、页表模块;
304、运行阶段功能模块获取单元;
1000、UE;
1020、SoC;
1022、处理器;
1024、显示电路;
1026、存储器;
1030、显示器;
1040、MMU;
1050、无线通信电路;
1052、天线;
1060、通用接口;
1070、ROM;
1080、NAND。
具体实施方式
下面将结合本文实施例中的附图,对本文实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本文一部分实施例,而不是全部的实施例。基于本文中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文保护的范围。
Objective-C(OC)是一种简单的计算机语言,设计为可以支持真正的面向对象编程。通过提供类定义,方法以及属性的语法,还有其他可以提高类的动态扩展能力的结构等,扩展了标准的ANSI C语言。类的语法和设计主要是基于Smalltalk,最早的面向对象编程语言之一。
Swift是苹果公司推出的编程语言,专门针对OS X和iOS的应用程序开发。Swift在各个方面优于Objective-C,也不会有那么多复杂的符号和表达式。同时,Swift更加快速、便利、高效、安全。其采用了Objective-C的命名参数以及动态对象模型,可以无缝对接到现有的Cocoa(苹果公司为Mac OS X所创建的原生面向对象的API)框架,并且可以兼容Objective-C代码。在此基础之上,Swift还有许多新特性并且支持过程式编程和面向对象编程。
PGO方法的原理是,利用iOS应用程序的工具Xcode构建生成有关最常用代码路径和方法的配置文件信息;然后,使用此配置文件信息将优化工作集中在最常用的代码上,从而利用有关程序通常如何表现的额外信息来更好地完成优化工作。PGO优化方法主要针对的是应用程序中使用最频繁的代码(在OC中为方法),这意味着,对于那些使用频率较低的或者整个程序使用过程中只运行一次的代码,可能得不到较好的优化效果。
但是,本文技术方案的发明人发现,有些Objective-C语言编写的应用程序中会不可避免的使用部分swift语言,而PGO方法无法针对这种融合了OC以及swift的应用程序代码进行优化。因此,PGO方法也不能用于所有的iOS应用程序的内存优化,达到加速启动的目的。
如图1所示为本文实施例一种启动加速方法的流程图,在本实施例中描述了对应用程序的功能模块进行启动加速的流程,本文的方法还可以对应用程序中的某个功能所涉及的功能模块进行启动加速,在本文的方法中对应用程序或者某个功能启动时的功能模块启动顺序进行了记录,并且根据该启动顺序将相应功能模块排布智能终端的内存,将在启动上有顺序关系的应用程序或功能的功能模块尽可能地安排在一个内存页表或者连续的内存页表中,这样可以减少启动应用程序或者功能时查找内存页表中功能模块的时间,提高应用程序或功能启动的速度。在本实施例中,应用程序可以包括windows、iOS、安卓或者Linux等操作系统中的应用程序,例如社交应用程序、银行应用程序等;功能是指应用程序中完成某个特定功能的软件程序,例如社交应用程序中登录功能、设置功能等,银行应用程序中的支付、转账等功能,以上的应用程序以及功能在本文中统称为目标程序,上述的功能模块是指由相应代码实现的某个特定功能,该方法具体包括:
步骤101,获取待优化目标程序启动过程中的功能模块。
步骤102,根据所述功能模块的启动顺序生成配置文件。
步骤103,根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中。
作为本文的一个实施例,获取待优化目标程序启动过程中的功能模块中进一步包括,
在所述待优化目标程序调试期间,获取所述待优化目标程序启动过程中的功能模块。
在本步骤中,待优化目标程序为代码形式,当代码形式的待优化目标程序在调试期间时,通过编译器时先通过前端进行代码的分析,检查语法级错误,并构建针对于语言的抽象语法树(abstract syntax tree,AST),抽象语法树可以对代码形式的待优化目标程序进行优化和转换,转换为新的表达方式(中间表示);通过优化器对代码形式的待优化目标程序进行优化;最后通过后端将代码形式的待优化目标程序的新表达方式映射到目标硬件指令集从而生成机器代码。在上述前端的过程中,可以调用例如底层语言虚拟机(LowLevel Virtual Machine,LLVM)中的监测函数(例如trace插件)获得待优化目标程序中的功能模块启动顺序。
作为本文的一个实施例,所述的启动加速方法还包括,
获取待优化目标程序运行过程中的所有功能模块;
在根据所述功能模块的启动顺序生成配置文件中进一步包括,根据所述功能模块的启动顺序以及所有功能模块生成配置文件。
在本步骤中,还可以记录所有目标程序涉及的功能模块,以Xcode为例,其中包括配置属性Link Map File,通过将该配置属性设置为Yes,则可以在目标程序运行过程中产生一映射文件,该映射文件中记录有目标程序运行时的所有功能模块的名称,如果采用该映射文件对配置文件进行配置,则可以减少页表中缺页中断的情况,从而可以进一步加快目标程序的启动速度。
作为本文的一个实施例,根据所述功能模块的启动顺序生成配置文件进一步包括,
将获取的所述功能模块的名称根据预定规则进行转换;
按照所述待优化目标程序中功能模块的启动顺序将所述转换后的功能模块名称写入所述配置文件。
在本步骤中,以iOS中的Xcode代码规则为例,将功能模块的名称前加入“+”或者“-”,以形成符合Xcode对于Order File文件的要求。
在其他的实施例中,还可以根据应用程序或者功能(也就是目标应用程序)配置文件的要求转换所述功能模块名称。
作为本文的一个实施例,在根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中之前还包括,
将所述配置文件配置于待优化目标程序的工程包中。
在本步骤中,对配置有所述配置文件的工程包进行编译产生所述待优化目标程序的可执行文件,当系统启动所述待优化目标程序的可执行文件时,先加载所述配置文件,然后根据所述配置文件中记录的具有一定顺序的目标应用程序的功能模块名称调用相应功能模块,从而可以加快目标应用程序的启动速度。在iOS系统中,配置文件可以是一个映射表,其中按顺序存储着目标程序在启动过程中调用的功能模块名称,待优化目标程序在调试编译的过程中,生成机器可读的映射表,并保存于编译好的ipa包中,以便于在目标程序运行时系统根据ipa包中的映射表对应功能模块的逻辑地址。
作为本文的一个实施例,在根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中进一步包括,
按照所述配置文件中的功能模块的顺序,产生所述功能模块相应的连续的逻辑地址;
将所述功能模块的逻辑地址对应到连续页号的页表。
在本步骤中,CPU或者终端系统按照配置文件映射表中的顺序逐个将相应的功能模块代码调入内存中,逻辑地址为由CPU为功能模块代码分配的与段相关的偏移地址,逻辑地址中包括了页号以及页内地址,其中逻辑地址中的页号用于索引页表中的页号,从而得到页表中相同页号对应的物理地址的页帧(物理基址),页内地址用于表示物理地址的偏移量。所述物理地址是指物理内存的地址,包括页帧号以及页内地址,其中物理地址中的页内地址与逻辑地址中的页内地址相同。功能模块的代码与逻辑地址、页表、物理地址(物理内存)之间的关系可以参考图2所示为本文实施例功能模块排布于页表的示意图,其中,逻辑地址包括两个部分,分别为页号和页内地址,页表也分为两个部分,分别为页号和页帧,每一行页号和页帧对应的关系为一个页项,物理地址分为两个部分,分别为页帧和页内地址。CPU为目标程序开辟的逻辑地址中,功能模块0、功能模块1、功能模块2、功能模块3等的顺序是根据配置文件中记录的功能模块的顺序,这些功能模块的逻辑地址中的页号对应于页表中的页号,也就是说,页表中的页号顺序与配置文件中功能模块的启动顺序相同,页表中的页帧对应于物理地址中的页帧,系统根据物理内存的使用状况给功能模块分配物理内存,通过在页表中连续的功能模块,在目标程序启动过程中可以避免在页表中搜索功能模块的耗时,只需要按照页表中的顺序将功能模块的代码以及数据装载到物理内存中即可。在本实施例中采用了一级页表的方式进行目标程序启动的说明,还可以采用分级页表(例如二级页表等)、具有转换后备缓冲器(TLB)等页表结构的页表实现目标程序启动过程中按照功能模块的启动顺序调用功能模块的目的。
通过上述本文实施例的方法,将在顺序上关联的功能模块排布在页表的同一页中,并且将顺序上关联的功能模块排布在页表的顺序页项中,减少了目标程序在启动过程中查找页表中功能模块的时间,减小了由于顺序上关联的功能模块未被装载到物理内存中而造成的缺页中断现象,从而可以减小目标程序的启动时间,并且通过实验证明可以例如在iOS中兼容OC以及swift应用程序代码起到优化应用程序内存的目的。
如图3所示为本文实施例一种启动加速装置的结构示意图,在本实施例中描述了对应用程序的功能模块进行启动加速的装置,其中的功能部件可以通过软件实现,或者应用现有技术中的硬件电路、芯片等实现,具体包括,
启动阶段功能模块获取单元301,用于获取待优化目标程序启动过程中的功能模块。
配置文件生成单元302,用于根据所述功能模块的启动顺序生成配置文件。
处理单元303,用于根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中。
作为本文的一个实施例,所述启动阶段功能模块获取单元301在所述待优化目标程序启动期间,获取所述待优化目标程序启动过程中的功能模块。
作为本文的一个实施例,还可以参考如图4所示为本文实施例启动加速装置的具体结构示意图,该启动加速装置还包括运行阶段功能模块获取单元304,用于获取待优化目标程序运行过程中的所有功能模块;
所述配置文件生成单元302还用于,根据所述功能模块的启动顺序以及所有功能模块生成配置文件。
作为本文的一个实施例,所述配置文件生成单元302进一步包括,
名称转换模块3021,用于将获取的所述功能模块的名称根据预定规则进行转换;
写入模块3022,用于按照所述待优化目标程序中功能模块的启动顺序将所述转换后的功能模块名称写入所述配置文件。
作为本文的一个实施例,所述处理单元303进一步包括,
逻辑地址生成模块3031,用于按照所述配置文件中的功能模块的顺序,产生所述功能模块相应的连续的逻辑地址;
页表模块3032,用于将所述功能模块的逻辑地址对应到连续页号的页表。
通过上述本文实施例的装置,将在顺序上关联的功能模块排布在页表的同一页中,并且将顺序上关联的功能模块排布在页表的顺序页项中,减少了目标程序在启动过程中查找页表中功能模块的时间,减小了由于顺序上关联的功能模块未被装载到物理内存中而造成的缺页中断现象,从而可以减小目标程序的启动时间,并且通过实验证明可以例如在iOS中兼容OC以及swift应用程序代码起到优化应用程序内存的目的。
如图5所示为本文实施例一种应用程序启动加速的方法流程图,在本图的实施例中描述了在应用程序启动过程中通过将应用程序功能模块在页表中的顺序进行了排布,从而提高了应用程序的启动速度。在本文实施例中将应用程序开始启动到应用程序主页显示的过程称为该应用程序的启动过程,在本实施例中以银行应用程序(APP)的启动为例进行说明,为了提高银行应用程序的启动速度,在银行应用程序的设计过程中研发人员可以采用本文实施例中的方法来实现提高启动速度的目的。为了简单、清楚的说明本文的技术方案,因此在该银行应用程序启动过程中仅涉及3个功能模块,包括菜单更新模块、登录信息收集模块和用户界面(UI)初始化模块,每个功能模块都具有独立的代码,需要被装载到内存中才能完成银行应用程序的启动,当然,在实际场景中,银行应用程序启动过程中可能不仅仅涉及这3个功能模块,但是可以参照本实施例的方案对更多功能模块的场景进行扩展,具体包括:
步骤501,建立获取银行应用程序启动过程中功能模块的插件。
在本步骤中,以C++语言为例,可以采用LLVM中的监测函数来获得调试过程中银行应用程序启动过程中的功能模块,该监测函数即为上述的插件。
步骤502,启动上述插件,在银行应用程序启动时获取功能模块的调用顺序。
在本步骤中,在对银行应用程序进行调试时,通过上述插件获取银行应用程序在启动过程中调用功能模块的顺序。
以银行应用程序中上述3个功能模块为例进行说明,银行应用程序启动时先调用菜单更新模块,用于与远端服务器通信,确定当前应用程序的版本是否为最新版本,或者还可以检查应用程序启动过程中呈现的广告数据是否为最新的广告数据,如果不是最新的广告数据还需要从远端服务器拉取最新的广告数据;然后,银行应用程序还需要调用登录信息收集模块,用于读取智能终端上存储的用户信息,例如国际移动用户识别码(IMSI)、移动设备国际身份码(IMEI)、用户名、预留密码等信息,并利用上述用户信息进行自动登录操作,如果登录成功,将会从远端服务器获得用户的配置信息,或者从本地智能终端获得用户的配置信息,根据这些配置信息可以按照用户的设置来显示用户关心的内容或者菜单窗口排布等;然后调用所述UI初始化模块,用于根据用户配置信息对启动页面的布局、窗口、主页面的显示内容等进行初始化和渲染。
步骤503,将所获取的功能模块进行名称转换处理。
在本步骤中,获取到的菜单更新模块的名称例如为Update(),登录信息收集模块的名称例如为Login(),UI初始化模块的名称例如为Initial(),将这些功能模块的名称转换为+Update()、+Login()以及+Initial()。
本步骤的功能模块名称转换是根据编译器配置文件的命名规则进行转换,并不限制功能模块名称转换的具体形式。
步骤504,将转换后的功能模块名称生成配置文件。
在本步骤中,按照上述银行应用程序启动过程中的顺序,将转换后的功能模块名称写入配置文件,并将配置文件置于银行应用程序的工程包中,经过编译后生成可执行文件。
步骤505,当银行应用程序启动时,根据配置文件对银行应用程序的启动进行优化。
在本步骤中,在银行应用程序启动之前,CPU根据上述的配置文件将银行应用程序代码中的相应功能模块找出,并根据配置文件中功能模块的顺序分配给每个功能模块连续的逻辑地址,该连续的逻辑地址还对应了页表中连续的页项,在本实施例中可以如附图6所示为本文实施例银行应用程序中功能模块的页表示意图,页号0对应菜单更新模块,相应的物理内存的页帧号为4;页号1对应登录信息收集模块,相应的物理内存的页帧号为2;页号2对应UI初始化模块,相应的物理内存页帧号为0。由此,当根据上述顺序的页表在物理内存中装载银行应用程序的代码后,该银行应用程序启动时可以大幅度的减少启动过程中缺页中断的问题,并且可以提高启动过程中页表的命中率,从而提升银行应用程序的启动速度。
作为对比,在现有技术中,可能由于菜单更新模块只运行一次,后续在银行应用程序运行过程中并不会再次运行,因此在现有技术中的内存优化中可能会被放置到页表的后面,将经常执行的功能模块放到页表的前面,以提高命中率。但是这样一来,银行应用程序启动时需要寻找第一个功能模块,即菜单更新模块,然后才能执行第二个功能模块,即登录信息收集模块,由于菜单更新模块在页表比较靠后的位置,因此命中率降低,搜索时间变长,甚至还可能出现缺页中断的问题。
如图7所示为本文实施例编译器编译银行应用程序的过程示意图,将银行应用程序代码进行词法分析、语法分析、语义分析、中间代码生成,代码优化、目标代码生成。
其中,词法分析将银行应用程序代码从前至后逐个字符的扫描,从中识别出一个个“单词”符号,“单词”符号是程序设计语言的基本语法单位,如关键字、标识符、常数、运算符和分隔符(标点符号,括号)等。
语法分析根据语言的语法规则将单词符号序列分解成各类的语法单位,如表达式、语句、程序等。通过语法分析确定整个输入银行应用程序代码字符串是否构成一个语法上正确的程序(语法树)。
语义分析分析银行应用程序代码中各种语法结构的语义信息,包括检查银行应用程序代码是否包含语义错误,并收集类型信息在后面的代码生成阶段使用。
中间代码生成是根据语义分析的输出生成中间代码。
代码优化是对上述中间代码进行优化。
目标代码生成是编译器工作的最后一个阶段,这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。
符号表的作用是记录银行应用程序代码中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中通过符号表管理需要对符号表进行快速有效地查找、插入、修改和删除操作。
出错处理是指上述各种处理过程中出现的错误以及相应的提示信息等。
当然,在银行应用程序形成目标二进制代码后,可能还需要链接器加载其他启动运行所需要的代码和数据,在此不再赘述。
如图8所示为本文实施例一种应用程序中功能启动加速的方法流程图,在本图的实施例中描述了银行应用程序中转账功能的启动过程,为了提高银行应用程序中转账功能的启动速度,在该转账功能的设计过程中研发人员可以采用本文实施例中的方法来实现提高启动速度的目的。为了简单、清楚的说明本文的技术方案,因此在该银行应用程序的转账功能启动过程中仅涉及4个功能模块,包括卡信息获取模块、收款人信息输入模块、转账金额核对模块、确认转账模块,每个功能模块都具有独立的代码,需要被装载到内存中才能完成转账功能的启动,当然,在实际场景中,转账功能启动过程中可能不仅仅涉及这4个功能模块,但是可以参照本实施例的方案对更多功能模块的场景进行扩展,具体包括:
步骤801,建立获取转账功能启动过程中功能模块的插件。
在本步骤中,以C++语言为例,可以采用LLVM中的监测函数来获得调试过程中转账功能启动过程中的功能模块,该监测函数即为上述的插件。
步骤802,启动上述插件,在转账功能启动时获取功能模块的调用顺序。
在本步骤中,在将银行应用程序进行调试时,通过上述插件获取转账功能在启动过程中调用功能模块的顺序。
以转账功能中上述4个功能模块为例进行说明,转账功能启动时先调用卡信息获取模块,用于获取转出账户的账户信息,可能包括转出账户的账户名、银行卡号、密码等;然后,转账功能还需要调用收款人信息输入模块,用于获取转入账户的信息,可能包括转入账户账号、姓名、银行信息等;然后转账功能调用所述转账金额核对模块,用于核对转出金额与转出账户余额是否匹配,当转出金额大于转出账户余额,则报错,或者当转出金额超过一预定门限值时(例如超过5000),则提示用户确认;最后转账功能还需要调用确认转账模块,以完成转账功能的发送。
在其他实施例中,还可以在转账功能程序设计阶段预先设定转账功能中所有功能模块的启动顺序,此时,步骤801、步骤802也可以被省略,不使用插件获取转账功能启动时功能模块的调用顺序,可以直接得到预先设定的转账功能启动时所有功能模块的调用顺序。
步骤803,获取转账功能中所涉及的所有功能模块。
在本步骤中,当转账功能在启动时涉及上述4个功能模块,在运行时涉及其他的功能模块,例如常用联系人模块等,获取转账功能所涉及的所有功能模块。
步骤804,将获取的功能模块生成配置文件。
在本步骤中,按照上述获取的转账功能启动阶段的功能模块以及运行阶段的功能模块都写入配置文件中,其中,启动阶段的功能模块按照启动的顺序写入配置文件,并将配置文件置于银行应用程序的工程包,对工程包进行编译生成可执行文件。如此处理之后,可以保证转账功能的所有涉及的功能模块都会被写入到页表中,并在物理内存中被加载,从而保证该转账功能不会出现缺页中断的问题。
步骤805,当转账功能启动时,根据配置文件对转账功能的启动进行优化。
在本步骤中,在银行应用程序启动之前,CPU根据上述的配置文件将转账功能代码中的相应功能模块找出,并根据配置文件中功能模块的顺序分配给每个功能模块连续的逻辑地址,该连续的逻辑地址还对应了页表中连续的页项,在本实施例中可以如附图9所示为本文实施例转账功能中功能模块的页表示意图,页号0对应卡信息获取模块,相应的物理内存的页帧号为2;页号1对应收款人信息输入模块,相应的物理内存的页帧号为1;页号2对应转账金额核对模块,相应的物理内存页帧号为4;页号3对应确认转账模块,相应的屋里内存页帧号为0。由此,当根据上述顺序的页表在物理内存中装载转账功能代码后,该转账功能在启动时可以大幅度的减少启动过程中缺页中断的问题,并且可以提高启动过程中页表的命中率,从而提升银行应用程序的启动速度。
作为对比,在现有技术中,可能由于转账金额核对模块只运行一次,后续在银行应用程序运行过程中并不会再次运行,因此在现有技术中的内存优化中可能会被放置到页表的后面,甚至从页表以及物理内存中被剔除,放入硬盘等存储介质的交换区中(即swap分区),将经常执行的功能模块放到页表的前面,以提高命中率。但是这样一来,转账功能启动时需要寻找第三个功能模块,即转账金额核对模块,然后才能执行第四个功能模块,即确认转账模块,由于转账金额核对模块在页表比较靠后的位置,因此命中率降低,搜索时间边长,甚至还可能出现缺页中断的问题。
如图10为本文实施例一种智能终端的结构示意图,在本实施例中,启动加速方法可以运行于本实施例的智能终端之上,如图所示,智能终端(UE)1000可包括片上系统(SoC)1020,该SoC可包括用于各种目的的部分。例如,如图所示,SoC1020可包括可执行UE1000的程序指令的处理器1022和可执行图形处理并将显示信号提供到显示器1030的显示电路1024。一个或多个处理器1022还可耦接至存储器管理单元(MMU)1040、和/或其他电路或设备(诸如显示电路1024、无线通信电路1050、通用接口1060和/或显示器1030),该MMU可被配置为从一个或多个处理器1022接收逻辑地址并将那些逻辑地址转换成存储器(例如,存储器1026、只读存储器(ROM)1070、闪存存储器(NAND)1080)中的物理地址。MMU1040可被配置为执行存储器保护和页表转换或设置。在一些实施方案中,MMU1040可被包括作为处理器1022的一部分。
如图所示,SoC1020可耦接至UE1000的各种其他电路。例如,UE1000可包括各种类型的存储器(例如,包括NAND 1080)、通用接口1060(例如,用于耦接至计算机系统、任务栏、充电站等)、显示器1030和无线通信电路1050(例如,用于LTE、Wi-Fi、GPS等)。
UE 1000可以包括至少一个天线(并且可能有多个天线,例如用于MIMO和/或用于实施不同的无线通信技术等等)1052,用于与基站和/或其他设备进行无线通信。例如,UE1000可使用天线1052来执行无线通信。如上所述,在一些实施方案中,UE1000可被配置为使用多种无线通信技术来进行无线通信。
如本文随后进一步描述的,UE1000可以包括用于实现本文所述的特征和方法的硬件和软件部件。UE 1000的处理器1022可被配置为例如通过执行存储在存储器介质(例如,非暂态计算机可读存储器介质)上的程序指令,来实施本文所述的方法的一部分或全部。在其他实施方案中,处理器1022可被配置作为可编程硬件元件,诸如FPGA(现场可编程门阵列)或者作为ASIC(专用集成电路)。另选地(或除此之外),结合其他部件Soc1020,显示电路1024,存储器1026,NAND 1080,通用接口1060,无线通信电路1050,天线1052,MMU1040,只读存储器1070,显示器1030中的一个或多个其他部件,UE 1000的处理器1022可被配置为实施本文所述的特征的一部分或全部。
本文实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如下步骤:
获取待优化目标程序启动过程中的功能模块。
根据所述功能模块的启动顺序生成配置文件。
根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中。
本文实施例提供的计算机设备还可以实现如图1、图2、图5-图9中的方法。
对应于图1、图2、图5-图9中的方法,本文实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法的步骤。
本文实施例还提供一种计算机可读指令,其中当处理器执行所述指令时,其中的程序使得处理器执行如图1、图2、图5-图9的方法。
应理解,在本文的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本文实施例的实施过程构成任何限定。
还应理解,在本文实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本文的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本文所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本文实施例方案的目的。
另外,在本文各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本文的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本文各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本文中应用了具体实施例对本文的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本文的方法及其核心思想;同时,对于本领域的一般技术人员,依据本文的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本文的限制。
Claims (12)
1.一种启动加速方法,其特征在于包括,
获取待优化目标程序启动过程中的功能模块;
根据所述功能模块的启动顺序生成配置文件;
根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中。
2.根据权利要求1所述的方法,其特征在于,获取待优化目标程序启动过程中的功能模块中进一步包括,
在所述待优化目标程序调试期间,获取所述待优化目标程序启动过程中的功能模块。
3.根据权利要求2所述的方法,其特征在于,所述启动加速方法还包括,
获取待优化目标程序运行过程中的所有功能模块;
在根据所述功能模块的启动顺序生成配置文件中进一步包括,根据所述功能模块的启动顺序以及所有功能模块生成配置文件。
4.根据权利要求1所述的方法,其特征在于,根据所述功能模块的启动顺序生成配置文件进一步包括,
将获取的所述功能模块的名称根据预定规则进行转换;
按照所述待优化目标程序中功能模块的启动顺序将所述转换后的功能模块名称写入所述配置文件。
5.根据权利要求1所述的方法,其特征在于,在根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中进一步包括,
按照所述配置文件中的功能模块的顺序,产生所述功能模块相应的连续的逻辑地址;
将所述功能模块的逻辑地址对应到连续页号的页表。
6.一种启动加速装置,其特征在于包括,
启动阶段功能模块获取单元,用于获取待优化目标程序启动过程中的功能模块;
配置文件生成单元,用于根据所述功能模块的启动顺序生成配置文件;
处理单元,用于根据所述配置文件将所述待优化目标程序中相应的功能模块排布于内存页表中。
7.根据权利要求6所述的装置,其特征在于,所述启动阶段功能模块获取单元在所述待优化目标程序调试期间,获取所述待优化目标程序启动过程中的功能模块。
8.根据权利要求7所述的装置,其特征在于,该启动加速装置还包括运行阶段功能模块获取单元,用于获取待优化目标程序运行过程中的所有功能模块;
所述配置文件生成单元还用于,根据所述功能模块的启动顺序以及所有功能模块生成配置文件。
9.根据权利要求6所述的装置,其特征在于,所述配置文件生成单元进一步包括,
名称转换模块,用于将获取的所述功能模块的名称根据预定规则进行转换;
写入模块,用于按照所述待优化目标程序中功能模块的启动顺序将所述转换后的功能模块名称写入所述配置文件。
10.根据权利要求6所述的装置,其特征在于,所述处理单元进一步包括,
逻辑地址生成模块,用于按照所述配置文件中的功能模块的顺序,产生所述功能模块相应的连续的逻辑地址;
页表模块,用于将所述功能模块的逻辑地址对应到连续页号的页表。
11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述权利要求1-5中任一项的方法。
12.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述权利要求1-5任一项的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010782430.9A CN111949328B (zh) | 2020-08-06 | 2020-08-06 | 一种启动加速方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010782430.9A CN111949328B (zh) | 2020-08-06 | 2020-08-06 | 一种启动加速方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111949328A true CN111949328A (zh) | 2020-11-17 |
CN111949328B CN111949328B (zh) | 2023-10-03 |
Family
ID=73332956
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010782430.9A Active CN111949328B (zh) | 2020-08-06 | 2020-08-06 | 一种启动加速方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111949328B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113885967A (zh) * | 2021-10-22 | 2022-01-04 | 北京字跳网络技术有限公司 | 一种小程序的启动方法、装置、设备及介质 |
CN114489850A (zh) * | 2022-01-20 | 2022-05-13 | 中广核工程有限公司 | 一种设计软件的调用方法、装置、计算机设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001005669A (ja) * | 1999-06-22 | 2001-01-12 | Mitsubishi Electric Corp | プログラム起動方式 |
WO2018000678A1 (zh) * | 2016-06-27 | 2018-01-04 | 中兴通讯股份有限公司 | 模块流程化调度方法及装置 |
CN108762833A (zh) * | 2018-05-16 | 2018-11-06 | 北京安云世纪科技有限公司 | 安卓系统中的应用启动方法和装置 |
CN110377523A (zh) * | 2019-07-24 | 2019-10-25 | 网易(杭州)网络有限公司 | 程序调试方法及装置、电子设备和存储介质 |
CN111124545A (zh) * | 2019-12-25 | 2020-05-08 | 北京奇艺世纪科技有限公司 | 应用程序启动方法、装置、电子设备及存储介质 |
-
2020
- 2020-08-06 CN CN202010782430.9A patent/CN111949328B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001005669A (ja) * | 1999-06-22 | 2001-01-12 | Mitsubishi Electric Corp | プログラム起動方式 |
WO2018000678A1 (zh) * | 2016-06-27 | 2018-01-04 | 中兴通讯股份有限公司 | 模块流程化调度方法及装置 |
CN108762833A (zh) * | 2018-05-16 | 2018-11-06 | 北京安云世纪科技有限公司 | 安卓系统中的应用启动方法和装置 |
CN110377523A (zh) * | 2019-07-24 | 2019-10-25 | 网易(杭州)网络有限公司 | 程序调试方法及装置、电子设备和存储介质 |
CN111124545A (zh) * | 2019-12-25 | 2020-05-08 | 北京奇艺世纪科技有限公司 | 应用程序启动方法、装置、电子设备及存储介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113885967A (zh) * | 2021-10-22 | 2022-01-04 | 北京字跳网络技术有限公司 | 一种小程序的启动方法、装置、设备及介质 |
CN113885967B (zh) * | 2021-10-22 | 2024-02-13 | 北京字跳网络技术有限公司 | 一种小程序的启动方法、装置、设备及介质 |
CN114489850A (zh) * | 2022-01-20 | 2022-05-13 | 中广核工程有限公司 | 一种设计软件的调用方法、装置、计算机设备及存储介质 |
CN114489850B (zh) * | 2022-01-20 | 2023-08-22 | 中广核工程有限公司 | 一种设计软件的调用方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111949328B (zh) | 2023-10-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8762962B2 (en) | Methods and apparatus for automatic translation of a computer program language code | |
CN107861713B (zh) | 数据调用方法、装置及计算机可读存储介质 | |
CN108549538B (zh) | 一种代码检测方法、装置、存储介质及测试终端 | |
US11720344B2 (en) | Code hot-update method and device, storage medium, processor, and terminal | |
CN105335137A (zh) | 用于处理源文件的方法和装置 | |
CN106796525B (zh) | 按需加载动态脚本语言代码以减少内存使用 | |
CN111949328B (zh) | 一种启动加速方法、装置、计算机设备及存储介质 | |
CN102200911A (zh) | 变量闭包 | |
CN104375875A (zh) | 用于应用程序的编译优化的方法以及编译器 | |
CN110058861B (zh) | 源码处理方法及装置、存储介质、电子设备 | |
CN109725896A (zh) | 一种在线编辑python代码的方法以及电子设备 | |
CN113076167A (zh) | 一种代码处理方法及相关设备 | |
CN114327477A (zh) | 智能合约执行方法、装置、电子装置和存储介质 | |
JP2021002326A (ja) | ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 | |
CN116955720A (zh) | 数据处理方法、装置、设备、存储介质及计算机程序产品 | |
CN114780100A (zh) | 编译方法、电子设备及存储介质 | |
CN104794046A (zh) | 符号化程序运行日志的方法和系统 | |
CN104572454B (zh) | 一种定位资源的方法及装置 | |
CN113778897A (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN111596970B (zh) | 动态库延迟加载方法、装置、设备和存储介质 | |
CN112069052A (zh) | 一种异常对象检测方法、装置、设备及存储介质 | |
CN114942781A (zh) | 一种用于数据读取的数据格式适配方法及装置 | |
CN109947711A (zh) | 一种对ios项目开发过程中的多语言文件自动化管理方法 | |
CN111796832B (zh) | 热补丁文件生成方法、装置、设备及存储介质 | |
CN114064601B (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 |