一种应用程序的运行方法和装置制造方法及图纸

技术编号:36151295 阅读:17 留言:0更新日期:2022-12-31 19:55
本申请实施例公开了一种应用程序的运行方法和装置,涉及电子设备领域,可以避免对同一个函数的多次JIT编译和存储,从而提升JIT编译获取的机器码的使用效率。具体方案为:在第一进程中加载该第一应用程序。在该第一进程中解释执行该第一函数。在该第一进程中在解释执行该第一函数的次数达到该第一函数的第一编译阈值后,对该第一函数执行编译。将该第一函数执行编译的结果存储在共享代码缓存中,该共享代码缓存是该电子设备中至少进程都能够访问的缓存。问的缓存。问的缓存。

【技术实现步骤摘要】
一种应用程序的运行方法和装置


[0001]本申请实施例涉及电子设备领域,尤其涉及一种应用程序的运行方法和装置。

技术介绍

[0002]对于具有解释型语言,例如JAVA,Perl,Python,MATLAB等,可以提前将解释型语言转换高级编程语言到更有效率的字节码,字节码是一种不依赖于目标平台的中间码,可以被解释执行,也可以被运行在直接支持字节码的处理器中,然后由电子设备通过解释执行的方式对字节码进行逐行的解释执行,实现该应用程序的运行,对字节码解释执行的效率低于直接执行编译后的原生机器码,为了提升执行效率,技术人员提出了即时编译(Just

in

timecompilation)技术,即在运行中对字节码编译成原生机器码进行执行,研发人员致力于持续在性能和内存占用上优化即时编译(Just

in

time compilation)技术的应用。

技术实现思路

