CN101957770B - 一种移动设备上应用程序的启动方法及装置 - Google Patents

一种移动设备上应用程序的启动方法及装置 Download PDF

Info

Publication number
CN101957770B
CN101957770B CN201010504978.3A CN201010504978A CN101957770B CN 101957770 B CN101957770 B CN 101957770B CN 201010504978 A CN201010504978 A CN 201010504978A CN 101957770 B CN101957770 B CN 101957770B
Authority
CN
China
Prior art keywords
application program
code
booting sequence
module
jit compiling
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
Application number
CN201010504978.3A
Other languages
English (en)
Other versions
CN101957770A (zh
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.)
ZTE Corp
Original Assignee
ZTE Corp
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 ZTE Corp filed Critical ZTE Corp
Priority to CN201010504978.3A priority Critical patent/CN101957770B/zh
Publication of CN101957770A publication Critical patent/CN101957770A/zh
Priority to EP11830194.4A priority patent/EP2521033B1/en
Priority to PCT/CN2011/071142 priority patent/WO2012045238A1/zh
Priority to US13/575,550 priority patent/US8726249B2/en
Application granted granted Critical
Publication of CN101957770B publication Critical patent/CN101957770B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44578Preparing or optimising for loading
    • 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/4401Bootstrapping
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种移动设备上应用程序的启动装置及方法,用于提高移动设备上应用程序的启动速度。其中,所述移动设备上应用程序的启动装置,包括:应用管理器模块,用于基于要运行的应用程序启动虚拟机模块运行;虚拟机模块,用于加载所述应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中,在执行每一段应用程序的启动流程代码段时,在所述JIT编译结果中查找所述要执行的启动流程代码段对应的本地JIT编译代码,并执行查找到的本地JIT编译代码;存储器管理模块,用于保存和读取应用程序代码、以及对应用程序的启动流程进行JIT编译后得到的JIT编译结果。

Description

