CN113360215A - 程序运行方法、装置及计算机可读存储介质 - Google Patents

程序运行方法、装置及计算机可读存储介质 Download PDF

Info

Publication number
CN113360215A
CN113360215A CN202010146970.8A CN202010146970A CN113360215A CN 113360215 A CN113360215 A CN 113360215A CN 202010146970 A CN202010146970 A CN 202010146970A CN 113360215 A CN113360215 A CN 113360215A
Authority
CN
China
Prior art keywords
function
functions
frequency
program
sequence
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.)
Pending
Application number
CN202010146970.8A
Other languages
English (en)
Inventor
张凯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010146970.8A priority Critical patent/CN113360215A/zh
Publication of CN113360215A publication Critical patent/CN113360215A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Abstract

本申请实施例提供一种程序运行方法、装置及计算机可读存储介质,其中,方法包括:获取待运行程序对应的函数集合;确定所述函数集合中的每一函数在进行函数调用时对应的频次;根据每一函数的所述频次,确定出用于加载所述函数集合中的函数且具有连续内存的页内存;将所述函数集合中的函数,依次加载到所述页内存中;按照所述页内存的地址,依次调用所述页内存中的函数,以实现运行所述待运行程序。通过本申请,能够使得调用频次较高的函数,能够被加载到同一页内存或近邻的页内存中而降低程序运行过程中寄存器的指令跳转幅度,从而显著降低程序的启动内存,提高程序运行速率。

Description

