选择性运行应用内的计算方法的本地机器代码的方法及相关设备与流程

文档序号:11285923阅读:200来源:国知局
本发明有关于一种具有虚拟机的计算系统的软件管理。
背景技术
::虚拟机(virtualmachine,vm)是一个机器(例如计算机)的软件仿真实施,用来执行更高级的程序。vm提供独立于程序环境的平台,可以不考虑下层的硬件或操作系统(operationsystem,os),并且能够让高级程序在任何平台上都以同样方式执行。一种类型的vm,有时被称作受管运行时期环境(managedruntimeenvironment,mre),其在主机os上运行来给一个流程提供一个仿真环境。这样的vm的一个例子是java虚拟机(jvm)。要在vm提供的仿真环境中运行,高级程序(例如java)会被编译为特定字节代码(bytecode)格式。然后,vm或者编译或者翻译字节代码为可执行机器代码,以在一个真实的硬件机器(例如arm处理器,x86处理器等等)上运行。安卓(android)是一个常用的基于linux内核的移动架构。安卓运行时期环境(androidruntime,art)是安卓中一些应用或程序服务所用的vm。art以dalvikexecutable(dex)格式来运行字节代码,以产生目标设备的机器代码。一个dex文件(.dex)保存一组类定义(classdefinitions)以及对应数据。art引入静态(ahead-of-time,aot)编译,在第一次加载、第一次启动或第一次运行时,统计学地将应用提前编译为为本地机器代码(nativemachinecode)。相比于其前辈(例如dalvik),art改善了整体运行效率并降低了功耗,这能导致移动设备具有更好的电池连续使用时间。同时,art带来更快的应用运行、更好的存储分配以及垃圾收集(garbagecollection,gc)机制、新的应用调试特性,更精准的高级应用分析。art通过使用设备上功能dex2oat来将应用编译为本地机器代码。通常在应用安装时间,该功能接收以dex文件为输入的应用封包,产生可供目标设备执行的编译的本地机器代码。本地机器代码是针对特定硬件处理器的本地二进制代码,并且格式为可执行与可链接的格式(executableandlinkableformat,elf)。本地机器代码的文件名具有.oat的后缀,并被称作oat文件。相比于dex文件,oat文件具有更快的运行时间。可是,oat文件占用比dex字节代码文件大的储存空间(例如每个应用都要大2-3倍)。当前的安卓系统默认使用oat文件,并仅在没有oat文件可用的情况下使用dex文件。如移动设备的低成本计算或通信设备,一般有较小的随机存取存储器(ram)空间来让vm载入可执行文件。因此,在这样的低成本设备上提供一个经济的运行环境成为硬件与软件开发者的挑战。技术实现要素:因此,本发明为了减少移动设备上的vm运行可执行文件的ram空间,特提供以下的选择性运行应用内的计算方法的本地机器代码的方法及相关设备。本发明的一方面提供一种选择性运行应用内的计算方法的本地机器代码的方法,该方法包含:基于该计算方法的可用统计分析数据,在该应用运行前,决定该计算方法的预测使用水平;根据该预测使用水平是否超过阈值的决定,选择该计算方法的可执行码来运行,其中该可执行码是该计算方法的该本地机器代码或字节代码之一;以及当该应用运行中调用该计算方法时,将选择的该可执行码从非易失性存储器载入存储器以用虚拟机运行。本发明另一方面提供一种包含处理电路与存储器的设备,该存储器包含可由该处理电路执行以在应用内选择性运行计算方法的本地机器代码的指令,其中该设备用来:在该应用运行前,基于该计算方法的可用统计分析数据,确定该计算方法的预测使用水平;根据该预测使用水平是否超过阈值的确定,选择该计算方法的可执行码来运行,其中该可执行码是该计算方法的该本地机器代码或字节代码之一;以及在该应用运行期间当该计算方法被调用时,将该选择的该可执行码从非易失性存储器载入存储器来由虚拟机运行。本发明所提出的选择性运行应用内的计算方法的本地机器代码的方法及相关设备的ram使用可以大幅减少,因字节代码的尺寸比本地机器代码的尺寸小。本发明的这些及其他的目的对于本领域的技术人员来说,在阅读了下述优选实施例的详细说明以后是很容易理解和明白的,所述优选实施例通过多幅图予以揭示。附图说明图1显示根据本发明一实施例的安卓软件架构100。图2显示根据本发明一实施例的执行本地机器代码的可选运行的计算系统。图3显示根据本发明一实施例的计算系统或设备所执行的可选运行流程300。图4显示根据本发明一实施例的可选运行的收集统计的方法400的流程图。图5a显示根据本发明的一实施例的编译时间统计收集机制。图5b显示根据本发明一实施例的运行时间统计收集机制。图6显示根据本发明一实施例的本地机器代码的可选运行的方法600的流程图。具体实施方式本说明书及权利要求书使用了某些词语代指特定的组件。本领域的技术人员可理解的是,制造商可能使用不同的名称代指同一组件。本文件不通过名字的差别,而通过功能的差别来区分组件。在以下的说明书和权利要求书中,词语“包括”是开放式的,因此其应理解为“包括,但不限于...”。本发明的实施例提供一种计算方法的本地机器代码的可选运行方法。该计算方法,也叫做“方法”,该计算方法存在于一个应用中,该应用可能包含多个计算方法。该应用可预装在设备上或先下载(例如通过闪存等工具或从空中(overtheair,ota)下载)然后再安装到设备上。当应用装到设备上,应用的每个方法的字节代码编译为对应的本地机器代码。当在设备运行该应用时(例如开始运行)时,所揭露的可选运行机制,根据预测的使用水平,选择应用中每个方法是用本地机器代码还是字节代码来运行。在一个实施例中,预测使用水平是基于编译时间统计(compile-timestatistics),分析数据(profilingdata),或者两者结合。计算方法的分析数据是任何设备的之前运行时间数据统计(包含应用安装的设备以及类似设备),同样的方法在这些设备上曾经运行过。当计算方法这样的统计不可用或者无法存取设备,那么该设备可默认运行方法的字节代码。在方法运行之前,仅当该方法的预测使用水平高于一个既定阈值时,选择方法的编译代码(即本地机器代码)。在后续的说明中,可选运行机制以安卓软件的内容进行说明。需要理解的是,可选运行机制可以在任何提供翻译或编译字节代码为机器代码的软件环境中实施。而且,虽然后续说明中会用到特定的字节代码及机器代码文件格式,程序语言以及功能,但是需要理解的是,可选运行机制可运用在任何字节代码与机器代码文件格式、程序语言及功能中。在下文的部分说明中,java应用程序语言以及其软件相关架构是举例说明;需要理解的是,可选运行机制可应用到非java的另外程序语言所构建的vm产生的机器代码。图1显示根据本发明一实施例的安卓软件架构100。架构100有五层组成。(1)内核110(例如linux内核),其负责基本系统功能,例如流程管理,存储器管理,电源管理,资源存取以及设备驱动。(2)库120,提供一组由c或c++程序语言编写的本地库,包含libc,sqlite,webkit等等。(3)安卓运行时期环境(androidruntime)130,其为具有运行应用程序(例如java代码)的核心库的vm。核心库中的一个功能是一个dex2oat,用于从dex字节代码产生本地机器代码。另外,vm还包含一个选择器180,其通过选择vm运行的机器代码或字节代码来实施该可选运行机制。(4)安卓架构(androidframework)140,其通过java类与接口给应用提供更高级的服务。这些服务的例子包含,但不限于,管理、安装及卸载应用包的封包管理服务(packagemanagerservice,pms),以及管理所有与用户交互的活动管理服务(activitymangerservice,ams)。(5)应用150,其是以高级程序语言(例如java)编写的程序。关于应用150,通常,应用150是分发且安装的安卓应用包。一个应用包包含程序及应用必要文件,而且可以被压缩,例如以zip格式。当应用包被安装到设备上,设备可从应用包提取应用的字节代码。图2显示根据本发明一实施例的执行本地机器代码的可选运行的计算系统。在一个实施例中,计算系统是设备200,例如移动设备或主机,用来执行计算及/或通信操作。设备200包含一个或多个处理器210(也被叫做中央处理器(cpu)),每个处理器包含一个或多个核心212。每个核心212运行本地机器代码。另外,一个或多个核心212控制一个或多个vm在一个软件仿真环境下运行应用字节代码,例如图1中的安卓软件架构100。设备200还包含易失性存储器230(例如存代码与数据的ram,其能在代码运行时快速存取。设备200还包含非易失性存储器250(例如闪存存储,磁性数据存储设备,光磁数据存储设备等等)来储存系统镜像(systemimage),应用包(例如.apk文件),数据快取(datacache)文件,本地机器代码及字节代码等等。一般来讲,非易失性存储器250的大小至少比易失性存储器230的大小一到两个数量级。设备200还包含互连240(在一些系统中也被叫做总线)来互连到处理器210,易失性存储器230与非易失性存储器250。在一些实施例中,设备200还包含外围设备,例如显示器,摄像头,调制解调器,网络接口等等。在一个实施例中,设备200的一个或多个核心212如下文所述执行本地机器代码的可选运行机制。图3显示根据本发明一实施例的计算系统或设备所执行的可选运行流程300。流程300从应用310开始,其包含一组方法311,这些方法由静态(ahead-of-time)编译器320从字节代码编译为本地机器代码。编译器320在编译中对应用310执行统计分析。编译器320所执行的统计分析的一个例子会根据图5a来说明。编译器的输出,包含每个方法311的编译器分析结果331与本地机器代码334,储存于非易失性存储器250中。非易失性存储器250也存储每个方法311的字节代码333。在一个实施例中,非易失性存储器250还包含方法311的分析数据332,其包含设备200之前运行应用310所得到的之前运行时间统计,或由其他设备产生并下载到设备200的之前运行时间统计。在一个实施例中,vm340实做在设备200中来运行应用310。当启动应用310时(即开始运行),vm340用选择器180来确定每个方法311,是否要运行其字节代码333或其本地机器代码334。选择器180基于编译器分析结果331,分析数据332或两者结合,计算或产生每个方法的预测使用水平。如果一个方法的预测使用水平超过第一阈值,这表示该方法是“热的”---就是说,该方法被预测经常使用,接着选择器180选择方法的本地机器代码334来运行。如果方法的预测使用水平没有超过第一阈值,选择器180选择该方法的字节代码333来运行。这时,方法的本地机器代码334与字节代码333都没有加载进vm340(即从非易失性存储器250加载到分配给vm340的易失性存储器230空间)。当应用已经运行且该方法被调用时,接着vm340根据选择器180的启动时间决定(launch-timedetermination)或选择来加载该方法的本地机器代码334或字节代码333。vm340包含本地代码运行单元(nativecodeexecutionunit)350来运行该方法的本地机器代码334,以及翻译器(interpreter)360来运行该方法的字节代码333。如果该方法在应用310运行中从来没被调用过,那么该方法的本地机器代码334或字节代码333都不会加载进vm340。在一个实施例中,某个方法的编译器分析结果331与分析数据332可能都不可用,或不存在,或对应预测使用水平不具决定性。因此,默认地,选择器180为该方法选择由翻译器260运行字节代码330。选择器180可选择字节代码333与本地机器代码334的任何组合来运行应用310的方法311。也就是说,选择器180可对一些方法311选择字节代码,而对另一些方法311选择本地机器代码334。一些情况下,选择器180可对所有方法311选择字节代码333;而在其他情况下,选择器180可对所有方法311选择本地机器代码334。在一个实施例中,可选机制是动态的;也就是说,字节代码运行可以在运行时间切换到本地机器代码运行。在本实施例中,翻译器360在字节代码333运行中收集运行时间统计。运行时间统计收集的一个例子在图5b中描述。翻译器360在运行时间中将运行时间统计报告给选择器180。选择器180判断运行时间统计是否表明一个方法的运行时间使用水平(runtimeusagelevel)超过第二阈值。如果运行时间使用水平超过第二阈值,选择器180将该方法的选择从字节代码333改变为本地机器代码334。这样选择改变的结果,该方法的本地机器代码334会在下次该方法被调用的时候被载入vm340。图4显示根据本发明一实施例的可选运行的收集统计的方法400的流程图。方法400可由计算系统或设备运行,例如图2中的设备200。对于下载的应用430来说,方法400从步骤401开始,设备从应用包取得字节代码。应用包包含应用,该应用包含一组方法。在步骤402,设备上的编译器将字节代码编译为本地机器代码并在编译时对方法执行统计分析。对于一个已经被编译的预装应用450,其本地机器代码与编译时间统计(compile-timestatistics)可已被产生并存储到设备中,且步骤401与步骤402可被跳过。在步骤403中,设备(更具体地是,图3的vm340或选择器180)基于编译时间统计与分析数据决定每个方法的预测使用水平,如果有可用的编译时间统计或分析数据。在步骤404中,选择器180决定每个方法的预测使用水平是否超过第一阈值th1。如果预测使用水平没有超过th1,选择器180选择方法的字节代码。如果预测使用水平超过th1,选择器180选择方法的本地机器代码。另外,如果方法的统计分析数据(即编译时间统计与分析数据)不可用,选择器180选择方法的字节代码。当调用方法时,在应用的运行期间,如果选择了字节代码,那就将该方法的字节代码在步骤405载入vm340并运行。如果选择了本地机器代码,当调用该方法在该应用运行期间,方法的本地机器代码在步骤406被载入vm340并运行。当一个方法的字节代码运行的运行时间,图3的翻译器360收集其运行时间统计而该选择器180基于运行时间统计确定并监控运行时间使用水平。如果在步骤407给定方法的运行时间使用水平超过第二阈值th2,那么选择给定方法的本地机器代码。当下次调用该方法时,其本地机器代码在步骤409被载入vm340并运行。如果在步骤407该方法的运行时间使用水平没有超过th2,那翻译器360在步骤408继续运行该方法的字节代码。在一个实施例中,字节代码运行的运行时间使用水平在运行时间内被持续监控;也就是说,步骤408可返回步骤407。在运行中的任何点当该方法的运行时间统计超过th2,选择该方法的本地机器代码。图5a显示根据本发明的一实施例的编译时间统计收集机制。在此实施例中,编译器在编译时对每个应用中的每个方法执行统计分析,一般在应用装到设备上时。举例来说,编译器可对一方法分配更高的预测使用水平(例如方法_a),其具有回路(例如回路510),其可被回路所涉及(例如方法_b的回路520)或者两者结合。另外,编译器可分配给另一不具有回路或不被回路涉及的方法分配一个更低的预测使用水平。图5b显示根据本发明一实施例的运行时间统计收集机制。在本实施例的方法_c中,翻译器给每个运行字节代码或运行一部分字节代码的方法设一个计数器。当字节代码的运行到达方法的进入点530或退出点540时,以及当碰到方法的后边缘550时,计数器就加一。后边缘550的一个例子是“goto”语句,执行“goto”语句会使运行跳转到方法中较前的一个点。后边缘550的运行增加了计数器值,因为字节代码的一部分反复运行了。运行时间使用水平是计数器值或从计数器值计算得到。在一个实施例中,从一个或多个设备上收集的运行时间统计可被载入并被另一设备作为分析数据使用。在另一实施例中,收集设备上之前运行的方法的运行时间统计可作为同个设备或类似设备后续该方法运行的分析数据。图6显示根据本发明一实施例的本地机器代码的可选运行的方法600的流程图。方法600可以由计算系统或设备运行,例如图2中的设备200。在一个实施例中,方法600可由图3的vm340运行。在步骤610中,在应用运行之前,vm基于一计算方法的可用统计分析数据(availablestatisticalanalysisdata)决定该计算方法的预测使用水平。在步骤620,vm中的选择器(例如图3中的选择器180)根据判断预测使用水平是否超过阈值来选择计算方法的可执行码来运行。可执行码是计算方法的本地机器代码与字节代码的一种;也就是说,计算方法的本地机器代码或字节代码。如果没有可用的统计分析数据(statisticalanalysisdata),选择器默认选择字节代码。该选择在应用运行前作出。在步骤630中,当在应用运行期间,调用该计算方法时,vm将选择的可执行码从非易失性存储器载入到存储器来运行。非易失性存储器与易失性存储器的例子是分别如图2中所示的非易失性存储器250与易失性存储器230。在一个实施例中,应用可包含多种计算方法。每种计算方法可由方法600如上所述的步骤610-630那样执行。如图3、图4及图6所示的方法与流程描述了一种可由移动设备执行的可选运行机制,移动设备具有比内部存储小得多的ram空间(例如小一个到两个数量级)。可选运行机制仅在当一方法在运行时间前被预测或在运行时间中被发现具有高使用水平(highusagelevel)的时候才将本地机器代码载入ram。一个在运行时间前被预测具有低使用水平,并在运行时间内保持低使用水平的方法将其字节代码载入ram。如果一个方法在运行时间内从没被调用就不会被载入到ram中。因此,ram使用可以大幅减少,因字节代码的尺寸比本地机器代码的尺寸小。本领域的技术人员将注意到,在获得本发明的指导之后,可对所述装置和方法进行大量的修改和变换。相应地,上述公开内容应该理解为,仅通过所附加的权利要求的界限来限定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1