一种移动设备上应用程序的启动方法及装置
技术领域
本发明涉及通信技术领域,尤其涉及一种移动设备上应用程序的启动。
背景技术
随着3G和智能机时代的来临,手机等移动设备上的应用程序越来越多。用户对手机等移动设备上的应用程序的使用模式具有启动频繁、每次使用时间不长的特点,这对应用程序的启动速度提出了较高要求。如果应用程序的启动速度过于缓慢,用户等待应用程序的启动时间可能跟真正使用该应用程序的时间相同甚至更多,这将大大降低手机等移动设备的用户体验。
例如,目前常用的移动设备上使用Java语言开发的应用程序,可称为Java应用程序,具有移植性好、一次编译运行、开发难度低、开发效率高、开发成本低等优点。由于Java语言是解释型语言,其执行效率比较低,因此,Java应用程序会遇到严重的启动速度比较慢的问题。
目前,提高Java应用程序的启动速度的方法有很多。一类方法是Java应用程序根据自身处理逻辑进行优化,采用延迟加载和懒惰初始化等手段来加快启动速度,这类方法的有效性只适用于单个Java应用程序本身,并且其采用的手段跟Java应用程序的特点密切相关;还有一类方法是在手机软件平台中,采用预先启动、预先加载、预先初始化、写时拷贝(COW)、应用进程在退出时进行缓存等来加速Java应用程序的启动速度,这类方法对所有Java应用程序启动速度都能起加速作用,并且不需要应用做任何修改。
由于Java应用程序启动速度的瓶颈在于Java应用程序是解释执行的,因此,现有方法对提高Java应用程序的启动速度并没有良好的效果。JIT(Just inTime)是一种及时编译机制,它把Java代码编译成本地语言来执行,避免解释执行,从而大大提高了Java应用程序的运行速度。但是,现有的JIT是要Java应用程序中的代码执行到一定次数时才会把代码编译成本地语言来执行;另外,JIT的编译结果随着Java应用程序的退出而丢弃,Java应用程序再次运行时没有任何JIT编译结果可以利用,需要在本次运行过程中再次编译。由于应用启动流程只在应用程序启动时执行一次,这就导致了Java应用程序启动流程无法利用JIT获得加速。因为JIT不会编译只执行一次的代码,同时Java应用程序启动是Java应用程序再次运行的开始阶段,也没有任何JIT编译结果可以执行。从而,现有技术中JIT无法提高Java应用程序的启动速度。
类似的,移动设备上使用其它具有JIT编译机制的解释型语言开发的应用程序也会遇到同样的问题。
因此,如何利用JIT来提高应用程序的启动速度成为现有技术中亟待解决的问题之一。
发明内容
本发明公开了一种移动设备上的应用程序的启动装置及方法,用于提高移动设备上应用程序的启动速度。
一种移动设备上应用程序的启动装置,包括应用管理器模块、虚拟机模块和存储器管理模块,其中:
所述应用管理器模块,用于基于要运行的应用程序启动虚拟机模块运行,并控制所述虚拟机模块执行所述应用程序代码;
所述虚拟机模块,用于调用所述存储器管理模块分别加载所述应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中,在执行每一段应用程序的启动流程代码段时,在所述JIT编译结果中查找所述要执行的启动流程代码段对应的本地JIT编译代码,并执行查找到的本地JIT编译代码;
所述存储器管理模块,用于保存和读取应用程序代码、以及对应用程序的启动流程进行JIT编译后得到的JIT编译结果,所述JIT编译结果包括已进行JIT编译的各段启动流程代码段对应的JIT编译代码。
一种移动设备上应用程序的启动方法,包括:
应用管理器模块基于要运行的应用程序启动虚拟机模块运行,并控制所述虚拟机模块执行所述应用程序代码;
所述虚拟机模块调用存储器管理模块分别加载所述应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中,在执行每一段应用程序的启动流程代码段时,在所述JIT编译结果中查找所述要执行的启动流程代码段对应的本地JIT编译代码,并执行查找到的本地JIT编译代码。
本发明实施例提供的一种移动设备上应用程序的启动装置及方法,在应用程序的启动过程中,应用管理器模块基于要运行的应用程序启动虚拟机模块运行,该虚拟机模块调用存储器管理模块分别加载应用程序代码、以及该应用程序的启动流程的JIT编译结果到内存中,在执行每一段应用程序的启动流程代码段时,在该JIT编译结果中查找要执行的启动流程代码段对应的本地JIT编译代码,并执行查找到的本地JIT编译代码,这样,在启动应用程序时,由于保存了对应用程序的启动流程的当前要执行的启动流程代码段的JIT编译结果,因此只需直接执行对应的JIT本地编译结果即可,无需对要执行的启动流程代码段以解释方式执行,从而提高了应用程序的启动速度。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
图1为本发明实施例中,移动设备上应用程序的启动装置的一种可能的结构示意图;
图2为本发明实施例中,移动设备上应用程序的启动方法的实施流程示意图;
图3为本发明实施例中,Android手机软件平台中Java应用程序启动装置的逻辑结构图;
图4为本发明实施例中,Android手机平台软件中,Activity的启动实施流程示意图。
具体实施方式
为了实现提高移动设备上的应用程序的启动速度,本发明实施例提供了一种移动设备上的应用程序的启动装置及方法。
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
如图1所示,为本发明实施例提供的移动设备上应用程序的启动装置一种可能的结构示意图,包括应用管理器模块101、虚拟机模块102和存储器管理模块103,其中:
应用管理器模块101,用于基于要运行的应用程序启动虚拟机模块102运行,并控制虚拟机模块102执行该应用程序代码;
虚拟机模块102,用于调用存储器管理模块103分别加载该应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中,在执行每一段应用程序的启动流程代码段时,在该JIT编译结果中查找该要执行的启动流程代码段对应的本地JIT编译代码,并执行查找到的本地JIT编译代码;
存储器管理模块103,用于保存和读取应用程序代码、以及对应用程序的启动流程进行JIT编译后得到的JIT编译结果,该JIT编译结果包括已进行JIT编译的各段启动流程代码段对应的JIT编译代码。
具体实施中,移动设备上应用程序的启动装置还可以包括JIT编译器模块104,其中:
虚拟机模块102,还用于在JIT编译结果中未查找到要执行的启动流程代码段对应的本地JIT编译代码时,通知所述JIT编译器模块104对该要执行的启动流程代码段进行JIT编译,并采用解释方式执行该要执行的启动流程代码;
JIT编译器模块104,用于根据虚拟机模块102的通知,确认配置虚拟机模块102时划分的内存空间有剩余空间时,对该要执行的启动流程代码段进行JIT编译。
具体的,JIT编译器模块在接收到虚拟机模块的通知后,查询配置虚拟机模块102时划分的内存空间是否还有足够的空间来保存该要执行的启动流程代码段的编译代码,如果有足够的空间保存,便会对要执行的启动流程代码段进行JIT编译;否则,丢弃该要执行的启动流程代码段。
具体的,应用管理器模块101,用于获取要运行的应用程序的标识信息,并在启动虚拟机模块102运行的同时将获取到的该应用程序的标识信息传递给虚拟机模块102,通过该应用程序的标识信息控制所述虚拟机模块执行所述应用程序代码;虚拟机模块102,用于根据该应用程序的标识信息,调用存储器管理模块103分别加载应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中之后,获取该应用程序的第一段启动流程代码段;在所述JIT编译结果中查找当前要执行的该第一段启动流程代码段对应的本地JIT编译代码,并在查找到该代码段对应的本地JIT编译代码时,执行查找到的本地JIT编译代码,在未查找到该代码段对应的本地JIT编译代码时,通知所述JIT编译器模块对所述应用程序当前要执行的该代码段进行JIT编译,并采用解释方式执行该代码段;如果应用程序的启动流程未执行结束,则根据该代码段的执行结果确定下一步要执行的应用程序的启动流程代码段,并返回执行上一步,直至应用程序的启动流程执行结束。
具体实施中,本发明实施例涉及的启动流程代码段可以包括一条代码也可以包括多条代码,这由执行应用程序的系统支持的JIT编译器具体决定。具体的,虚拟机模块在JIT编译结果文件中查找JIT编译结果并执行代码段对应的JIT编译代码时,当该JIT编译代码执行完后,相当于已经执行了该代码为起始的一段代码,则下一段要执行的代码可以根据由执行的编译结果来决定。
具体实施中,应用程序的标识信息可以包括所述应用程序的程序名称和软件包名称等。
具体实施中,应用管理器模块101,还可以用于在确认应用程序的启动流程执行结束后,判断在该应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,从JIT编译器模块104获取该应用程序的启动流程对应的JIT编译代码,并将该JIT编译代码传递给存储器管理模块103,存储器管理模块103可以用于将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
具体的,存储器管理模块103在接收到应用程序的启动过程中,启动流程代码段的JIT编译代码后以一定的格式保存在外部存储器中。
较佳的,本发明实施例中涉及的应用程序可以为Java应用程序。也可以是其它具有JIT编译机制的解释型语言开发的应用程序。
特别的,应用程序的启动流程中涉及的代码可能由于各种JIT的实现技术的限制,例如内存容量的限制而不会被全部编译,只有部分被编译的情况,本发明实施例也适用于这种情况。
较佳的,本发明实施例中,存储管理器保存的JIT编译结果的保存格式可以为表格,如表1所示,该表格的关键字是被JIT编译的应用程序的启动流程代码在应用程序代码中的位置,该表格的内容是该应用程序的启动流程代码进行JIT编译后得到的本地JIT编译代码的存放位置。当所涉及的代码段由多条代码组成时,以被编译的代码段中第一条代码在应用程序代码中的位置作为关键字去查询本地JIT编译代码的存放位置。因此,编译结果表格中的代码地址所对应的编译结果,可能不仅仅是该代码的编译结果,也可能是以该代码为起始的一段代码的编译结果。
表1
  关键字   内容
  100   本地代码存放的位置
  340   本地代码存放的位置
  ......   ......
  800   本地代码存放的位置