程序运行方法、装置及计算机可读存储介质
技术领域
本申请实施例涉及互联网技术领域,涉及但不限于一种程序运行方法、装 置及计算机可读存储介质。
背景技术
随着产品给的需求越来越多,堆叠的功能也越来越复杂,整个应用的大小 也越来越大,而越来越多的功能则导致了越来越多的体验和性能问题,其中最 能直观影响用户的就是启动速度和加载速度。
目前,对启动速度和加载速度优化的方式,通常是减少不必要代码、懒加 载、利用多线程等来实现的,或者还可以采用二进制重排,将所有启动期间先 后执行的函数代码紧凑的排列在顺序的二进制中,使得寄存器的指令跳转幅度 大幅降低。
但是,目前的优化方式均是从代码加载速度和启动速度的角度优化,并不 能让单个物理页尽可能的加载更多的当前或下一条待执行的函数,因此无法进 一步提高程序的启动速度和加载速度。
发明内容
本申请实施例提供一种程序运行方法、装置及计算机可读存储介质,能够 在不涉及修改程序代码的前提下,完成程序的内存优化,可显著降低程序的启 动内存,提供程序的启动速度和加载速度。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种程序运行方法,包括:
获取待运行程序对应的函数集合;
确定所述函数集合中的每一函数在进行函数调用时对应的频次;
根据每一函数的所述频次,确定出用于加载所述函数集合中的函数且具有 连续内存的页内存;
将所述函数集合中的函数,依次加载到所述页内存中;
按照所述页内存的地址,依次调用所述页内存中的函数,以实现运行所述 待运行程序。
本申请实施例提供一种程序运行装置,包括:
获取模块,用于获取待运行程序对应的函数集合;
第一确定模块,用于确定所述函数集合中的每一函数在进行函数调用时对 应的频次;
第二确定模块,用于根据每一函数的所述频次,确定出用于加载所述函数 集合中的函数且具有连续内存的页内存;
加载模块,用于将所述函数集合中的函数,依次加载到所述页内存中;
调用模块,用于按照所述页内存的地址,依次调用所述页内存中的函数, 以实现运行所述待运行程序。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引 起处理器执行时,实现上述的方法。
本申请实施例具有以下有益效果:由于在运行待运行程序之前,确定待运 行程序对应的函数集合中的每一函数在进行函数调用时对应的频次;并根据每 一函数的所述频次,确定出用于加载所述函数集合中的函数且具有连续内存的 页内存,这样,可以使得调用频次较高的函数,能够被加载到同一页内存或近 邻的页内存中而降低程序运行过程中寄存器的指令跳转幅度,从而显著降低程 序的启动内存,提高程序运行速率。
附图说明
图1是相关技术中二进制代码文本的示意图;
图2A是本申请实施例提供的程序运行系统10的一个可选的架构示意图;
图2B是本申请实施例提供的程序运行系统10应用于区块链系统的一个可 选的结构示意图;
图2C是本申请实施例提供的区块结构的一个可选的示意图;
图3是本申请实施例提供的服务器的结构示意图;
图4是本申请实施例提供的程序运行方法的一个可选的流程示意图;
图5是本申请实施例提供的程序运行方法的一个可选的流程示意图;
图6是本申请实施例提供的程序运行方法的一个可选的流程示意图;
图7是本申请实施例提供的程序运行方法的一个可选的流程示意图;
图8是本申请实施例提供的获取函数符号链表的一个可选的流程示意图;
图9是本申请实施例提供的重排后的二进制内存布局图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申 请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普 通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本 申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集, 但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集, 并且可以在不冲突的情况下相互结合。除非另有定义,本申请实施例所使用的 所有的技术和科学术语与属于本申请实施例的技术领域的技术人员通常理解的 含义相同。本申请实施例所使用的术语只是为了描述本申请实施例的目的,不 是旨在限制本申请。
为了更好地理解本申请实施例中提供的程序运行方法,首先对相关技术中 的程序启动速度优化的方法进行说明:
相关技术中,对启动速度和加载速度优化的方式,通常是减少不必要代码、 懒加载、利用多线程等来实现的,或者还可以采用二进制重排,将所有启动期 间先后执行的函数代码紧凑的排列在顺序的二进制中,使得寄存器的指令跳转 幅度大幅降低。
对于减少不必要代码、懒加载、利用多线程等方法,主要是从减少主线程 任务的角度来出发,很难再做出大的提升。
对于二进制重排的方法,目的是将函数代码聚合在一起,即使得最经常执 行的代码或最需要关键执行的代码聚合在一起,形成一个紧凑的代码文本。经 过二进制重排后的二进制代码文本,其高频或关键代码排列会更紧凑,更利于 优化启动阶段,以及前后台切换或函数调用阶段的速度和内存占用。
对于二进制重排后的二进制代码文本,如果使得所有启动阶段顺序执行的 代码按照执行顺序排列在一起,那么整体出现页面错误(page faults)的频率和 次数会减少很多。如图1所示,是相关技术中二进制代码文本的示意图,如果 存在函数A、函数B、函数C和函数D的顺序调用过程,则由于函数A到D 均不在同一页内存(page)中,例如,图1中函数A在页内存76中,函数B 在页内存10中,函数C在页内存2中,函数D在页内存23中。因此,图1中的调用过程需要4次page faults,且均在非相邻页发生。那么4次page faults 就需要4次页中断,以及4次物理页内存的占用。假设程序里存在很多这样的 调用问题,那么就会频繁造成前后台切换或函数调用的碎片化,并且导致占用 的物理页内存更多而降低程序的运行速率。
由此可见,目前的优化方式均是从代码加载速度和启动速度的角度优化, 并不能让单个物理页尽可能的加载更多的当前或下一条待执行的函数,因此无 法进一步提高程序的启动速度和加载速度,因而无法有效的提高程序的运行速 率。
基于相关技术所存在的问题,本申请实施例提供一种程序运行方法,服务 器获取待运行程序对应的函数集合;确定函数集合中的每一函数在进行函数调 用时对应的频次;根据每一函数的所述频次,确定出用于加载函数集合中的函 数且具有连续内存的页内存;将函数集合中的函数,依次加载到页内存中;按 照页内存的地址,依次调用页内存中的函数,以实现运行待运行程序。如此, 由于在运行待运行程序之前,确定待运行程序对应的函数集合中的每一函数在 进行函数调用时对应的频次;并根据每一函数的频次,确定出用于加载函数集 合中的函数且具有连续内存的页内存,这样,可以使得调用频次较高的函数,能够被加载到同一页内存或近邻的页内存中,而降低程序运行过程中寄存器的 指令跳转幅度,从而显著降低程序的启动内存,提高程序运行速率。
下面说明本申请实施例提供的程序运行设备的示例性应用,本申请实施例 提供的程序运行设备可以实施为笔记本电脑,平板电脑,台式计算机,移动设 备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便 携式游戏设备)等各种类型的终端,也可以实施为服务器。下面,将说明程序 运行设备实施为服务器时的示例性应用。
参见图2A,图2A是本申请实施例提供的程序运行系统10的一个可选的 架构示意图。为实现支撑任意一个应用程序,程序运行系统10中包括至少一个 终端(图2A中示出了第一终端100-1和第二终端100-2),终端通过网络200 连接服务器300,其中,每一终端上均可以运行有应用程序,应用程序在前台 运行过程中可以正常退出也可以异常退出,第一终端100-1的当前界面110-1 上可以显示应用程序的用户界面(UI,User Interface),第二终端100-2的当前 界面110-2上也可以显示应用程序的UI界面。
这里以第一终端100-1为例,当用户在第一终端100-1上进行操作启动待 运行程序时,或者当待运行程序被安装于第一终端100-1上时,服务器300从 第一终端100-1获取待运行程序对应的函数集合;确定函数集合中的每一函数 在进行函数调用时对应的频次;根据每一函数的所述频次,确定出用于加载函 数集合中的函数且具有连续内存的页内存300-1;将函数集合中的函数,依次加 载到页内存300-1中;页内存300-1可以位于服务器300之上。当第一终端10 0-1上的待运行程序被启动运行时,第一终端100-1通过网络200,按照页内存 300-1的地址,依次调用页内存300-1中的函数,以实现运行待运行程序。
本申请实施例涉及的程序运行系统10也可以是区块链系统的分布式系统2 01,参见图2B,图2B是本申请实施例提供的程序运行系统10应用于区块链系 统的一个可选的结构示意图,其中,所述分布式系统201可以是由多个节点20 2(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端203 形成的分布式节点,节点之间形成组成的点对点(P2P,Peer To Peer)网络, P2P协议是一个运行在传输控制协议(TCP,TransmissionControl Protocol)协 议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入 而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
参见图2B示出的区块链系统中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录 实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数 据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记 录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:
2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即,将 当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后, 作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然, 钱包还支持查询电子货币地址中剩余的电子货币。
2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将 对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证 有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以 向发起操作的节点发送确认。
2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在 共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求 代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签 收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行 用于交易的合约,还可以执行对接收的信息进行处理的合约。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block), 新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点 提交的记录数据。
4)共识(Consensus),是区块链网络中的一个过程,用于在涉及的多个节 点之间对区块中的交易达成一致,达成一致的区块将被追加到区块链的尾部, 实现共识的机制包括工作量证明(PoW,Proof of Work)、权益证明(PoS,Pr oof of Stake)、股份授权证明(DPoS,Delegated Proof-of-Stake)、消逝时间量 证明(PoET,Proof of Elapsed Time)等。
参见图2C,图2C是本申请实施例提供的区块结构(Block Structure)的 一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的 哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外, 区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质 上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每 一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下 一个区块。
参见图3,图3是本申请实施例提供的服务器300的结构示意图,图3所 示的服务器300包括:至少一个处理器310、存储器350、至少一个网络接口3 20和用户接口330。服务器300中的各个组件通过总线系统340耦合在一起。 可理解,总线系统340用于实现这些组件之间的连接通信。总线系统340除包 括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚 说明起见,在图3中将各种总线都标为总线系统340。
处理器310可以是一种集成电路芯片,具有信号的处理能力,例如通用处 理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑 器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以 是微处理器或者任何常规的处理器等。
用户接口330包括使得能够呈现媒体内容的一个或多个输出装置331,包 括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口330还包括一个或 多个输入装置332,包括有助于用户输入的用户接口部件,比如键盘、鼠标、 麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器350可以是可移除的,不可移除的或其组合。示例性的硬件设备包 括固态存储器,硬盘驱动器,光盘驱动器等。存储器350可选地包括在物理位 置上远离处理器310的一个或多个存储设备。存储器350包括易失性存储器或 非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可 以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取 存储器(RAM,Random Access Memory)。本申请实施例描述的存储器350旨 在包括任意适合类型的存储器。在一些实施例中,存储器350能够存储数据以 支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集, 下面示例性说明。
操作系统351,包括用于处理各种基本系统服务和执行硬件相关任务的系 统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理 基于硬件的任务;
网络通信模块352,用于经由一个或多个(有线或无线)网络接口320到 达其他计算设备,示例性的网络接口320包括:蓝牙、无线相容性认证(WiFi)、 和通用串行总线(USB,Universal Serial Bus)等;
输入处理模块353,用于对一个或多个来自一个或多个输入装置332之一 的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的装置可以采用软件方式实现,图3 示出了存储在存储器350中的一种程序运行装置354,该程序运行装置354可 以是服务器300中的程序运行装置,其可以是程序和插件等形式的软件,包括 以下软件模块:获取模块3541、第一确定模块3542、第二确定模块3543、加 载模块3544和调用模块3545,这些模块是逻辑上的,因此根据所实现的功能 可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的装置可以采用硬件方式实现,作 为示例,本申请实施例提供的装置可以是采用硬件译码处理器形式的处理器, 其被编程以执行本申请实施例提供的程序运行方法,例如,硬件译码处理器形 式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specif ic Integrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic De vice)、复杂可编程逻辑器件(CPLD,ComplexProgrammable Logic Device)、 现场可编程门阵列(FPGA,Field-Programmable GateArray)或其他电子元件。
下面将结合本申请实施例提供的服务器300的示例性应用和实施,说明本 申请实施例提供的程序运行方法。参见图4,图4是本申请实施例提供的程序 运行方法的一个可选的流程示意图,将结合图4示出的步骤进行说明。
步骤S401,获取待运行程序对应的函数集合。
这里,函数集合中包括至少两个函数,待运行程序对应有多个函数,在运 行待运行程序时,通过依次调用每一函数,实现程序的运行。本申请实施例中, 在终端上安装所述待运行程序时即可获取待运行程序对应的函数集合。
步骤S402,确定函数集合中的每一函数在进行函数调用时对应的频次。
这里,每一函数在进行函数调用时可能会被多次调用,每一函数在进行函 数调用时对应的频次可以相同也可以不同。本申请实施例中,可以通过依次记 录函数的调用过程,确定每一函数被调用和调用其他函数分别对应的频次。
步骤S403,根据每一函数的所述频次,确定出用于加载函数集合中的函数 且具有连续内存的页内存。
这里,用于加载函数的页内存为物理内存,该页内存可以是服务器中用于 加载程序函数的内存,每一页内存具有一定的大小,可以加载一定数量的函数。 本申请实施例中,所确定出的页内存具有连续内存,且所述页内存能够使得函 数集合中的函数紧密的排列在一起,从而使得在进行函数调用的时候,尽量减 少跨页函数调用。
本申请实施例中,所确定出的页内存可以是一页也可以是多页,当页内存 包括多页时,多个页内存是连续的页内存。
步骤S404,将函数集合中的函数,依次加载到页内存中。
这里,在确定出页内存之后,将函数集合中的每一函数加载到页内存中, 使得函数集合中的函数在页内存中紧密排布。
步骤S405,按照页内存的地址,依次调用页内存中的函数,以实现运行待 运行程序。
这里,在运行待运行程序时,按照页内存的地址,依次调用页内存中的函 数,实现待运行程序的运行。
本申请实施例提供的程序运行方法,由于在运行待运行程序之前,确定待 运行程序对应的函数集合中的每一函数在进行函数调用时对应的频次;并根据 每一函数的所述频次,确定出用于加载所述函数集合中的函数且具有连续内存 的页内存,这样,可以使得调用频次较高的函数,能够被加载到同一页内存或 近邻的页内存中而降低程序运行过程中寄存器的指令跳转幅度,从而显著降低 程序的启动内存,提高程序运行速率。
图5是本申请实施例提供的程序运行方法的一个可选的流程示意图,如图 5所示,方法包括以下步骤:
步骤S501,获取待运行程序对应的函数集合。
步骤S502,确定函数集合中的每一函数在进行函数调用时对应的频次。
需要说明的是,步骤S501和步骤S502与上述步骤S401和步骤S402相同。
步骤S503,根据每一函数的所述频次,对函数集合中的函数进行排序,形 成函数序列。
这里,可以按照函数在进行函数调用时的频次由大到小的顺序,对函数集 合中的函数进行排序,形成函数序列,或者,也可以是按照函数在进行函数调 用时的频次由小到大的顺序,对函数集合中的函数进行排序,形成函数序列, 或者,也可以是按照其他的特定规律对函数集合中的函数进行排序,形成函数 序列。本申请实施例对进行排序的排序方式不做限定。
在一些实施例中,为了使得频次较高的函数能够被集中在特定的页内存中, 因此也可以根据函数的频次,将具有特定频次的函数集中排列在函数序列的特 定位置。例如,函数序列可以包括前半部分和后半部分两部分,其中,在函数 序列的前半部分,函数按照频次由小到大的顺序排列,在函数序列的后半部分, 函数按照频次由大到小的顺序排列。
步骤S504,根据函数序列,对用于加载函数的页内存进行调整,形成具有 连续内存的页内存。
这里,对页内存进行调整是指按照函数序列中函数的排列顺序,依次将函 数连续紧密的加载到页内存中,从而使得加载函数的页内存被完全有效的利用, 而不再出现函数在页内存中随机加载的现象。
步骤S505,按照函数序列中函数的排列顺序,将函数依次加载到页内存中。
这里,按照函数序列中函数的排列顺序,将函数依次加载到页内存中,是 按照页内存中的连续地址进行函数加载,从而保证函数在页内存中紧密排列, 进而使得所占用的页内存的数量最小。
步骤S506,按照页内存的地址,依次调用页内存中的函数,以实现运行待 运行程序。
本申请实施例提供的程序运行方法,由于根据每一函数的所述频次,对函 数集合中的函数进行排序,形成函数序列,这样,可以将调用频次较高或者具 有特定调用频次的函数,排列在函数序列中的特定位置或者紧密排列在一起, 而频次较高的函数被调用或调用其他函数的频率也较高,如此能够保证函数被 加载到页内存中,后续程序运行时进行函数调用时,能够极大的减小函数调用 时的跨页调用,从而减小出现page faults的次数,提高程序运行速率。
在一些实施例中,上述频次包括函数的第一调用频次和第一被调用频次; 基于图5,图6是本申请实施例提供的程序运行方法的一个可选的流程示意图, 如图6所示,步骤S503可以通过以下步骤实现:
步骤S601,将第一调用频次大于第一阈值且第一被调用频次大于第二阈值 的函数,确定为高频函数。
这里,高频函数是指具有较高调用频次且具有较高被调用频次的函数。第 一阈值和第二阈值可以根据实际函数调用关系确定。
步骤S602,按照高频函数在待运行程序中对应的调用顺序,对高频函数进 行排序,形成高频函数序列。
这里,在筛选出高频函数之后,需要对高频函数进行排序,可以是按照高 频函数在待运行程序中被调用的先后顺序进行排序,形成高频函数序列。
步骤S603,将除了高频函数之外的其他函数,按照在待运行程序中对应的 调用顺序,依次排列至高频函数序列的头部或尾部,形成函数序列。
这里,在完成高频函数的排序之后,对除了高频函数之外的其他函数再进 行排序。在实现的过程中,可以是将其他函数按照在待运行程序中被调用的先 后顺序,排列于高频函数序列之前或之后,形成最终的函数序列。如此,能够 保证高频函数位于整个函数序列的中间位置,从而保证高频函数在调用其他函 数或者被其他函数调用时,与其他函数之间的指令跳转幅度最小,即调用距离 最小,从而进一步减小出现page faults的次数,且跨页调用时的页间跳转幅度 最小,提高程序运行速率。
在一些实施例中,每一函数对应一调用函数对和被调用函数对,其中,函 数调用函数对是指该函数与其他的与自身存在调用关系的另一函数所形成的函 数对,例如,函数A调用函数B,函数A被函数C调用,那么,对于函数A 来说,调用函数对中包括A和B,例如可以表示为(A->B),被调用函数对中 包括A和C,例如可以表示为(A<-C)。
基于上述调用函数对和被调用函数对的关系,本申请实施例再提供一种程 序运行方法,请继续参照图6,步骤S503还可以通过以下步骤实现:
步骤S604,确定每一函数对应的调用函数对和被调用函数对。
这里,上述频次包括:调用函数对所对应的第二调用频次、和被调用函数 对所对应的第二被调用频次。
步骤S605,根据第二调用频次确定调用函数对的第一权重。
这里,当第二调用频次较高时,对应的第一权重较高,当第二调用频次较 低时,对应的第一权重较低。
步骤S606,根据第二被调用频次确定被调用函数对的第二权重。
这里,当第二被调用频次较高时,对应的第二权重较高,当第二被调用频 次较低时,对应的第二权重较低。
步骤S607,根据第一权重和第二权重,对函数集合中的函数进行排序,形 成函数序列。
在一些实施例中,步骤S607可以通过以下步骤实现:
步骤S6071,对每一函数的所述第一权重和所述第二权重,按照第一预设 比例进行加权求和,得到对应函数的综合权重。
这里,按照每一函数的调用函数对和被调用函数对在整个待运行程序中的 重要程度,确定第一权重和第二权重各自的比重,然后根据第一权重和第二权 重各自的比重,对第一权重和第二权重加权求和,得到该函数的综合权重。
步骤S6072,按照综合权重由高到低的顺序对函数集合中的函数进行排序, 形成函数序列。
图7是本申请实施例提供的程序运行方法的一个可选的流程示意图,如图 7所示,步骤S6072可以通过以下步骤实现:
步骤S701,对函数集合中综合权重最高的两个函数进行合并处理,得到函 数结点。
这里,可以根据综合权重递减的方式,依次合并综合权重最高的两个函数, 形成函数结点。
步骤S702,确定函数结点的综合权重。
在一些实施例中,步骤S702可以通过以下步骤实现:
步骤S7021,确定所述函数集合中位于所述函数结点之前且与所述函数结 点相邻的函数为第一函数,位于所述函数结点之后且与所述函数结点相邻的函 数为第二函数。
步骤S7022,将所述第一函数到所述函数结点中的函数的权重之和确定为 第一权重和。
步骤S7023,将所述函数结点中的函数到所述第二函数的权重之和确定为 第二权重和。
步骤S7024,对所述第一权重和和所述第二权重和,按照第二预设比例进 行加权求和,得到所述函数结点的综合权重。
上述步骤S7021至步骤S7024,将函数结点相邻的前后两个函数与函数结 点之间的权重之和加权求和,得到函数结点的综合权重。
步骤S703,将函数结点作为函数集合中的函数,以替换函数集合中进行合 并处理的两个函数。
这里,当确定出函数结点之后,将函数结点置于函数集合中。举例来说, 函数集合{A,B,C}中包括三个函数A、B和C,其中函数A和B形成函数结 点(A,B),因此,函数结点(A,B)替换函数集合{A,B,C}中的函数A和 B,形成函数集合{(A,B),C}。
步骤S704,循环合并处理步骤,直至完成对函数集合中的全部函数的排序, 形成函数序列。
这里,在合并综合权重最高的两个函数之后,由于确定了函数结点的综合 权重,因此,将函数结点作为函数集合中的一个新的函数,与其他未进行合并 的函数一起形成新的函数集合,并对新的函数集合重新进行合并处理。也就是 说,在新的函数集合中,再次执行函数合并处理步骤,直至完成对函数集合中 的全部函数的排序,形成函数序列。
在一些实施例中,在运行待运行程序之前,还可以先获取待运行程序对应 的函数符号链表,然后基于所获取的函数符号链表获取函数集合,并实现本申 请实施例的程序运行方法。基于图4,图8是本申请实施例提供的获取函数符 号链表的一个可选的流程示意图,如图8所示,方法包括以下步骤:
步骤S801,采用编译插桩方式或者在待运行程序运行时插桩方式,获取待 运行程序运行时所调用的每一函数的函数符号。
步骤S802,按照函数被调用的先后顺序,依次记录函数符号,形成函数符 号链表。
这里,所述函数符号链表中包括所述待运行程序运行时所调用的每一函数 的函数符号。
请继续参照图8,在一些实施例中,还可通过以下步骤获取函数符号链表:
步骤S803,确定与待运行程序对应的业务集合,业务集合中的每一业务对 应一代码段,每一代码段包括至少一个函数。
所述业务集合中至少包括以下业务:启动业务、前后台切换业务、高频业 务和核心业务。
步骤S804,按照业务集合中的业务被实现的先后顺序,对对应代码段进行 排序,得到代码段序列。
这里,每一代码段包括至少一个函数,每一代码段用于实现上述业务集合 中的一个业务。
在一些实施例中,步骤S804还可以通过以下步骤实现:
步骤S8041,确定所述启动业务、所述前后台切换业务、所述高频业务和 所述核心业务被实现的先后顺序,得到业务顺序列表。
步骤S8042,按照所述业务顺序列表中的业务排序,对与所述业务顺序列 表对应的代码段进行排序,形成所述代码段序列。
举例来说,业务集合中包括启动业务、前后台切换业务、高频业务A和B、 核心业务,其中,业务顺序列表为:启动业务、高频业务A、核心业务、高频 业务B、前后台切换业务。那么,按照业务顺序列表中的业务的先后顺序,对 对应的代码段进行排序,形成代码段序列为:启动业务代码段、高频业务A代 码段、核心业务代码段、高频业务B代码段、前后台切换业务代码段。
步骤S805,对代码段序列中的每一代码段的函数的函数符号进行排序,形 成函数符号链表。
这里,由于每一代码段中包括至少一个函数,因此,对于每一代码段内部 的函数符号再进行排序,形成最终的函数符号链表,函数符号链表中包括待运 行程序中的每一函数的函数符号。
对应地,步骤S401可以通过以下步骤实现:
步骤S806,根据函数符号链表获取待运行程序对应的函数集合。
步骤S402可以通过以下步骤实现:
步骤S807,根据函数符号链表中每一函数的函数符号出现的次数,确定对 应函数的频次。
这里,可以遍历函数符号链表,当某一函数的函数符号出现时,该函数的 函数符号对应的次数加一,直至遍历完整个函数符号链表。本申请实施例中, 可以将函数符号在函数符号链表中出现的次数确定为对应函数的频次,例如, 当函数符号K在函数符号链表中出现的次数为10次时,则函数符号K对应的 函数K1的频次为10。
本申请实施例提供的程序运行方法,获取待运行程序运行时所调用的每一 函数的函数符号,形成函数符号链表,在后续的排序过程中,基于函数符号链 表进行函数频次的确定,并基于所确定的频次对函数进行排序。如此,由于函 数符号链表中包含有每一被调用的函数,且是按照函数调用的先后顺序形成, 因此,能够准确的确定出每一函数的频次,从而对待运行程序中的函数进行合 理有序的排列,使得加载到内存页中的函数之间排列的更加紧凑,进而能够进 一步减小出现page faults的次数,且跨页调用时的页间跳转幅度最小,提高了 程序运行速率。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
本申请实施例提供一种程序运行方法,通过代码段重排将程序启动,前后 台切换以及关键核心或高频率执行的代码按照一定的顺序紧凑排列,来减少加 载或恢复代码段时所需的物理内存,从而降低整体内存占用。
本申请实施例中,将代码段(二进制)重排应用于移动应用的内存优化上, 结合系统的运行时特性和存储到内存映射文件(mmap)的技术特点,来针对性 的优化应用的启动内存和应用前后台切换以及高配代码执行的内存。本申请实 施例的方法能较为显著的降低应用的启动内存,也可以较好的降低应用的高配 代码执行所占用的物理内存,从而为应用的稳定性提供更好的支持。
本申请实施例的方案是基于mmap加载代码段和物理页内存大小的限制来 实现的。在操作系统上应用的执行是基于动态链接器(dyld,dynamic link edi tor)引导加载的,dyld引导加载过程中会采取mmap的方式来将对应的代码段 数据加载到物理内存中。程序执行时,会不断调整寄存器的值来跳转到不同的 虚拟地址中,当对应虚拟地址的物理内存不存在时,则会触发page fault,由内 存管理单元(MMU,Memory Management Unit)将数据加载到物理内存中, 再建立好虚拟地址和物理内存的映射关系。
通过减少page faults次数,来减少对应的物理页内存占用,使得一次物理 页内存能加载更多当前即将执行所待执行的代码,从而减少运行时的代码段常 驻内存占用。通过适当的代码段内存布局调整,如启动时按执行顺序来排列代 码,能够做到应用启动时代码段内存最优。
图9是本申请实施例提供的重排后的二进制内存布局图,如图9所示,函 数A、B、C和D按照执行顺序紧凑排列在一起,且尽可能凑在一页或者相邻 页。因为如果函数A、B、C和D随机排列的话,则可能会出现4个函数分属 于4个页内存,从而导致总共占用至少4个页内存,而如果使得他们按照图9 来顺序紧凑排列,则最优的情况下只需要占用1个页内存,提升空间明显。
本申请实施例中,一次page fault会触发加载一次物理页内存,由于硬件 限制,在不同处理器架构上一个物理页的大小也不一致,例如,有些处理器上 物理页大小是4kb,那么一次page fault会触发加载接连的4kb内存;有些处理 器上物理页大小是16kb,那么一次page fault会触发加载接连的16kb内存。本 申请就是充分利用一次page fault加载的4kb或16kb物理内存来达到执行同样 的代码包括函数调用,但总的page faults次数更低,所需的物理页内存更低。
本申请实施例的方法包括以下步骤:
步骤S11,基于编译插桩,将运行时执行的函数符号,包括扩充C的面向 对象编程语言(objc,Objective-C)、c、c++函数符号按照执行顺序保存记录下 来,形成一个符号记录,加入到单向链表。
步骤S12,每个符号记录包括当前的被调用的函数符号(记为callee),以 及上层调用者的函数符号(记为caller),并记录caller到callee的调用次数;当caller到callee的调用触发1次,则权重计数加1,以此类推。
步骤S13,针对步骤S11和步骤S12形成了一个加权调用图,对这个加权 调用图进行重组,排序,使得整体平均顺序访问寄存器所需的移动距离最小, 由此得到了一个新的有序序列。
本申请实施例中,步骤S13可以通过以下步骤实现:
步骤S131,针对步骤S11和步骤S12得到的加权函数调用有向图,根据权 重递减的策略,依次合并权重最高的2个结点。
举例来说,函数A到函数B的权重为50,函数A到函数C的权重为20, 函数B到函数C的权重为15,函数C到函数D的权重为40;则按照权重递减 的策略,先合并函数A到函数B,得到新的合并结点集合(函数A,函数B), 集合(函数A,函数B)在到其原先相邻结点的权重为各自到该相邻结点的权 重之和。此时剩余3个结点(函数A,函数B)、函数C、函数D;这时权重最 高的是函数C到函数D,因此再合并函数C和函数D,得到新结点(函数C, 函数D);最后剩余2个结点(函数A,函数B)与(函数C,函数D)。
步骤S132,重复上述步骤S131,依次合并权重高的结点,并确保最后得 到的有序序列里也是按照权重递减的策略来排列。
步骤S133,多次重复步骤S131到步骤S132的求解策略,找到多个解,并 最终取出一个整体最优的解,作为最终的有序序列,来进行二进制重排。
步骤S14,针对以上步骤S13得到的有序序列符号表,交给链接器,来生 成一个有序排列的二进制代码段,从而达到代码段内存优化。
本申请实施例提供的方法,基于代码执行顺序权重来记录得到有向图,可 结合按照不同的代码执行时机:启动、前后台切换、高频业务、核心业务这4 个场景来划分,并最终按照原有逻辑的运行时执行顺序来组装所有的符号,从 而形成一个较优的二进制排列,来达到运行时代码段占用的物理内存更优、更 低。使得尽可能少的出现访问一个高频函数时,其距离当前PC的距离过远, 而导致随机访问效率低下,触发较多page fault和IO加载。
本申请实施例的方法具有以下有益效果:可以在不涉及修改应用或代码的 前提下,完成应用的内存优化,可显著降低应用的启动内存,也可以显著降低 应用前后台切换时的代码段内存增量。并且,能够帮助应用优化前台内存闪退 问题,降低用户遇到内存闪退的概率。
本申请实施例提出的基于二进制重排利用page fault单词物理页内存加载 大小限制的特性,来优化应用内存占用的方式。在有限的page fault内尽可能 的加载更多的当前即将或执行的高频代码,从而缓解由于代码段随机排列导致 的无用代码被频繁加载到活跃页内存的问题,从而也整体的降低了应用的启动 内存或运行时代码段物理内存。
下面继续说明本申请实施例提供的程序运行装置354实施为软件模块的示 例性结构,在一些实施例中,如图3所示,存储在存储器350的程序运行装置 354中的软件模块可以是服务器300中的程序运行装置,包括:
获取模块3541,用于获取待运行程序对应的函数集合;第一确定模块354 2,用于确定所述函数集合中的每一函数在进行函数调用时对应的频次;第二确 定模块3543,用于根据每一函数的所述频次,确定出用于加载所述函数集合中 的函数且具有连续内存的页内存;加载模块3544,用于将所述函数集合中的函 数,依次加载到所述页内存中;调用模块3545,用于按照所述页内存的地址, 依次调用所述页内存中的函数,以实现运行所述待运行程序。
在一些实施例中,所述第二确定模块还用于:根据每一函数的所述频次, 对所述函数集合中的函数进行排序,形成函数序列;根据所述函数序列,对用 于加载所述函数的页内存进行调整,形成具有连续内存的页内存。
在一些实施例中,所述频次包括函数的第一调用频次和第一被调用频次;
所述第二确定模块还用于:将所述第一调用频次大于第一阈值且所述第一 被调用频次大于第二阈值的函数,确定为高频函数;按照所述高频函数在所述 待运行程序中对应的调用顺序,对所述高频函数进行排序,形成高频函数序列; 将除了所述高频函数之外的其他函数,按照在所述待运行程序中对应的调用顺 序,依次排列至所述高频函数序列的头部或尾部,形成所述函数序列。
在一些实施例中,所述第二确定模块还用于:确定每一函数对应的调用函 数对和被调用函数对;其中,所述频次包括:所述调用函数对所对应的第二调 用频次、和所述被调用函数对所对应的第二被调用频次;根据所述第二调用频 次确定所述调用函数对的第一权重;根据所述第二被调用频次确定所述被调用 函数对的第二权重;根据所述第一权重和所述第二权重,对所述函数集合中的 函数进行排序,形成所述函数序列。
在一些实施例中,所述第二确定模块还用于:对每一函数的所述第一权重 和所述第二权重,按照第一预设比例进行加权求和,得到对应函数的综合权重; 按照所述综合权重由高到低的顺序对所述函数集合中的函数进行排序,形成所 述函数序列。
在一些实施例中,所述第二确定模块还用于:对所述函数集合中所述综合 权重最高的两个函数进行合并处理,得到函数结点;确定所述函数结点的综合 权重;将所述函数结点作为所述函数集合中的函数,以替换所述函数集合中进 行合并处理的两个函数;循环所述合并处理步骤,直至完成对所述函数集合中 的全部函数的排序,形成所述函数序列。
在一些实施例中,所述第二确定模块还用于:确定所述函数集合中位于所 述函数结点之前且与所述函数结点相邻的函数为第一函数,位于所述函数结点 之后且与所述函数结点相邻的函数为第二函数;将所述第一函数到所述函数结 点中的函数的权重之和确定为第一权重和;将所述函数结点中的函数到所述第 二函数的权重之和确定为第二权重和;对所述第一权重和和所述第二权重和, 按照第二预设比例进行加权求和,得到所述函数结点的综合权重。
在一些实施例中,所述装置还包括:函数符号获取模块,用于采用编译插 桩方式或者在所述待运行程序运行时插桩方式,获取所述待运行程序运行时所 调用的每一函数的函数符号;记录模块,用于按照所述函数被调用的先后顺序, 依次记录所述函数符号,形成所述函数符号链表;对应地;所述获取模块还用 于:根据所述函数符号链表获取所述待运行程序对应的函数集合。
需要说明的是,本申请实施例装置的描述,与上述方法实施例的描述是类 似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本装置实施例 中未披露的技术细节,请参照本申请方法实施例的描述而理解。
本申请实施例提供一种存储有可执行指令的存储介质,其中存储有可执行 指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的 方法,例如,如图4示出的方法。
在一些实施例中,存储介质可以是计算机可读存储介质,例如,铁电存储 器(FRAM,Ferromagnetic Random Access Memory)、只读存储器(ROM,R ead Only Memory)、可编程只读存储器(PROM,Programmable Read Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read Only Memory)、带电可擦可编程只读存储器(EEPROM,Electrically Erasable Programmable Read Only Memory)、闪存、磁表面存储器、光盘、或光盘只读 存储器(CD-ROM,Compact Disk-Read Only Memory)等存储器;也可以是 包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代 码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程 性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被 部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被 存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(H TML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专 用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一 个或多个模块、子程序或代码部分的文件)中。作为示例,可执行指令可被部 署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又 或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。 凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在 本申请的保护范围之内。

