程序编译方法、装置、电子设备及可读存储介质与流程

未命名 07-23 阅读:88 评论:0
1.本技术属于程序编译
技术领域
:,具体涉及一种程序编译方法、装置、电子设备及可读存储介质。
背景技术
::2.随着电子技术的不断发展,电子设备越来越多的应用于人们的生活和工作中,主要应用于电子设备的安卓(android)系统也得到了快速的推广。在相关技术中,安卓系统通常在系统环境发生变化(如系统升级)后采用提前编译(aheadoftime,aot)的方式,对电子设备安装的所有应用程序进行编译。然后,在每次运行应用程序时采用即时编译(justintime,jit)的方式对应用程序进行动态编译。3.然而,在安卓系统升级后的系统启动过程中,需要逐一对每个应用程序进行aot编译,从而导致系统启动过程持续时间过长。技术实现要素:4.本技术实施例的目的是提供一种程序编译方法、装置、电子设备及可读存储介质,能够解决电子设备进行aot时间过长的问题。5.第一方面,本技术实施例提供了一种程序编译方法,该程序编译方法包括:将第一即时编译jit生成的本地代码保存为第一jit编译文件,该第一jit为对第一程序中第一执行方法的即时编译;在第一程序的提前编译aot过程中,将第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件。6.第二方面,本技术实施例提供了一种程序编译装置,该程序编译装置包括:存储模块和处理模块;该存储模块,用于将第一即时编译jit生成的本地代码保存为第一jit编译文件,该第一jit为对第一程序中第一执行方法的即时编译;该处理模块,用于在第一程序的提前编译aot过程中,将第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件。7.第三方面,本技术实施例提供了一种电子设备,该电子设备包括处理器和存储器,所述存储器存储可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的方法的步骤。8.第四方面,本技术实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的方法的步骤。9.第五方面,本技术实施例提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现如第一方面所述的方法。10.第六方面,本技术实施例提供一种计算机程序产品,该程序产品被存储在存储介质中,该程序产品被至少一个处理器执行以实现如第一方面所述的方法。11.在本技术实施例中,电子设备可以将jit生成的本地代码保存为第一jit编译文件,从而电子设备可以在第一程序的提前编译aot过程中,将第一jit编译文件合并至aot编译的本地代码中,进而得到目标aot编译文件。由于电子设备可以提前保存第一jit编译文件,并且可以将第一jit编译文件合并至aot编译的本地代码中,如此,电子设备在对第一程序进行提前编译aot的过程中,可以复用第一jit编译文件,从而减少电子设备进行aot编译的时长,避免用户在aot编译未结束前使用应用程序由于占用系统资源造成的卡顿,提升了电子设备中的资源的利用率。附图说明12.图1是本技术实施例提供的一种程序编译方法的流程图之一;13.图2是本技术实施例提供的一种程序编译方法的流程图之二;14.图3是本技术实施例提供的一种程序编译方法的流程图之三;15.图4是本技术实施例提供的一种程序编译方法的流程图之四;16.图5是本技术实施例提供的一种程序编译装置的结构示意图;17.图6是本技术实施例提供的一种电子设备的硬件结构示意图之一;18.图7是本技术实施例提供的一种电子设备的硬件结构示意图之二。具体实施方式19.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员获得的所有其他实施例,都属于本技术保护的范围。20.本技术的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。21.下面对本技术实施例涉及的一些专业术语进行解释说明。22.odex:odex是安卓系统上的应用程序的android应用程序包(androidapplicationpackage,apk)中提取出来的可运行文件,即将apk中的classes.dex文件通过dex优化过程将其优化生成一个odex文件单独存放,原apk文件中的classes.dex文件可以保留,也可以删除。23.oat:安卓运行环境(androidruntime,art)的核心是oat文件,oat文件是一种android私有的文件可执行与可链接格式(executableandlinkableformat,elf),它不仅包含有从dex文件翻译而来的本地机器指令,还包含有原来的dex文件内容。如此,电子设备无需重新编译原有的apk就可以让它正常地在art里运行。24.提前编译(aheadoftime,aot):应用程序运行前,直接把java的源码文件(.java)编译成本地机器码的过程。25.即时编译(justintime,jit):通过java虚拟机内置的即时编译器(justintimecompiler);在应用程序运行时,把class文件中的字节码编译成本地机器码的过程。26.下面结合附图,通过具体的实施例及其应用场景对本技术实施例提供的程序编译方法、装置、电子设备及可读存储介质进行详细地说明。27.目前,随着电子设备的发展,电子设备中的应用程序也越来越多,通常电子设备可以使用java语言作为应用程序的开发语言,电子设备可以将由java语言编写的应用程序编译成字节码并打包到dex文件中。从而电子设备可以通过art对dex文件中的字节码进行解释执行。由于art解释执行dex文件中的字节码的效率较低,因此,现有技术中,电子设备通常可以通过aot+jit的方式对dex文件的字节码进行优化编译,将字节码转化为电子设备可以识别的二进制机器码,从而提升java代码在电子设备中的执行效率。28.然而,针对aot,aot的执行时机通常是在电子设备系统发生变化的时候(例如,系统升级、电子设备开机或电子设备空闲(空闲指电子设备处于锁屏充电状态)),但由于电子设备中的单个应用程序的代码量越来越大,而且电子设备中存在的应用程序的数量也越来越多,因此,导致电子设备中的可用资源越来越少(例如内存),所以aot编译往往需要耗费较长的时间,而且编译结束后会将编译结果固化到存储器上,从而会占用大量的输入输出(inputoutput,io)资源。29.而且,若电子设备在系统环境变化后,且aot未完成编译的情况下,由于编译过程不能被中断,因此,电子设备仍在继续进行aot编译,这时,由于其他应用程序也在占用电子设备中的其他资源,例如中央处理器(centralprocessingunit,cpu)资源,从而使得aot编译代码的执行效率下降,电子设备出现卡顿的现象。30.针对jit,jit的执行时机为用户使用电子设备的过程中,当应用程序对应字节码中的某执行方法的执行次数超过上限阀值,例如,当系统为android12时,上限阈值为20*215;当系统为android13时,上限阈值为0xffff时;将该方法定为热执行方法(即电子设备经常执行的执行方法)并对该执行方法进行jit编译。编译完成后将生成的jit编译保存在jit本地代码缓存池(例如codecache)中,从而在应用程序退出前,再次运行到该执行方法时,电子设备可以直接切换到该执行方法的jit编译结果对应的本地代码(即机器代码)执行,以提升代码的运行效率。31.然后,电子设备可以在对某执行方法进行jit编译的同时将某执行方法的信息名称到预设文件(例如profile文件)中,从而在下一次aot到来时,电子设备可以根据profile文件中存储的所有执行方法名称,对这些执行方法对应的dex文件中的字节码进行编译。如此,导致profile文件中的执行方法实际上经历了两次编译。此外,如果在下一次aot到来前,由于同一个热执行方法的jit编译结果,在每次应用程序退出后都会被释放,因此,电子设备在每次退出应用程序后并重新启动该应用程序的情况下,该热执行方法未达到预设的执行次数时,仍处于解释执行状态,该解释执行状态需要对代码进行逐句解释并执行,从而会经历更多的编译,严重的浪费系统资源。32.在本技术提供的程序编译方法中,电子设备可以将jit生成的本地代码保存为第一jit编译文件,从而电子设备可以在第一程序的提前编译aot过程中,将第一jit编译文件合并至aot编译的本地代码中,进而得到目标aot编译文件。由于电子设备可以提前保存第一jit编译文件,并且可以将第一jit编译文件合并至aot编译的本地代码中,如此,电子设备在对第一程序进行提前编译aot的过程中,可以复用第一jit编译文件,从而减少电子设备进行aot编译的时长,避免用户在aot编译未结束前使用应用程序,由于占用系统资源造成的卡顿,以提升电子设备中的资源的利用率。33.本实施例提供的程序编译方法的执行主体可以为程序编译装置,该程序编译装置可以为电子设备,也可以为该电子设备中的控制模块或处理模块等。以下以电子设备为例来对本技术实施例提供的技术方案进行说明。34.本技术实施例提供一种程序编译方法,图1示出了本技术实施例提供的一种程序编译方法的流程图。如图1所示,本技术实施例提供的程序编译方法可以包括下述的步骤201至步骤202。35.步骤201、电子设备将第一即时编译jit生成的本地代码保存为第一jit编译文件。36.在本技术实施例中,上述第一jit为对第一程序中第一执行方法的即时编译。37.在本技术实施例中,在第一jit的执行次数大于预定阈值的情况下,电子设备可以将第一jit生成的本地代码保存第一jit编译文件。38.在本技术实施例中,上述第一jit编译文件中包含有第一jit编译结果,即第一jit生成的本地代码。39.在本技术实施例中,上述第一jit编译文件是对下述的第一程序对应字节码文件中的第一执行方法对应的第一字节码进行编译后得到的。40.可选地,上述第一字节码为第一程序对应字节码文件中的一部分字节码或者全部字节码。41.可选地,上述第一执行方法对应的字节码可以为函数形式的字节码。42.可选地,上述字节码文件可以为dex文件,也可以为oat文件。43.在本技术实施例中,上述第一jit编译结果可以通过机器语言表示。例如,二进制语言、十六进制语言。44.可以理解的是,对上述第一执行方法对应的第一字节码进行jit编译后,电子设备执行第一jit编译文件,可以理解为在第一程序中执行该第一执行方法对应的某项功能或者操作。45.在本技术实施例中,上述执行次数为上述第一jit编译结果在电子设备中第一程序中执行的次数。46.在本技术实施例中,上述预定阈值可以是用户设置的,也可以是电子设备系统自行确定的。47.在本技术实施例中,电子设备可以将上述第一jit编译文件采用目标格式保存。例如,电子设备可以将上述第一jit编译结果生成为jit格式的文件进行保存。48.在本技术实施例中,电子设备将上述第一jit编译文件可以保存至目标存储器中。49.可选地,上述目标存储器包括以下任一项:只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、动态随机存取存储器(dynamicrandomaccessmemory,dram)。50.本技术实施例中,由于电子设备可以将第一即时编译jit生成的本地代码保存为第一jit编译文件,所以电子设备在再次执行第一执行方法时,可以直接使用存储的第一jit编译文件,无需用户再次执行第一执行方法,降低了jit编译次数,提升了电子设备中资源的利用率。51.步骤202、在第一程序的提前编译aot过程中,电子设备将第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件。52.在本技术实施例中,在上述第一程序aot编译过程中,当电子设备编译到上述第一程序的第一执行方法时,电子设备可以直接读取该第一执行方法对应的第一jit编译文件,由于该第一jit编译文件中包含第一jit结果,从而电子设备将该第一jit编译结果直接写入该第一执行方法对应的位置,将该第一jit编译结果合并到第一程序的aot编译结果。然后,电子设备可以继续进行后续的aot编译,最终得到完整的aot编译结果,即上述目标aot编译结果。53.举例说明,在进行aot编译时,如果应用程序有对应的jit文件存在,则在电子设备编译到jit文件中的相关方法(即上述第一执行方法)时,直接将以jit文件格式保存的编译结果(即上述第一jit编译结果)写入到odex或oat文件(即上述第一程序的aot编译文件)中,得到完整的aot编译结果。由于aot编译的执行方法信息为电子设备在jit编译时记录在profile文件中的执行方法,所以本次aot的所有方法可能均已在jit中包含了,因此,无需再次编译。从而可以极大缩小aot的编译时间。54.在本技术实施例中,上述第一程序可以为电子设备中的任一应用程序,例如即时通信类应用程序、游戏类应用程序。55.在本技术实施例中,电子设备可以将上述第一jit编译文件可以写入odex文件或者oat文件,从而电子设备可以将该第一jit编译文件合并aot编译的本地代码中,进而得到目标aot编译文件。56.在本技术提供的程序编译方法中,电子设备可以将jit生成的本地代码保存为第一jit编译文件,从而电子设备可以在第一程序的提前编译aot过程中,将第一jit编译文件合并至aot编译的本地代码中,进而得到目标aot编译文件。由于电子设备可以提前保存第一jit编译文件,并且可以将第一jit编译文件合并至aot编译的本地代码中,如此,电子设备在对第一程序进行提前编译aot的过程中,可以复用第一jit编译文件,从而减少电子设备进行aot编译的时长,避免用户在aot编译未结束前使用应用程序由于占用系统资源造成的卡顿,提升了电子设备中的资源的利用率。57.可选地,本技术实施例中,结合图1,如图2所示,在上述步骤201之前,本技术实施例提供的程序编译方法还包括下述的步骤301,并且在上述步骤201之后,本技术实施例提供的程序编译方法还包括下述的步骤302。58.步骤301、在运行第一程序的情况下,电子设备获取第一jit生成的本地代码。59.示例性地,在运行上述第一程序的情况下,电子设备可以从第一jit编译文件中,根据第一执行方法的方法名称获取第一执行方法对应的第一jit生成的本地代码。60.进一步可选地,在本技术实施例中,在保存第一程序对应字节码文件中第一执行方法的第一jit编译结果之后,在第一程序退出的情况下,不释放第一jit编译结果,最终将保存的第一jit编译结果合并到第一程序的aot编译结果中。61.步骤302、在退出第一程序的情况下,电子设备不释放第一jit生成的本地代码。62.示例性地,在电子设备接收到第一程序的退出信号时,将第一jit生成的本地代码进行保存。63.本技术实施例中,在电子设备退出第一程序时,电子设备可以通过保存第一jit生成的本地代码,,能够直接使用jit编译结果,不用反复编译相同内容,从而有效地降低jit频率,减少系统资源消耗。64.可选地,在本技术实施例中,在电子设备保存第一程序对应字节码文件中第一执行方法的第一jit编译结果之后,可以将第一jit编译结果的存储地址,写入该第一jit编译结果对应第一执行方法对应的字节码结构体。在使用该第一jit编译结果的过程中,直接解析第一执行方法对应的字节码结构体中,第一jit编译结果的存储地址。然后,跳转至该存储地址,并执行该存储地址对应的第一jit编译结果。65.可选地,本技术实施例中,结合图1,如图3所示,在上述步骤201之后,本技术实施例提供的程序编译方法还包括下述的步骤401至步骤403。66.步骤401、电子设备将第一jit编译文件对应的存储地址写入第一执行方法对应的字节码结构体中。67.可选地,上述存储地址可以为电子设备中的rom地址,可以为电子设备中的ram地址。68.可选地,电子设备可以通过目标方式获取第一程序对应字节码文件中第一执行方法的第一jit编译结果对应的存储地址,将该存储地址写入该字节码文件中第一执行方法对应的字节码结构体中。69.可选地,上述目标方式可以为以下任一项:反射方式、调用方式。70.可选地,加载上述第一执行方法所在的类,例如,declaring_class_,在该类中创建该第一执行方法的对象(oatmethod),即jit编译结果,并修改其相关字段(例如,code_offset_等),以将该第一jit编译结果的存储地址写入该字节码文件中第一执行方法对应的字节码结构体中。71.示例性地,上述相关字段的值可以用0或1表示。若相关字段的值为1,则电子设备可以通过相关字段的值与上述存储地址的真实物理地址之间的预设映射关系,从电子设备中确定上述存储地址的真实物理地址。若相关字段的值为0,则电子设备中并未获取到上述存储地址。72.步骤402、在启动第一程序的情况下,电子设备预加载第一jit编译文件,并解析出第一jit编译文件对应的存储地址。73.在本技术实施例中,电子设备在使用第一程序对应字节码文件中第一执行方法的第一jit编译结果的过程中,电子设备可以从该第一执行方法对应的字节码结构体中,解析该第一jit编译结果对应的存储地址。74.步骤403、在执行到第一执行方法的情况下,电子设备跳转至存储地址,执行第一jit生成的本地代码。75.在本技术实施例中,电子设备在使用第一程序对应字节码文件中第一执行方法的第一jit编译结果的过程中,电子设备可以从该第一执行方法对应的字节码结构体中,解析该第一jit编译结果对应的存储地址,并跳转至存储地址,执行第一jit编译结果。76.例如,在应用程序运行过程中,电子设备使用artmethod(即上述第一执行方法)时会检查oatmethod(即上述第一执行方法对应的jit编译结果)是否存在,若存在,则读取其相关字段,然后会从code_offset_处开始执行。77.本技术实施例中,电子设备可以将第一jit编译文件对应的存储地址写入第一执行方法对应的字节码结构体中,从而可以在启动第一程序的情况下,电子设备预加载第一jit编译文件,并解析出第一jit编译文件对应的存储地址,并执行第一jit生成的本地代码,如此,电子设备在应用程序运行时,可以提前加载jit编译的方法和类,然后通过识别类中执行方法对应的存储地址,使得电子设备可以跳转至第一jit编译文件对应的存储地址,从而执行该存储地址保存的jit编译结果,进而有效的提升代码执行效率。78.可选地,本技术实施例中,结合图1,如图4所示,在上述步骤202之前,本技术实施例提供的程序编译方法还包括下述的步骤501。79.步骤501、在第一程序的进行aot编译的过程中,电子设备获取从第一程序的安装包中解压出的aot编译的本地代码。80.本技术实施例中,上述aot编译的本地代码为服务器编译得到的。81.可选地,上述第一程序的安装包中包括:aot编译文件。82.以下以两种可能的实施例详细说明上述第一程序的aot编译结果的获取过程。83.在第一种可能的实施例中,电子设备中第一程序的aot编译结果,是从该第一程序对应的安装包中获取的。84.示例性地,在服务器中直接针对第一程序进行预aot编译,并将编译好的aot编译结果压缩在该第一程序对应的安装包中。85.示例性地,当电子设备安装第一程序时,电子设备可以对第一程序的安装包(下述简称为第一安装包)进行解压,然后将解压后的第一安装包中的各个文件的内容,通过每个文件对应的存储路径保存至第一安装包中,从而电子设备可以根据第一安装包得到第一程序的aot编译文件。86.举例说明,在应用厂商将第一程序上传应用到服务器的应用商店上,供用户下载时,服务器针对特定平台、特定的android版本,在服务器上对第一程序进行预aot编译,在服务器上保存对应的odex和vdex(android用于保存类校验结果)文件。在用户下载第一程序时,同步下载第一程序安装包中对应odex和vdex的压缩文件。安装第一程序时,仅需对下载文件进行解压,并保存到电子设备中的相关路径即可。87.可选地,本技术实施例中,上述第一安装包中的各个文件的内容可以包括第一程序的aot编译文件、第一程序的属性信息,例如第一程序的大小。88.在第二种可能的实施例中,电子设备对第一程序进行aot编译,得到编译后第一程序对应的aot编译结果。89.本技术实施例中,由于第一程序在服务器上提前进行aot编译,电子设备可以直接使用服务器编译好的aot编译结果,因此,不需要使用电子设备的系统资源进行编译,从而节省编译耗时,有效提高应用程序在电子设备中的运行效率,可以使用更优的本地代码。90.可选地,本技术实施例中,在上述步骤202之后,本技术实施例提供的程序编译方法还包括下述的步骤601。91.步骤601、电子设备删除第一jit生成的本地代码。92.示例性地,电子设备可以根据第一执行方法的方法名,从字节码文件查找到第一执行方法对应的第一jit编译文件,从而删除第一程序对应字节码文件中第一执行方法的第一jit编译文件,进而不会占用多余的系统资源。93.可选地,本技术实施例中,本技术实施例提供的程序编译方法还包括下述的步骤701。94.步骤701、在运行第一程序的情况下,电子设备基于第一程序的当前cpu占用率和第一程序运行状态,调整第一程序中需要进行jit的方法的数量。95.可选地,上述cpu占用率可以包括cpu占用率超过预定阈值或低于预定阈值。例如,cpu占用率超过80%、cpu占用率超过60%、cpu占用率超过40%、cpu占用率低于40%。96.可选地,上述第一程序可以是电子设备中下载的应用程序,也可以是电子设备的系统服务。97.可选地,在上述第一程序为电子设备下载的应用程序,上述运行状态可以为前台运行、后台运行和系统服务。98.可选地,电子设备可以将第一程序对应字节码文件中需要进行jit的方法的数量调整为预定数量。99.举例说明,当电子设备检测到第一程序当前cpu占用率超过80%,且第一程序当前运行状态为前台运行,此时,第一程序对应字节码文件中需要进行jit的方法的数量为10个,则电子设备可以将需要进行jit的方法的数量调整为5个;当电子设备检测到第一程序当前cpu占用率超过80%,且第一程序当前运行状态为后台运行,此时,第一程序对应字节码文件中需要进行jit的方法的数量为10个,则电子设备可以将需要进行jit的方法的数量调整为0个,即停止所有jit。具体地,可参照表1:100.表1[0101][0102]可以理解的是,在应用程序运行过程中,有jit发生时检查当前的cpu占用情况,在占用较高时区分应用运行状态,对jit方法编译的数量按一定的百分比进行调整。[0103]本技术实施例中,电子设备可以通过根据应用程序的cpu占用率,以及应用程序的运行状态调整对应用程序对应字节码文件jit的方法的数量,减少系统资源消耗。[0104]需要说明的是,由于aot编译由系统服务(system_server)环境变化触发,所以可以对电子设备中所有需要编译的应用程序逐个进行编译,在上一个应用程序编译结束前不会编译下一个应用程序,应用程序编译顺序也是不确定的。用户高频使用的应用程序,可能因排在后面而需要等待较长时间才能进入编译,如果用户在编译此应用程序前使用该应用程序,则可能因解释执行降低了性能而出现卡顿。[0105]可选地,本技术实施例中,本技术实施例提供的程序编译方法还包括下述的步骤801和步骤802。[0106]步骤801、电子设备按照电子设备中每个应用程序的使用频率,调整电子设备对应的aot编译顺序。[0107]本技术实施例中,电子设备可以获取某个时间段内每个应用程序的使用次数,从而确定每个应用程序的使用频率,进而电子设备可以根据每个应用程序的使用频率,调整电子设备对应的aot编译顺序。[0108]步骤802、电子设备按照调整后的aot编译顺序,对电子设备中应用程序进行aot编译。[0109]本技术实施例中,电子设备可以根据按照调整后的aot编译顺序,依次对电子设备中应用程序进行aot编译。[0110]本技术实施例中,电子设备可以根据用户使用应用程序的使用频率进行排序,从而优先编译用户高频使用的应用程序,进而提升了电子设备逐一编译的灵活性。[0111]需要说明的是,本技术实施例提供的方法是以第一执行方法为例,其所有的方式步骤均可应用于第一程序中的多个执行方法。[0112]需要说明的是,本技术实施例提供的程序编译方法,执行主体可以为程序编译装置,或者电子设备,还可以为电子设备中的功能模块或实体。本技术实施例中以程序编译装置执行程序编译的方法为例,说明本技术实施例提供的程序编译的装置。[0113]图5示出了本技术实施例中涉及的程序编译装置的一种可能的结构示意图。如图5所示,该程序编译装置70可以包括:存储模块71和处理模块72。[0114]其中,存储模块71,用于将第一即时编译jit生成的本地代码保存为第一jit编译文件,第一jit为对第一程序中第一执行方法的即时编译。处理模块72,用于在第一程序的提前编译aot过程中,将第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件。[0115]可选地,在本技术实施例中,上述处理模块72,还用于将第一jit生成的本地代码保存为第一jit编译文件之前,在运行第一程序的情况下,获取第一jit生成的本地代码;处理模块72,还用于将第一jit生成的本地代码保存为第一jit编译文件之后,在退出第一程序的情况下,不释放第一jit生成的本地代码。[0116]可选地,在本技术实施例中,上述处理模块72,还用于在将第一jit生成的本地代码保存为第一jit编译文件之后,将第一jit编译文件对应的存储地址写入第一执行方法对应的字节码结构体中;在启动第一程序的情况下,预加载所述第一jit编译文件,并解析出所述第一jit编译文件对应的存储地址;以及在执行到第一执行方法的情况下,跳转至存储地址,执行第一jit生成的本地代码。[0117]可选地,在本技术实施例中,上述处理模块72,还用于将第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件之前,在第一程序的提前编译aot编译过程中,获取从第一程序的安装包中解压出的aot编译的本地代码,aot编译的本地代码为服务器编译得到的。[0118]可选地,在本技术实施例中,上述处理模块72,还用于将所述第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件之后,删除第一jit生成的本地代码。[0119]可选地,在本技术实施例中,上述处理模块72,还用于在运行第一程序的情况下,基于第一程序的当前cpu占用率和第一程序运行状态,调整第一程序中需要进行jit的方法的数量。[0120]可选地,在本技术实施例中,上述处理模块72,还用于按照电子设备中每个应用程序的使用频率,调整电子设备对应的aot编译顺序;并按照调整后的aot编译顺序,对电子设备中应用程序进行aot编译。[0121]在本技术实施例的程序编译装置中,程序编译装置可以将jit生成的本地代码保存为第一jit编译文件,从而程序编译装置可以在第一程序的提前编译aot过程中,将第一jit编译文件合并至aot编译的本地代码中,进而得到目标aot编译文件。由于程序编译装置可以提前保存第一jit编译文件,并且可以将第一jit编译文件合并至aot编译的本地代码中,如此,程序编译装置在对第一程序进行提前编译aot的过程中,可以复用第一jit编译文件,从而减少程序编译装置进行aot编译的时长,避免用户在aot编译未结束前使用应用程序由于占用系统资源造成的卡顿,提升了程序编译装置中的资源的利用率。[0122]本技术实施例中的程序编译装置可以是电子设备,也可以是电子设备中的部件,例如集成电路或芯片。该电子设备可以是终端,也可以为除终端之外的其他设备。示例性的,电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、移动上网装置(mobileinternetdevice,mid)、增强现实(augmentedreality,ar)/虚拟现实(virtualreality,vr)设备、机器人、可穿戴设备、超级移动个人计算机(ultra-mobilepersonalcomputer,umpc)、上网本或者个人数字助理(personaldigitalassistant,pda)等,还可以为服务器、网络附属存储器(networkattachedstorage,nas)、个人计算机(personalcomputer,pc)、电视机(television,tv)、柜员机或者自助机等,本技术实施例不作具体限定。[0123]本技术实施例中的程序编译装置可以为具有操作系统的装置。该操作系统可以为安卓(android)操作系统,可以为ios操作系统,还可以为其他可能的操作系统,本技术实施例不作具体限定。[0124]本技术实施例提供的程序编译装置能够实现上述方法实施例实现的各个过程,为避免重复,这里不再赘述。[0125]可选地,如图6所示,本技术实施例还提供一种电子设备800,包括处理器801和存储器802,存储器802上存储有可在所述处理器801上运行的程序或指令,该程序或指令被处理器801执行时实现上述程序编译方法实施例的各个步骤,且能达到相同的技术效果,为避免重复,这里不再赘述。[0126]需要说明的是,本技术实施例中的电子设备包括上述所述的移动电子设备和非移动电子设备。[0127]图7为实现本技术实施例的一种电子设备的硬件结构示意图。[0128]该电子设备100包括但不限于:射频单元101、网络模块102、音频输出单元103、输入单元104、传感器105、显示单元106、用户输入单元107、接口单元108、存储器109、以及处理器110等部件。[0129]本领域技术人员可以理解,电子设备100还可以包括给各个部件供电的电源(比如电池),电源可以通过电源管理系统与处理器110逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。图7中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,在此不再赘述。[0130]其中,存储器109,用于将第一即时编译jit生成的本地代码保存为第一jit编译文件,第一jit为对第一程序中第一执行方法的即时编译。处理器110,用于在第一程序的提前编译aot过程中,将第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件。[0131]可选地,在本技术实施例中,上述处理器110,还用于将第一jit生成的本地代码保存为第一jit编译文件之前,在运行第一程序的情况下,获取第一jit生成的本地代码;处理器110,还用于将第一jit生成的本地代码保存为第一jit编译文件之后,在退出第一程序的情况下,不释放第一jit生成的本地代码。[0132]可选地,在本技术实施例中,上述处理器110,还用于在将第一jit生成的本地代码保存为第一jit编译文件之后,将第一jit编译文件对应的存储地址写入第一执行方法对应的字节码结构体中;在启动第一程序的情况下,预加载所述第一jit编译文件,并解析出所述第一jit编译文件对应的存储地址;以及在执行到第一执行方法的情况下,跳转至存储地址,执行第一jit生成的本地代码。[0133]可选地,在本技术实施例中,上述处理器110,还用于将第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件之前,在第一程序的提前编译aot编译过程中,获取从第一程序的安装包中解压出的aot编译的本地代码,aot编译的本地代码为服务器编译得到的。[0134]可选地,在本技术实施例中,上述处理器110,还用于将所述第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件之后,删除第一jit生成的本地代码。[0135]可选地,在本技术实施例中,上述处理器110,还用于在运行第一程序的情况下,基于第一程序的当前cpu占用率和第一程序运行状态,调整第一程序中需要进行jit的方法的数量。[0136]可选地,在本技术实施例中,上述处理器110,还用于按照电子设备中每个应用程序的使用频率,调整电子设备对应的aot编译顺序;并按照调整后的aot编译顺序,对电子设备中应用程序进行aot编译。[0137]在本技术实施例提供的电子设备中,电子设备可以将jit生成的本地代码保存为第一jit编译文件,从而电子设备可以在第一程序的提前编译aot过程中,将第一jit编译文件合并至aot编译的本地代码中,进而得到目标aot编译文件。由于电子设备可以提前保存第一jit编译文件,并且可以将第一jit编译文件合并至aot编译的本地代码中,如此,电子设备在对第一程序进行提前编译aot的过程中,可以复用第一jit编译文件,从而减少电子设备进行aot编译的时长,避免用户在aot编译未结束前使用应用程序由于占用系统资源造成的卡顿,提升了电子设备中的资源的利用率。[0138]应理解的是,本技术实施例中,输入单元104可以包括图形处理器(graphicsprocessingunit,gpu)1041和麦克风1042,图形处理器1041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。显示单元106可包括显示面板1061,可以采用液晶显示器、有机发光二极管等形式来配置显示面板1061。用户输入单元107包括触控面板1071以及其他输入设备1072中的至少一种。触控面板1071,也称为触摸屏。触控面板1071可包括触摸检测装置和触摸控制器两个部分。其他输入设备1072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。[0139]存储器109可用于存储软件程序以及各种数据。存储器109可主要包括存储程序或指令的第一存储区和存储数据的第二存储区,其中,第一存储区可存储操作系统、至少一个功能所需的应用程序或指令(比如声音播放功能、图像播放功能等)等。此外,存储器109可以包括易失性存储器或非易失性存储器,或者,存储器109可以包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),静态随机存取存储器(staticram,sram)、动态随机存取存储器(dynamicram,dram)、同步动态随机存取存储器(synchronousdram,sdram)、双倍数据速率同步动态随机存取存储器(doubledataratesdram,ddrsdram)、增强型同步动态随机存取存储器(enhancedsdram,esdram)、同步连接动态随机存取存储器(synchlinkdram,sldram)和直接内存总线随机存取存储器(directrambusram,drram)。本技术实施例中的存储器109包括但不限于这些和任意其它适合类型的存储器。[0140]处理器110可包括一个或多个处理单元;可选的,处理器110集成应用处理器和调制解调处理器,其中,应用处理器主要处理涉及操作系统、用户界面和应用程序等的操作,调制解调处理器主要处理无线通信信号,如基带处理器。可以理解的是,上述调制解调处理器也可以不集成到处理器110中。[0141]本技术实施例还提供一种可读存储介质,所述可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述程序编译方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。[0142]其中,所述处理器为上述实施例中所述的电子设备中的处理器。所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器rom、随机存取存储器ram、磁碟或者光盘等。[0143]本技术实施例另提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现上述程序编译方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。[0144]应理解,本技术实施例提到的芯片还可以称为系统级芯片、系统芯片、芯片系统或片上系统芯片等。[0145]本技术实施例提供一种计算机程序产品,该程序产品被存储在存储介质中,该程序产品被至少一个处理器执行以实现如上述程序编译方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。[0146]需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本技术实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。[0147]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例所述的方法。[0148]上面结合附图对本技术的实施例进行了描述,但是本技术并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本技术的启示下,在不脱离本技术宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本技术的保护之内。当前第1页12当前第1页12
技术特征:
1.一种程序编译方法,其特征在于,所述方法包括:将第一即时编译jit生成的本地代码保存为第一jit编译文件,所述第一jit为对第一程序中第一执行方法的即时编译;在所述第一程序的提前编译aot过程中,将所述第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件。2.根据权利要求1所述的方法,其特征在于,所述将第一jit生成的本地代码保存为第一jit编译文件之前,所述方法还包括:在运行所述第一程序的情况下,获取所述第一jit生成的本地代码;所述将第一jit生成的本地代码保存为第一jit编译文件之后,所述方法还包括:在退出所述第一程序的情况下,不释放所述第一jit生成的本地代码。3.根据权利要求1或2所述的方法,其特征在于,所述将第一jit生成的本地代码保存为第一jit编译文件之后,所述方法还包括:将所述第一jit编译文件对应的存储地址写入所述第一执行方法对应的字节码结构体中;在启动所述第一程序的情况下,预加载所述第一jit编译文件,并解析出所述第一jit编译文件对应的存储地址;在执行到所述第一执行方法的情况下,跳转至所述存储地址,执行所述第一jit生成的本地代码。4.根据权利要求1所述的方法,其特征在于,所述将所述第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件之前,所述方法还包括:在所述第一程序的进行aot编译的过程中,获取从所述第一程序的安装包中解压出的所述aot编译的本地代码,所述aot编译的本地代码为服务器编译得到的。5.根据权利要求1所述的方法,其特征在于,所述将所述第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件之后,所述方法还包括:删除所述第一jit生成的本地代码。6.根据权利要求1所述的方法,其特征在于,所述方法还包括:在运行所述第一程序的情况下,基于所述第一程序的当前cpu占用率和所述第一程序运行状态,调整所述第一程序中需要进行jit的方法的数量。7.根据权利要求1所述的方法,其特征在于,所述方法还包括:按照所述电子设备中每个应用程序的使用频率,调整所述电子设备对应的aot编译顺序;按照调整后的aot编译顺序,对所述电子设备中应用程序进行aot编译。8.一种程序编译装置,其特征在于,所述装置包括:存储模块和处理模块;所述存储模块,用于将第一jit生成的本地代码保存为第一jit编译文件,所述第一jit为对第一程序中第一执行方法的即时编译;所述处理模块,用于在所述第一程序的提前编译aot过程中,将所述第一jit编译文件合并至aot编译的本地代码中,得到目标aot编译文件。9.根据权利要求8所述的装置,其特征在于,所述装置还包括:获取模块和释放模块;所述获取模块,用于在运行所述第一程序的情况下,获取所述第一jit生成的本地代
码;所述释放模块,用于在退出所述第一程序的情况下,不释放所述第一jit生成的本地代码。10.根据权利要求8或9所述的装置,其特征在于,所述装置还包括:执行模块;所述处理模块,还用于将所述第一jit编译文件对应的存储地址写入所述第一执行方法对应的字节码结构体中;所述处理模块,还用于在启动所述第一程序的情况下,预加载所述第一jit编译文件,并解析出所述第一jit编译文件对应的存储地址;所述执行模块,用于在执行到所述第一执行方法的情况下,跳转至所述存储地址,执行所述第一jit生成的本地代码。11.根据权利要求8所述的装置,其特征在于,所述获取模块,还用于在所述第一程序的进行aot编译的过程中,获取从所述第一程序的安装包中解压出的所述aot编译的本地代码,所述aot编译的本地代码为服务器编译得到的。12.一种电子设备,其特征在于,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1至7中任一项所述的程序编译方法的步骤。13.一种可读存储介质,其特征在于,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1至7中任一项所述的程序编译方法的步骤。

技术总结
本申请公开了一种程序编译方法、装置、电子设备及可读存储介质,属于程序编译技术领域。该方法包括:将第一即时编译JIT生成的本地代码保存为第一JIT编译文件,该第一JIT为对第一程序中第一执行方法的即时编译;在第一程序的提前编译AOT过程中,将第一JIT编译文件合并至AOT编译的本地代码中,得到目标AOT编译文件。件。件。


技术研发人员:张健钦
受保护的技术使用者:维沃移动通信有限公司
技术研发日:2023.04.10
技术公布日:2023/7/22
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