其中,关键字为100时,表明内容是应用程序的代码中位置为100开始的启动流程代码进行JIT编译后得到的本地JIT编译代码的存放位置;同样,关键字为340时,表明内容是应用程序的代码中位置为340开始的启动流程代码进行JIT编译后得到的本地JIT编译代码的存放位置;关键字为800时,表明内容是应用程序的代码中位置为800开始的启动流程代码进行JIT编译后得到的本地JIT编译代码的存放位置。
在具体实施中,以表格的方式保存JIT编译结果是因为在该方式下比较容易查找将要执行的应用程序的启动流程的代码与其对应的JIT编译结果,并且该方式易于维护,也是较为常见的保存方式。
具体实施中,应用管理器模块101,还可以用于在确认应用程序的启动流程执行结束后,通知虚拟机模块102;虚拟机模块102,还用于在获知应用程序的启动流程执行结束后,判断在该应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,从JIT编译器模块104获取应用程序的启动流程对应的JIT编译代码,并将该JIT编译代码传递给存储器管理模块103;存储器管理模块103,具体用于将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
具体实施中,应用管理器模块101,还用于在确认应用程序的启动流程执行结束后,通知JIT编译器模块104;JIT编译器模块104,还用于在获知应用程序的启动流程执行结束后,判断在该应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,将JIT编译代码传递给存储器管理模块103;存储器管理模块103,具体用于将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
基于同一发明构思,本发明实施例中还提供了一种移动设备上应用程序的启动方法,由于该方法解决问题的原理与应用程序的启动装置相似,因此该方法的实施可以参见装置的实施,重复之处不再赘述。
图2为移动设备上应用程序的启动方法的实施流程示意图,如图所示,包括如下步骤:
S201、应用管理器模块基于要运行的应用程序启动虚拟机模块运行,并控制该虚拟机模块执行该应用程序代码;
S202、虚拟机模块调用存储器管理模块分别加载该应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中,在执行每一段应用程序的启动流程代码段时,在所述JIT编译结果中查找所述要执行的启动流程代码段对应的本地JIT编译代码,并执行查找到的本地JIT编译代码。
具体实施中,移动设备上应用程序的启动方法,还可以包括:
所述虚拟机模块在所述JIT编译结果中未查找到所述要执行的启动流程代码段对应的本地JIT编译代码时,通知JIT编译器模块对所述要执行的启动流程代码段进行JIT编译,并采用解释方式执行所述要执行的启动流程代码;以及该JIT编译器模块根据该虚拟机模块的通知,确认配置所述虚拟机模块时划分的内存空间有剩余空间时,对所述要执行的启动流程代码段进行JIT编译。
具体的,应用管理器模块获取要运行的应用程序的标识信息,该标识信息可以包括该应用程序的程序名称和软件包名称;并启动虚拟机模块,同时,将获取到的标识信息传递给虚拟机模块,通过该标识信息控制虚拟机模块执行应用程序代码。虚拟机模块根据应用管理器模块传递过来的应用程序的标识信息,调用存储器管理模块分别加载应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中;并获得要执行的应用程序的第一段启动流程代码段,把它作为当前要执行的代码段;虚拟机模块查找到该代码段对应的本地JIT编译代码确认当前要执行的代码段是否有JIT编译结果,如果有,虚拟机模块执行查找到的本地JIT编译代码;否则,虚拟机模块通知JIT编译器模块,对当前要执行的启动流程代码段进行JIT编译,同时,以解释的方式执行该代码段。应用管理器模块判断应用程序的启动流程是否执行结束,如果没有结束,虚拟机模块根据该代码段的执行结果确定下一步要执行的应用程序的启动流程代码段,把它作为当前要执行的代码段,并返回执行上述判断当前要执行的启动流程代码段是否有JIT编译结果的流程,直至应用管理器模块确认应用程序的启动流程执行结束。
具体实施中,当应用管理器模块在确认应用程序的启动流程执行结束后,判断在该应用程序的启动流程执行过程中是否进行了JIT编译,如果是,则从所述JIT编译器模块获取应用程序的启动流程对应的JIT编译代码,并将获取到的JIT编译代码传递给存储器管理模块;该存储器管理模块将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
具体的,该JIT编译结果可以保存在同一外部存储器中,也可以保存在不同的外部存储器中。
具体实施中,当应用管理器模块在确认应用程序的启动流程执行结束后,还可以通知虚拟机模块;该虚拟机模块在获知应用程序的启动流程执行结束后,判断在该应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,从JIT编译器模块获取应用程序的启动流程对应的JIT编译代码,并将获取到的JIT编译代码传递给存储器管理模块;该存储器管理模块将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
具体实施中,当应用管理器模块在确认应用程序的启动流程执行结束后,还可以通知JIT编译器模块;该JIT编译器模块在获知应用程序的启动流程执行结束后,判断在所述应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,将JIT编译代码传递给存储器管理模块;该存储器管理模块将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
较佳的,本发明实施例涉及的应用程序可以为Java应用程序。
具体的,本发明实施例涉及的应用程序为Java应用程序时,移动设备上Java应用程序的启动方法,属于平台类的性能改进方法,不需要修改任何Java应用程序,适用于移动设备上所有的基于Java开发的应用程序,所涉及的移动设备包括MID(Mobile Internet Devices,移动互联网设备)、MP4(MPEG-4,Moving Picture Expert Group,动态图像专家组)、PSP(Play Station Portable,便携游戏机)以及手机等。
为了更好的理解本发明实施例的实施方式,下面通过具体的实施例对本发明的实施方式进行说明。本发明实施例以Android手机软件平台为例进行描述,Android手机软件平台的应用程序采用Java语言开发,并且其虚拟机具有JIT功能。图3为Android手机软件平台中Java应用程序启动装置的逻辑结构图,如图所示,在Android手机软件平台中,应用管理器模块分成了两个软件模块实体:ActivityManagerService和ActivityThread,其中,ActivityManagerService在单独的一个系统进程中运行,ActivityThread在应用程序的进程中运行;JIT编译器模块对应一个线程软件模块实体,在应用程序的进程中运行;存储器管理模块PackageManager,它和Java虚拟机模块分别有对应的函数/类等软件模块实体,同时,它们都在应用程序进程的主线程中运行。
本发明实施例中,以Android手机软件平台中一个Activity的启动为例进行描述。在Android中,一个Activity可以看作是一个Java应用程序,Activity的第一个窗口被显示出来就标志着其启动完毕。本发明实施例中,JIT编译结果以表格的形式存放在指定的外部存储器中。
如图4所示,为Android手机平台软件中,Activity的启动实施流程示意图,包括如下步骤:
S401、ActivityManagerService创建一个新的进程,以便运行Activity;
S402、新的进程创建Java虚拟机模块;
S403、Java虚拟机模块执行ActivityThread的代码;
S404、ActivityThread与ActivityManagerService建立通信连接;
S405、ActivityManagerService向ActivityThread发送要启动的Activity的启动流程的标识信息;
具体的,ActivityManagerService向ActivityThread发送的Activity的启动流程的标识信息中包括Activity的名称和软件包的名称等。
S406、ActivityThread将接收到的Activity的标识信息传递给Java虚拟机模块;
S407、Java虚拟机模块从PackageManager获取将要运行的Activity的代码和Activity的启动流程的JIT编译结果。
S408、Java虚拟机模块打开Activity的代码和该Activity的启动流程的JIT编译结果,并将其读入内存;
Java虚拟机模块将要Activity的代码和该Activity的启动流程的JIT编译结果后,分别存放在code(代码)存储区和JIT-cache存储区(JIT缓存)中;
具体的,PackageManager中从指定的外部存储器中读取Activity的启动流程的JIT编译结果,Java虚拟机模块将该JIT编译结果读入内存.
S409、Java虚拟机模块从code存储区获取第一段代码作为当前要执行的代码段;
S410、Java虚拟机模块确认当前要执行的代码段是否有对应的JIT编译结果,如果有,执行S412,否则,执行S411;
具体的,Java虚拟机模块以当前要执行的代码段在该Activity的代码中存放的位置作为关键字,查找JIT-cache存储区中的JIT编译结果,如果该关键字有对应的内容,则该内容就是指向存放该当前要执行的代码进行JIT编译后得到的本地JIT编译代码的指针,根据该指针,便可以获取当前要执行的代码对应的本地JIT编译代码。
S411、Java虚拟机模块以解释的方式执行当前要执行的代码,并通知JIT编译器模块编译当前要执行的代码段,并将JIT编译启动流程标识置为真,设置下一步将要执行的代码段;
S412、Java虚拟机模块执行当前要执行的代码段对应的本地JIT编译代码,设置下一条将要执行的代码段;
S413、ActivityManagerService确认Activity的启动流程结束标志是否为真,如果是,执行S415,否则执行S414;
S414、执行下一步将要执行的代码段,并返回执行S410;
由于S411或者S412中,当前要执行的代码执行完毕后,会设置下一条要执行的代码段(这是由JIT编译机制和Java虚拟机机制所保证的),将设置的下一步要执行的代码段作为当前要执行的代码段;
S415、ActivityManagerService判断JIT编译器模块启动流程标识是否为真,如果为真,执行S416,否则执行S417。
S416、保存本次启动流程中的JIT编译代码;
ActivityManagerService从JIT编译器模块获取本次Activity启动的过程中进行JIT编译的编译代码,并传递给PackageManager,PackageManager以表格的格式保存在该Activity的安装目录下。
S417、本次Activity启动流程结束。
本发明实施例通过改进JIT机制,让Java应用程序的启动流程所执行的代码段能够被JIT编译成本地JIT编译代码,并且该JIT编译结果可以保存起来,从而解决了Java应用程序启动流程最大的性能瓶颈,提高了Java应用程序的启动速度。
本发明实施例提供的一种移动设备上应用程序的启动装置及方法,在应用程序的启动过程中,应用管理器模块基于要运行的应用程序启动虚拟机模块运行,该虚拟机模块调用存储器管理模块分别加载应用程序代码、以及该应用程序的启动流程的JIT编译结果到内存中,在执行每一段应用程序的启动流程代码段时,在该JIT编译结果中查找要执行的启动流程代码段对应的本地JIT编译代码,并执行查找到的本地JIT编译代码,这样,在启动应用程序时,由于保存了对应用程序的启动流程的当前要执行的启动流程代码段的JIT编译结果,因此只需直接执行对应的JIT本地编译结果即可,无需对要执行的启动流程代码段以解释方式执行,从而提高了应用程序的启动速度。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (12)