[0003]本申请实施例提供一种应用程序的运行方法和装置,可以避免对同一个函数的多次JIT 编译和存储,从而提升JIT编译获取的机器码的使用效率,提升电子设备的运行效率。
[0004]为了达到上述目的,本申请实施例采用如下技术方案:
[0005]第一方面,提供一种应用程序的运行方法,应用于电子设备,该电子设备中安装有第一应用程序,该第一应用程序中包括第一函数,该方法包括:在第一进程中加载该第一应用程序。在该第一进程中解释执行该第一函数。在该第一进程中在解释执行该第一函数的次数达到该第一函数的第一编译阈值后,对该第一函数执行编译。将该第一函数执行编译的结果存储在共享代码缓存中,该共享代码缓存是该电子设备中至少进程都能够访问的缓存。
[0006]基于该方案,提供了一种共享代码的机制。在该示例中,电子设备可以在第一函数执行编译(如JIT编译)之后,将编译获取的机器码存储在共享代码缓存中。其中,该共享代码缓存可以是该电子设备中的至少2个应用程序能够访问的内存中的空间。这样,在函数被JIT 编译之后,JIT编译获取的机器码就可以存储在内存中,在有其他应用需要调用该函数时,就可以不需要重复对该函数进行解释执行或者执行JIT编译,而是可以直接从共享代码缓存中调取该函数的JIT编译结果。由此就可以避免该函数的多次JIT编译导致的算力的浪费以及多次存储导致的存储空间的浪费。进而能够达到提升JIT编译的效果,并提升电子设备的运行效率。
[0007]在一种可能的设计中,该电子设备中还安装有第二应用程序,该第二应用程序中包括第一函数,该方法还包括:在第二进程中加载该第二应用程序。该第二进程与该第一进程的父进程相同。在该第二进程中调用该第一函数时,从该共享代码缓存中,读取并运行该第一函数执行编译的结果。基于该方案,提供了一种共享代码缓存的使用机制。在本示例中,第二应用程序对应的第二进程在需要使用第一函数时,就可以直接从共享代码缓存中
读取该第一函数的JIT编译结果,从而避免重复的JIT编译以及存储。需要说明的是,在本示例中,该共享代码缓存的存储地址可以是配置在zygote进程等所有进程的父进程中的,由此可以使得不同的进程在被建立时就可以通过集成zygote进程中配置的描述文件,从而在不同的进程中为共享代码缓存获取相同的虚拟地址,由此实现不同进程对共享代码缓存的正确调用。
[0008]在一种可能的设计中,该电子设备中存储有第一函数状态记录表,该第一函数状态记录表用于记录不同函数经过编译之后的存储地址,该第二进程从该共享代码缓存中,读取并运行该第一函数执行编译的结果,包括:在该第二进程中读取该第一函数状态记录表,根据该第一函数的函数签名,查找该第一函数状态记录表中是否存在该第一函数对应的存储地址。在存在该第一函数对应的存储地址时,从该存储地址读取该第一函数经过编译的机器码,执行该第一函数经过编译的机器码。基于该方案,提供了一种具体的在共享代码缓存中获取第一函数的编译结果的示例。在本示例中,电子设备可以通过设置第一函数状态记录表,用于记录经过编译之后存储在共享代码缓存中的地址。由此使得不同的进程在需要调用该第一函数的JIT编译获取的机器码时,可以根据第一函数签名在第一函数状态记录表中查找即可获取该第一函数的机器码的存储地址。进而该进程就可以从该存储地址获取并运行第一函数的机器码。
[0009]在一种可能的设计中,在该第一进程将该第一函数执行编译的结果存储在共享代码缓存中之前,该方法还包括:该第一进程建立/更新该第一函数状态记录表中该第一函数经过编译之后的存储地址。基于该方案,提供了一种第一函数状态记录表的更新机制。在本示例中,电子中的第一进程在对第一函数进行编译之后,将该编译的情况更新到第一函数状态记录表中,以便于后续进程在调用第一函数时能够通过第一函数状态记录表查找获取该第一函数的机器码。
[0010]在一种可能的设计中,在该第一函数状态记录表中不存在该第一函数对应的存储地址时,该方法还包括:在该第二进程中解释执行该第一函数。基于该方案,提供了一种第一函数状态记录表中不包括第一函数的机器码时的方案示例。示例性的,在共享代码缓存中没有存储第一函数的机器码时,则第二进程可以直接对第一函数进行解释执行,从而实现第一函数的运行。
[0011]在一种可能的设计中,在该第一进程中对该第一函数执行编译之前,该方法还包括:确定该第一函数被多个不同进程调用。基于该方案,提供了一种可能的对第一函数进行编译并放入共享代码缓存的条件。可以理解的是,在共享代码缓存中的机器码可以被多个不同的进程所调用,因此,在机器码被存储到共享代码缓存中之前,电子设备可以确定该机器码对应的函数会被多个进程调用,从而避免共享代码缓存中的机器码只会被1个进程调用的情况发生,由此提升共享代码缓存中的机器码的使用率。
[0012]在一种可能的设计中,该电子设备中存储有该第一函数对应的函数访问记录表。该确定该第一函数被多个不同进程调用,包括:读取该函数访问记录表,根据该函数访问记录表中,存在至少一个第三进程调用过该第一函数,确定该第一函数被多个不同进程调用。该第三进程不同于该第一进程。基于该方案,提供了一种确定第一函数可以被多个不同进程调用的方案。在本示例中,每个函数都可以对应配置有函数访问记录表。不同的进程在调用函数时,都可以在该函数的函数访问记录表中进行标记,以便其他进程可以根据该函数
访问记录表,确定该函数曾被其他进程调用过。可以理解的是,如果需要对第一函数进行JIT编译并放入共享代码缓存,则可以通过查询该第一函数的函数访问记录表,如果在函数访问记录表中标识有多个不同的进程访问过第一函数,则表明第一函数会被多个不同的进程调用。
[0013]在一种可能的设计中,该方法还包括:在该第三进程调用该第一函数时,在该函数访问记录表中,建立/更新与该第一函数对应的第一表项,该第一表项用于指示该第一函数被该第三进程调用的次数。基于该方案,提供了一种更新函数访问记录表的机制。在该示例中,进程每调用一次第一本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种应用程序的运行方法,其特征在于,应用于电子设备,所述电子设备中安装有第一应用程序,所述第一应用程序中包括第一函数,所述方法包括:在第一进程中加载所述第一应用程序;在所述第一进程中解释执行所述第一函数;在所述第一进程中在解释执行所述第一函数的次数达到所述第一函数的第一编译阈值后,对所述第一函数执行编译;将所述第一函数执行编译的结果存储在共享代码缓存中,所述共享代码缓存是所述电子设备中至少进程都能够访问的缓存。2.根据权利要求1所述的方法,其特征在于,所述电子设备中还安装有第二应用程序,所述第二应用程序中包括第一函数,所述方法还包括:在第二进程中加载所述第二应用程序;所述第二进程与所述第一进程的父进程相同;在所述第二进程中调用所述第一函数时,从所述共享代码缓存中,读取并运行所述第一函数执行编译的结果。3.根据权利要求2所述的方法,其特征在于,所述电子设备中存储有第一函数状态记录表,所述第一函数状态记录表用于记录不同函数经过编译之后的存储地址,所述第二进程从所述共享代码缓存中,读取并运行所述第一函数执行编译的结果,包括:在所述第二进程中读取所述第一函数状态记录表,根据所述第一函数的函数签名,查找所述第一函数状态记录表中是否存在所述第一函数对应的存储地址;在存在所述第一函数对应的存储地址时,从所述存储地址读取所述第一函数经过编译的机器码,执行所述第一函数经过编译的机器码。4.根据权利要求3所述的方法,其特征在于,在所述第一进程将所述第一函数执行编译的结果存储在共享代码缓存中之前,所述方法还包括:所述第一进程建立/更新所述第一函数状态记录表中所述第一函数经过编译之后的存储地址。5.根据权利要求3或4所述的方法,其特征在于,在所述第一函数状态记录表中不存在所述第一函数对应的存储地址时,所述方法还包括:在所述第二进程中解释执行所述第一函数。6.根据权利要求1