Claims (10)

1.一种程序运行方法,其特征在于,包括:
获取待运行程序对应的函数集合;
确定所述函数集合中的每一函数在进行函数调用时对应的频次;
根据每一函数的所述频次,确定出用于加载所述函数集合中的函数且具有连续内存的页内存;
将所述函数集合中的函数,依次加载到所述页内存中;
按照所述页内存的地址,依次调用所述页内存中的函数,以实现运行所述待运行程序。
2.根据权利要求1所述的方法,其特征在于,所述根据每一函数的所述频次,确定出用于加载所述函数集合中的函数且具有连续内存的页内存,包括:
根据每一函数的所述频次,对所述函数集合中的函数进行排序,形成函数序列;
根据所述函数序列,对用于加载所述函数的页内存进行调整,形成具有连续内存的页内存。
3.根据权利要求2所述的方法,其特征在于,所述频次包括函数的第一调用频次和第一被调用频次;
所述根据每一函数的所述频次,对所述函数集合中的函数进行排序,形成函数序列,包括:
将所述第一调用频次大于第一阈值且所述第一被调用频次大于第二阈值的函数,确定为高频函数;
按照所述高频函数在所述待运行程序中对应的调用顺序,对所述高频函数进行排序,形成高频函数序列;
将除了所述高频函数之外的其他函数,按照在所述待运行程序中对应的调用顺序,依次排列至所述高频函数序列的头部或尾部,形成所述函数序列。
4.根据权利要求2所述的方法,其特征在于,所述根据每一函数的所述频次,对所述函数集合中的函数进行排序,形成函数序列,包括:
确定每一函数对应的调用函数对和被调用函数对;其中,所述频次包括:所述调用函数对所对应的第二调用频次、和所述被调用函数对所对应的第二被调用频次;
根据所述第二调用频次确定所述调用函数对的第一权重;
根据所述第二被调用频次确定所述被调用函数对的第二权重;
根据所述第一权重和所述第二权重,对所述函数集合中的函数进行排序,形成所述函数序列。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第一权重和所述第二权重,对所述函数集合中的函数进行排序,形成所述函数序列,包括:
对每一函数的所述第一权重和所述第二权重,按照第一预设比例进行加权求和,得到对应函数的综合权重;
按照所述综合权重由高到低的顺序对所述函数集合中的函数进行排序,形成所述函数序列。
6.根据权利要求5所述的方法,其特征在于,所述按照所述综合权重由高到低的顺序对所述函数集合中的函数进行排序,形成所述函数序列,包括:
对所述函数集合中所述综合权重最高的两个函数进行合并处理,得到函数结点;
确定所述函数结点的综合权重;
将所述函数结点作为所述函数集合中的函数,以替换所述函数集合中进行合并处理的两个函数;
循环所述合并处理步骤,直至完成对所述函数集合中的全部函数的排序,形成所述函数序列。
7.根据权利要求6所述的方法,其特征在于,所述确定所述函数结点的综合权重,包括:
确定所述函数集合中位于所述函数结点之前且与所述函数结点相邻的函数为第一函数,位于所述函数结点之后且与所述函数结点相邻的函数为第二函数;
将所述第一函数到所述函数结点中的函数的权重之和确定为第一权重和;
将所述函数结点中的函数到所述第二函数的权重之和确定为第二权重和;
对所述第一权重和和所述第二权重和,按照第二预设比例进行加权求和,得到所述函数结点的综合权重。
8.根据权利要求1至7任一项所述的方法,其特征在于,所述方法还包括:
采用编译插桩方式或者在所述待运行程序运行时插桩方式,获取所述待运行程序运行时所调用的每一函数的函数符号;
按照所述函数被调用的先后顺序,依次记录所述函数符号,形成所述函数符号链表;
对应地;所述获取待运行程序对应的函数集合,包括:根据所述函数符号链表获取所述待运行程序对应的函数集合。
9.一种程序运行装置,其特征在于,包括:
获取模块,用于获取待运行程序对应的函数集合;
第一确定模块,用于确定所述函数集合中的每一函数在进行函数调用时对应的频次;
第二确定模块,用于根据每一函数的所述频次,确定出用于加载所述函数集合中的函数且具有连续内存的页内存;
加载模块,用于将所述函数集合中的函数,依次加载到所述页内存中;
调用模块,用于按照所述页内存的地址,依次调用所述页内存中的函数,以实现运行所述待运行程序。
10.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于引起处理器执行时,实现权利要求1至8任一项所述的方法。
CN202010146970.8A 2020-03-05 2020-03-05 程序运行方法、装置及计算机可读存储介质 Pending CN113360215A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010146970.8A CN113360215A (zh) 2020-03-05 2020-03-05 程序运行方法、装置及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010146970.8A CN113360215A (zh) 2020-03-05 2020-03-05 程序运行方法、装置及计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN113360215A true CN113360215A (zh) 2021-09-07