1.一种移动设备上应用程序的启动装置,其特征在于,包括应用管理器模块、虚拟机模块和存储器管理模块,其中:
所述应用管理器模块,用于基于要运行的应用程序启动虚拟机模块运行,并控制所述虚拟机模块执行应用程序代码;
所述虚拟机模块,用于调用所述存储器管理模块分别加载所述应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中,在执行每一段应用程序的启动流程代码段时,在所述JIT编译结果中查找所述要执行的启动流程代码段对应的本地JIT编译代码,并执行查找到的本地JIT编译代码;
所述存储器管理模块,用于保存和读取应用程序代码、以及对应用程序的启动流程进行JIT编译后得到的JIT编译结果,所述JIT编译结果包括已进行JIT编译的各段启动流程代码段对应的JIT编译代码;
其中,所述应用管理器模块,具体用于:
所述应用管理器模块获取要运行的应用程序的标识信息,并在启动所述虚拟机模块运行的同时将获取到的所述应用程序的标识信息传递给所述虚拟机模块,通过所述应用程序的标识信息控制所述虚拟机模块执行所述应用程序代码;
还包括JIT编译器模块,其中:
所述虚拟机模块,还用于在所述JIT编译结果中未查找到所述要执行的启动流程代码段对应的本地JIT编译代码时,通知所述JIT编译器模块对所述要执行的启动流程代码段进行JIT编译,并采用解释方式执行所述要执行的启动流程代码;
所述JIT编译器模块,用于根据所述虚拟机模块的通知,确认所述虚拟机模块的内存空间有剩余空间时,对所述要执行的启动流程代码段进行JIT编译。
2.如权利要求1所述的装置,其特征在于,
所述虚拟机模块,还用于根据所述应用程序的标识信息,调用所述存储器管理模块分别加载应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中;获取所述应用程序的第一段启动流程代码段;在所述JIT编译结果中查找当前要执行的该第一段启动流程代码段对应的本地JIT编译代码,并在查找到该代码段对应的本地JIT编译代码时,执行查找到的本地JIT编译代码,在未查找到该代码段对应的本地JIT编译代码时,通知所述JIT编译器模块对所述应用程序当前要执行的该代码段进行JIT编译,并采用解释方式执行该代码段;如果应用程序的启动流程未执行结束,则根据该代码段的执行结果确定下一步要执行的应用程序的启动流程代码段,并返回执行上一步,直至应用程序的启动流程执行结束。
3.如权利要求1或2所述的装置,其特征在于,
所述应用管理器模块,还用于在确认应用程序的启动流程执行结束后,判断在所述应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,从JIT编译器模块获取所述应用程序的启动流程对应的JIT编译代码,并将获取到的JIT编译代码传递给存储器管理模块;
所述存储器管理模块,具体用于将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
4.如权利要求1或2所述的装置,其特征在于,
所述应用管理器模块,还用于在确认应用程序的启动流程执行结束后,通知虚拟机模块;
所述虚拟机模块,还用于在获知应用程序的启动流程执行结束后,判断在所述应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,从JIT编译器模块获取所述应用程序的启动流程对应的JIT编译代码,并将获取到的JIT编译代码传递给存储器管理模块;
所述存储器管理模块,具体用于将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
5.如权利要求1或2所述的装置,其特征在于,
所述应用管理器模块,还用于在确认应用程序的启动流程执行结束后,通知JIT编译器模块;
所述JIT编译器模块,还用于在获知应用程序的启动流程执行结束后,判断在所述应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,将所述JIT编译代码传递给存储器管理模块;
所述存储器管理模块,具体用于将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
6.如权利要求1所述的装置,其特征在于,所述应用程序包括Java应用程序。
7.一种移动设备上应用程序的启动方法,其特征在于,
应用管理器模块基于要运行的应用程序启动虚拟机模块运行,并控制所述虚拟机模块执行应用程序代码;
所述虚拟机模块调用存储器管理模块分别加载所述应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中,在执行每一段应用程序的启动流程代码段时,在所述JIT编译结果中查找所述要执行的启动流程代码段对应的本地JIT编译代码,并执行查找到的本地JIT编译代码;
其中,所述应用管理器模块基于要运行的应用程序启动虚拟机模块运行,并控制所述虚拟机模块执行所述应用程序代码,具体包括:
所述应用管理器模块获取要运行的应用程序的标识信息,并在启动所述虚拟机模块运行的同时将获取到的所述应用程序的标识信息传递给所述虚拟机模块,通过所述应用程序的标识信息控制所述虚拟机模块执行所述应用程序代码;
所述虚拟机模块在所述JIT编译结果中未查找到所述要执行的启动流程代码段对应的本地JIT编译代码时,通知JIT编译器模块对所述要执行的启动流程代码段进行JIT编译,并采用解释方式执行所述要执行的启动流程代码;以及
所述JIT编译器模块根据所述虚拟机模块的通知,确认所述虚拟机模块的内存空间有剩余空间时,对所述要执行的启动流程代码段进行JIT编译。
8.如权利要求7所述的方法,其特征在于,所述应用程序的启动流程的执行步骤,具体包括:
所述虚拟机模块根据所述应用程序的标识信息,调用存储器管理模块分别加载应用程序代码、以及应用程序的启动流程的JIT编译结果到内存中;
获取所述应用程序的第一段启动流程代码段;
所述虚拟机模块在所述JIT编译结果中查找当前要执行的该第一段启动流程代码段对应的本地JIT编译代码,并在查找到该代码段对应的本地JIT编译代码时,执行查找到的本地JIT编译代码,在未查找到该代码段对应的本地JIT编译代码时,通知所述JIT编译器模块对所述应用程序当前要执行的该代码段进行JIT编译,并采用解释方式执行该代码段;
应用管理器模块判断应用程序的启动流程是否执行结束,如果否,所述虚拟机模块根据该代码段的执行结果确定下一步要执行的应用程序的启动流程代码段,并返回执行上一步,直至应用管理器模块确认应用程序的启动流程执行结束。
9.如权利要求7至8任一项所述的方法,其特征在于,还包括:
所述应用管理器模块在确认应用程序的启动流程执行结束后,判断在所述应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,从JIT编译器模块获取所述应用程序的启动流程对应的JIT编译代码,并将所述获取到的JIT编译代码传递给存储器管理模块;
所述存储器管理模块将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
10.如权利要求7至8任一项所述的方法,其特征在于,还包括:
所述应用管理器模块在确认应用程序的启动流程执行结束后,通知虚拟机模块;
所述虚拟机模块在获知应用程序的启动流程执行结束后,判断在所述应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,从所述JIT编译器模块获取所述应用程序的启动流程对应的JIT编译代码,并将获取到的JIT编译代码传递给存储器管理模块;
所述存储器管理模块将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
11.如权利要求7至8任一项所述的方法,其特征在于,还包括:
所述应用管理器模块在确认应用程序的启动流程执行结束后,通知JIT编译器模块;
所述JIT编译器模块在获知应用程序的启动流程执行结束后,判断在所述应用程序的启动流程执行过程中是否进行了JIT编译,并在判断结果为是时,将所述JIT编译代码传递给存储器管理模块;
所述存储器管理模块将接收到的应用程序的启动流程的JIT编译代码保存在指定的外部存储器中。
12.如权利要求7所述的方法,其特征在于,所述应用程序包括Java应用程序。
CN201010504978.3A 2010-10-09 2010-10-09 一种移动设备上应用程序的启动方法及装置 Active CN101957770B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201010504978.3A CN101957770B (zh) 2010-10-09 2010-10-09 一种移动设备上应用程序的启动方法及装置
EP11830194.4A EP2521033B1 (en) 2010-10-09 2011-02-21 Startup method and device for application program on mobile device
PCT/CN2011/071142 WO2012045238A1 (zh) 2010-10-09 2011-02-21 一种移动设备上应用程序的启动方法及装置
US13/575,550 US8726249B2 (en) 2010-10-09 2011-02-21 Bootup method and device for application program in mobile equipment

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010504978.3A CN101957770B (zh) 2010-10-09 2010-10-09 一种移动设备上应用程序的启动方法及装置