5中任一项所述的方法,其特征在于,在所述第一进程中对所述第一函数执行编译之前,所述方法还包括:确定所述第一函数被多个不同进程调用。7.根据权利要求6所述的方法,其特征在于,所述电子设备中存储有所述第一函数对应的函数访问记录表;所述确定所述第一函数被多个不同进程调用,包括:读取所述函数访问记录表,根据所述函数访问记录表中,存在至少一个第三进程调用过所述第一函数,确定所述第一函数被多个不同进程调用;所述第三进程不同于所述第一进程。8.根据权利要求7所述的方法,其特征在于,所述方法还包括:在所述第三进程调用所述第一函数时,在所述函数访问记录表中,建立/更新与所述第
一函数对应的第一表项,所述第一表项用于指示所述第一函数被所述第三进程调用的次数。9.根据权利要求7或8所述的方法,其特征在于,所述方法还包括:在所述第一进程调用所述第一函数时,在所述函数访问记录表中,建立/更新与所述第一函数对应的第二表项,所述第二表项用于指示所述第一函数被所述第一进程调用的次数。10.根据权利要求1

9中任一项所述的方法,其特征在于,在所述编译过程中不使用内联优化。11.根据权利要求10所述的方法,其特征在于,所述方法还包括:在所述第一进程中在解释执行所述第一函数的次数达到所述第一函数的第二编译阈值后,对所述第一函数执行编译,将所述第一函数执行编译的结果存储在所述第一进程的私有代码缓存中。12.根据权利要求11所述的方法,其特征在于,所述方法还包括:在所述第一进程中,再次调用所述第一函数时,从所述私有代码缓存中,读取并执行所述第一函数执行编译获取的机器码。13.根据权利要求12所述的方法,其...

【专利技术属性】
技术研发人员:季柯丞邱榆彭卓立李文韬
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1