Family

ID=77523795

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010146970.8A Pending CN113360215A (zh) 2020-03-05 2020-03-05 程序运行方法、装置及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN113360215A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113885966A (zh) * 2021-10-22 2022-01-04 广州九尾信息科技有限公司 一种基于二进制重排的苹果应用启动优化方法
CN114168224A (zh) * 2021-12-06 2022-03-11 杭州筑龙信息技术股份有限公司 应用程序的启动方法、装置、电子设备及存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113885966A (zh) * 2021-10-22 2022-01-04 广州九尾信息科技有限公司 一种基于二进制重排的苹果应用启动优化方法
CN114168224A (zh) * 2021-12-06 2022-03-11 杭州筑龙信息技术股份有限公司 应用程序的启动方法、装置、电子设备及存储介质
CN114168224B (zh) * 2021-12-06 2024-02-20 杭州筑龙信息技术股份有限公司 应用程序的启动方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN108200203B (zh) 基于双层网络的区块链系统
CN111967849A (zh) 一种任务处理流程编排方法、装置及电子设备
US20180285401A1 (en) Systems and methods for performing data processing operations using variable level parallelism
CN105760192A (zh) 系统服务端业务模块的注册方法及装置
CN111444192B (zh) 块链式账本中全局状态的哈希的生成方法、装置及设备
US11487736B2 (en) Blockchain transaction processing systems and methods
CN113360215A (zh) 程序运行方法、装置及计算机可读存储介质
CN111367895B (zh) 数据迁移方法及装置
JP2019509567A (ja) アプリケーション(app)のためのリソースロード方法、サービス機能実施方法及び装置
CN104408178A (zh) Web控件加载装置和方法
CN110673851A (zh) 一种智能合约运行方法、装置及电子设备
CN111951112A (zh) 基于区块链的智能合约执行方法、终端设备和存储介质
Matsuzaki Functional models of hadoop mapreduce with application to scan
CN114661826A (zh) 基于区块链的数据处理方法、装置及设备
CN114356768A (zh) 通过占位符减少交易读写冲突的方法与装置
CN114238934A (zh) 一种设备信息获取方法、装置、设备及介质
CN113448960A (zh) 一种导入表格文件的方法和装置
US20160274799A1 (en) Increase memory scalability using table-specific memory cleanup
US10277690B2 (en) Configuration-driven sign-up
CN112702421B (zh) 文件同步方法、装置、电子设备及存储介质
CN109657179A (zh) 一种业务处理方法、系统及存储介质
CN113741868B (zh) 业务计算任务处理方法、装置、计算机设备和存储介质
CN108053336A (zh) 可定制领域服务方法及装置
CN111414162B (zh) 一种数据处理方法、装置及其设备
CN116028538A (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