Publications (2)

Publication Number Publication Date
CN101957770A CN101957770A (zh) 2011-01-26
CN101957770B true CN101957770B (zh) 2015-09-02

Family

ID=43485112

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010504978.3A Active CN101957770B (zh) 2010-10-09 2010-10-09 一种移动设备上应用程序的启动方法及装置

Country Status (4)

Country Link
US (1) US8726249B2 (zh)
EP (1) EP2521033B1 (zh)
CN (1) CN101957770B (zh)
WO (1) WO2012045238A1 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101957770B (zh) 2010-10-09 2015-09-02 中兴通讯股份有限公司 一种移动设备上应用程序的启动方法及装置
KR101930510B1 (ko) * 2011-09-16 2018-12-19 삼성전자주식회사 네트워크 상의 객체 검색 방법 및 시스템
CN102508694B (zh) * 2011-10-14 2015-05-06 深圳市江波龙电子有限公司 一种虚拟机文件运行方法及系统
CN103324508A (zh) * 2013-06-26 2013-09-25 宇龙计算机通信科技(深圳)有限公司 启动应用的方法及装置
US9363264B2 (en) * 2013-11-25 2016-06-07 At&T Intellectual Property I, L.P. Networked device access control
CN103824004A (zh) * 2014-02-26 2014-05-28 可牛网络技术(北京)有限公司 应用程序的保护方法和装置
CN103927207B (zh) * 2014-04-10 2017-07-25 安一恒通(北京)科技有限公司 软件加速方法和装置
US9286085B2 (en) * 2014-06-27 2016-03-15 International Business Machines Corporation Correlating class loader objects across execution environments
CN104536728B (zh) * 2014-12-01 2017-12-22 苏州乐米信息科技有限公司 手机游戏轻量化方法
US9424006B2 (en) 2014-12-24 2016-08-23 International Business Machines Corporation. Execution optimization of mobile applications
US9696973B1 (en) * 2016-02-24 2017-07-04 Semmle Limited Compilation cache with imports scanner
CN107450937B (zh) * 2016-05-31 2021-02-19 中兴通讯股份有限公司 一种应用程序的运行方法和运行装置
CN107657172A (zh) * 2016-07-25 2018-02-02 腾讯科技(深圳)有限公司 代码处理方法、装置及系统
US10474568B2 (en) * 2017-09-20 2019-11-12 Huawei Technologies Co., Ltd. Re-playable execution optimized for page sharing in a managed runtime environment
US11243790B2 (en) * 2017-09-20 2022-02-08 Huawei Technologies Co., Ltd. Re-playable execution optimized for page sharing in a managed runtime environment
CN108334325A (zh) * 2017-12-26 2018-07-27 努比亚技术有限公司 一种编译方法、计算机及计算机可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1821964A (zh) * 2005-02-18 2006-08-23 国际商业机器公司 将本机函数内嵌到编译的Java代码中的方法和系统
CN100354826C (zh) * 2001-11-07 2007-12-12 富士通株式会社 配有jit编译器的虚拟计算机及其方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002073345A (ja) 2000-08-25 2002-03-12 Fujitsu Ltd 情報処理装置及び記録媒体
US6779188B1 (en) * 2000-09-28 2004-08-17 International Business Machines Corporation Apparatus and method for improved devirtualization of method calls
JP2005284729A (ja) 2004-03-30 2005-10-13 Fujitsu Ltd バイトコードをネイティブコードにコンパイルする仮想マシン
US7568190B2 (en) * 2005-03-08 2009-07-28 International Business Machines Corporation Late binding of optimization information for just in time compilation
US8286152B2 (en) * 2007-08-22 2012-10-09 International Business Machines Corporation Systems, methods, and computer products for just-in-time compilation for virtual machine environments for fast application startup and maximal run-time performance
JP2009211190A (ja) * 2008-02-29 2009-09-17 Hitachi Ltd 情報処理装置
CN101957770B (zh) 2010-10-09 2015-09-02 中兴通讯股份有限公司 一种移动设备上应用程序的启动方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100354826C (zh) * 2001-11-07 2007-12-12 富士通株式会社 配有jit编译器的虚拟计算机及其方法
CN1821964A (zh) * 2005-02-18 2006-08-23 国际商业机器公司 将本机函数内嵌到编译的Java代码中的方法和系统

Also Published As

Publication number Publication date
EP2521033A4 (en) 2013-11-06
US8726249B2 (en) 2014-05-13
US20120304166A1 (en) 2012-11-29
EP2521033B1 (en) 2015-10-21
WO2012045238A1 (zh) 2012-04-12
CN101957770A (zh) 2011-01-26
EP2521033A1 (en) 2012-11-07

Similar Documents

Publication Publication Date Title
CN101957770B (zh) 一种移动设备上应用程序的启动方法及装置
CN105718287B (zh) 一种智能终端的程序流式执行方法
US9710288B2 (en) Method and device for loading application program
CN104182255A (zh) 一种系统应用的库文件升级方法及终端
CN109144533B (zh) 一种应用程序的更新及加载的方法、系统及计算机装置
CN101937356B (zh) 一种编译WebKit浏览器的方法及装置
CN100530108C (zh) 一种调用函数的方法及系统
CN104915224A (zh) 一种关联应用程序的处理方法及装置
CN108765158A (zh) 一种基于区块链的智能合约引擎系统及其合约执行方法
CN102073526B (zh) 用于移动终端的软件转移安装方法及系统
CN102799484A (zh) 移动终端运行多操作系统的方法及装置
CN102667714B (zh) 支持访问由操作系统环境外的资源提供的功能的方法和系统
CN108958730A (zh) 应用程序组件共享方法及装置、终端设备及可读存储介质
WO2019205828A1 (zh) Android服务框架、实现扩展服务的方法及装置
CN102567033A (zh) 基于嵌入式实时Java虚拟机的预先类加载方法及装置
CN103377079A (zh) 终端及其应用运行装置和方法,运行应用程序的方法
CN105320558A (zh) 一种移动终端及其启动的方法
KR20060028567A (ko) 가상 머신 어플리케이션을 실행하는 방법 및 그 방법을이용한 디지털 방송 수신기
CN107977572B (zh) 一种应用程序运行方法和装置、智能终端
US6799185B2 (en) Frameworks for accessing Java class files
CN101539867B (zh) 动态二进制翻译系统中可重定向的寄存器分配方法
CN112487092A (zh) 一种基于区块链的智能合约调用方法及装置
CN100549958C (zh) 一种类文件装载方法和系统
CN113791870B (zh) 一种WebAssembly虚拟机分布式系统细粒度迁移方法及系统
CN110659085A (zh) 一种Linux内核模块中有限数量函数重载的方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant