CN105359090A - 用于移动应用的***和方法 - Google Patents
用于移动应用的***和方法 Download PDFInfo
- Publication number
- CN105359090A CN105359090A CN201480032368.4A CN201480032368A CN105359090A CN 105359090 A CN105359090 A CN 105359090A CN 201480032368 A CN201480032368 A CN 201480032368A CN 105359090 A CN105359090 A CN 105359090A
- Authority
- CN
- China
- Prior art keywords
- application
- code
- target device
- syllabified
- native
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 160
- 230000008569 process Effects 0.000 claims abstract description 30
- 238000004458 analytical method Methods 0.000 claims description 3
- 238000004590 computer program Methods 0.000 claims description 3
- 230000001133 acceleration Effects 0.000 description 82
- 238000013519 translation Methods 0.000 description 39
- 238000005516 engineering process Methods 0.000 description 27
- 230000006870 function Effects 0.000 description 19
- 230000015654 memory Effects 0.000 description 16
- 238000005457 optimization Methods 0.000 description 15
- 238000004891 communication Methods 0.000 description 5
- 238000012790 confirmation Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000010998 test method Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 241001481833 Coryphaena hippurus Species 0.000 description 1
- 241000304405 Sedum burrito Species 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/64—Retargetable
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
公开了用于提高移动应用的性能的***和方法。示例性方法可以包括接收对应用的请求,其中该请求可以包括目标设备信息。该方法还可以确定应用是否之前已经被高速缓存。如果应用还没有高速缓存,则该方法能够将应用作为字节代码下载并且利用提前编译器将该字节代码处理成本机代码格式。该方法还可以经网络将本机代码格式的该应用提供给目标设备。
Description
对相关申请的交叉引用
本申请涉及于2013年4月26日提交的美国临时申请序列No.61/816,461、于2013年8月28日提交的美国临时申请序列No.61/871,075,其中每一个都通过引用整体被并入本文并且要求其优先权。
技术领域
所公开的主题涉及用于提高移动应用的性能的技术。
背景技术
某些移动应用可以用诸如Java或.NET的语言来编写。开发者可以利用诸如Java或.NET的语言来编写应用、将应用编译为字节代码,并且利用兼容的虚拟机(VM)在许多平台上运行该应用。诸如Java或.NET的语言允许开发者避免某些低级问题,诸如存储器管理。此外,诸如Java或.NET的语言还可以提供可移植性和安全性特征,这些特征例如使浏览器能够运行不受信任的小程序。
但是,诸如Java或.NET的语言还会需要比本机代码所需的更高的开销。例如,与本机执行相比,字节代码解释会涉及超过10倍的速度减小。虽然诸如即时编译(JIT)的现有技术可以通过将字节代码编译为本机代码格式来提高性能,但是JIT会花时间来执行并且减小应用响应时间。此外,由于移动环境中的CPU和电池约束以及更快地对用户作出响应的需求,诸如JIT的某些现有技术会具有减少的功能性,诸如全局优化。此外,提前编译(AOT)可以代替JIT而被使用。由于缺乏运行时信息,由AOT产生的代码会比原始字节代码需要更多的文件***空间。照此,存在提高移动应用的性能的需求。
发明内容
本文公开了用于提高移动应用的性能的***和方法。
在所公开主题的一方面,公开了用于经网络将应用以被目标设备使用的本机代码格式提供给目标设备的技术。示例性方法可以包括接收对该应用的请求,该请求包括目标设备信息。该方法还可以确定该应用是否之前已经被高速缓存,并且如果还没有的话,就将该应用作为字节代码下载并且利用提前编译器将该字节代码处理成本机代码格式。该方法还可以经该网络将本机代码格式的该应用提供给目标设备。
在一些实施例中,该方法还可以包括接收请求,该请求包括诸如设备类型、操作***版本和平台版本的目标设备信息。在一些实施例中,该方法还可以包括,如果该本机代码格式的应用还未被高速缓存的话,就高速缓存该应用。
所公开的主题还提供用于经网络将应用以被目标设备使用的本机代码格式提供给目标设备的装置。示例性装置可以包括处理器和存储器。该装置还可以包括存储在存储器中的计算机程序指令,该指令在被处理器执行时使处理器执行某些操作。这些操作可以包括接收对该应用的请求,其中该请求可以包括目标设备信息。该指令还可以包括确定该应用是否已经被高速缓存,并且如果该应用还未被高速缓存的话,就将该应用作为字节代码下载并且利用提前编译器将该字节代码处理成本机代码格式。该指令还可以包括经该网络将本机代码格式的该应用提供给目标设备。
在一些实施例中,处理是由应用开发者服务器执行的。在一些实施例中,处理是由应用中介(broker)服务器执行的。在其它实施例中,处理是由目标设备执行的。在一些实施例中,目标设备可以执行字节代码和本机代码当中的至少一种。
附图说明
图1示出了根据所公开的主题的示例性***。
图2示出了根据所公开的主题、用于经网络将应用以本机代码格式提供给目标设备的示例性方法。
图3示出了根据所公开的主题、用于经网络将应用以本机代码格式提供给目标设备的备选示例性方法。
图4示出了根据所公开的主题的示例性***体系架构。
图5A和图5B示出了根据所公开的主题的示例性解释器。
图6示出了根据所公开的主题的示例性解释器的进一步细节。
图7示出了根据所公开的主题的示例性翻译器。
具体实施方式
给出了用于提高移动应用的性能的技术。示例性技术包括接收对应用的请求,其中该请求可以包括目标设备信息。方法还可以确定,例如,本机代码格式的应用是否之前已经被高速缓存,并且如果应用还未被高速缓存的话,就将应用作为字节代码下载或者要求目标设备上传字节代码。该方法还提供利用提前编译器将该字节代码处理成本机代码格式。该方法还可以经该网络将本机代码格式的应用提供给目标设备。
图1示出了根据所公开的主题的示例性***。参照图1,当用户101想要下载应用时,她的设备101可以向应用加速器103发送请求。应当理解的是,设备101可以是目标设备101。请求可以经网络107被发送。请求可包括诸如设备类型和***版本的信息。
应用加速器103可以确定这是否是第一次对给定的环境请求该应用。如果是第一次,则应用加速器103可以从应用源105下载该应用。可以理解的是,应用源105可以是应用中介105。所下载的应用可以是字节代码版本。在一种实施例中,预处理后的字节代码(例如依赖于平台的字节代码)可以从应用中介105或应用源105被接收。然后,应用加速器103可以将该应用编译为可在用户的设备101中执行的本机代码格式。在一种实施例中,应用加速器103可以将应用的字节代码的一部分处理成本机代码格式。在另一种实施例中,应用加速器103可以执行诸如概要分析(profiling)的技术,以确定应用中要转换为本机代码的部分。在一个例子中,应用的选定部分可以被选择并且用于应用的该选定部分的字节代码可以被转换为本机代码。在一种实施例中,应用加速器103可以接收例如通用字节代码或预处理后的字节代码。本机代码可以包括优化后的代码。然后,应用加速器103可以高速缓存该应用的本机版本。这可以使应用加速器103能够摊销(amortize)编译成本并且更快地响应来自相同设备类型和操作***版本的后续请求。应当理解的是,应用加速器103可以驻留在设备101中或在设备101外面。
在示例性软件分发模型中,开发者可以在可移除介质中或者通过在线网站装运他们的软件。在这种模型中,字节代码可以为意欲在许多不同平台上运行的软件提供出色的可移植性,因为开发者难以跟踪不同的用户设备并且非专业用户难以选择正确的软件版本。但是,在目前的应用分发模型中,应用源105或应用中介可以确定关于应用的信息,例如,用户正在从其下载应用的设备101和***版本。例如,从Android的应用商店(GooglePlay)下载应用的协议指定设备类型101和AndroidSDK版本,GooglePlay使用设备类型101和AndroidSDK版本来过滤掉与设备不兼容的应用。
在一种实施例中,给定设备和***配置,应用源105可以随后AOT-编译字节代码并为特定设备类型将字节代码应用优化成本机代码,同时对开发者和用户二者都保持透明。在一个例子中,字节代码的可移植性会随着中介管理或者应用源管理的可移植性而消失。此外,某些移动平台可以在***级别强化安全性。例如,Android可以为每个被安装的应用分配不同的用户标识符(UID),从而隔离应用的数据与执行。这会使由字节代码提供的安全性不那么有吸引力。而且,由于用户已经信任应用源105不向应用添加恶意,因此它们可以让应用源105代表它们在装运AOT-编译的本机代码之前验证字节代码。
在一种实施例中,目标设备101可以加载并执行例如以下二者:(1)从应用源105下载的字节代码格式(例如通用字节代码格式)和(2)从应用加速器103下载的本机代码格式。这可以使目标设备101能够选择性地将字节代码应用翻译成本机代码格式。在另一种示例实施例中,用户可以手动选择要优化哪些应用。在一个例子中,用户应用可以在设备101上显示被优化的应用并且可以允许用户选择优化其它应用。在另一种示例实施例中,程序可以被提供,以确定哪些应用可以自动被优化。该决定可以根据不同的标准做出。例如,标准可以包括但不限于应用使用的频次。标准还可以包括AOT的效率。
在一种实施例中,从应用源105中下载的字节代码可以在AOT编译之前被预处理成依赖于平台的字节代码。预处理字节代码可以包括但不限于预链接、预验证和预优化等等。通过允许使用诸如链接信息的特定于设备的运行时信息,使用预处理后的字节代码作为AOT编译的输入可以使编译器能够与JIT编译器一样产生例如高效的本机代码。在一种实施例中,目标设备101的平台信息可以被用来确定如何预处理字节代码。平台信息可以包括但不限于,诸如操作***版本和框架版本以及预先安装的应用的版本等等信息。在一个例子中,应用加速器103可以使用平台信息在编译之前为目标设备101产生预处理的字节代码。如果应用加速器103不具有足够的信息来为目标设备101预处理字节代码,则应用加速器103可以要求目标设备101将目标设备101上预处理后的字节代码上传到应用加速器103。
在一些实施例中,应用分发路径中的机器之一,诸如开发机器或应用中介服务器105,可以执行处理。在一些实施例中,分发路径之外的机器可以执行处理。在一些实施例中,处理可以在目标设备101上执行。
为了本公开内容的目的,应用加速器103可以包括随机存取存储器(RAM)、诸如直接存取存储设备(例如,硬盘驱动或软盘驱动)、顺序存取存储设备(例如,带式盘驱动)、紧凑盘、CD-ROM、DVD、RAM、ROM、电可擦除可编程只读存储器(EEPROM)和/或闪存存储器的存储介质。应用加速器103还可以包括处理器,其可以包括被配置为执行与所公开的主题相关联的功能、技术和处理任务的处理逻辑。应用加速器103的附加部件可以包括一个或多个盘驱动。应用加速器103可以包括用于与外部设备通信的一个或多个网络端口。应用加速器103还可以包括键盘、鼠标、其它输入设备等等。应用加速器103还可以包括视频显示器、手机、其它输出设备等等。网络107可以包括通信介质,诸如导线、光纤、微波、无线电波及其它电磁载波和/或光学载波和/或前述的任意组合。
图2示出了根据所公开的主题、用于经网络107将改进的应用以目标设备101所使用的本机代码格式从应用源105提供给目标设备101的示例性方法。参照图2,在一种实施例中,应用加速器103可以从目标设备101接收对应用的请求(201)。例如,该请求可以包括目标设备101的信息以及目标设备101的操作***。在一个例子中,应用加速器103随后可以确定应用是否之前已被高速缓存(203)。这可以包括确定应用是否之前已被下载或获得或者应用是否已经被转换为用于目标设备101的类型的本机代码格式。
在一个例子中,如果应用还没有被高速缓存,则应用从应用源105被下载或获得(205)。应当理解的是,应用源105可以是应用中介。当获得该应用时,应用加速器103随后可以将该应用(可能是字节代码形式)处理为用于目标设备101的本机代码格式(207)。在一个例子中,整个应用被转换为本机代码格式。在另一个例子中,应用的一些部分被转换为本机代码格式。在一个例子中,应用加速器103随后可以向目标设备101提供本机代码格式的应用(209)。
图3示出了根据所公开的主题、用于经网络107将改进的应用以目标设备101所使用的本机代码格式从应用源105提供给目标设备101的示例性方法。参照图3,在一种实施例中,应用加速器103可以从目标设备101接收对应用的请求(201)。在一个例子中,应用加速器103随后可以确定应用是否之前已被高速缓存(203)。这可以包括确定应用是否之前已被下载或获得或者应用是否已经被转换为用于目标设备101的类型的本机代码格式。在一个例子中,如果应用还没有被高速缓存,则应用从应用源105被下载或获得(205)。当获得该应用时,应用加速器103可以将该应用(可能是字节代码形式)处理为用于目标设备101的本机代码格式(207)。在一个例子中,应用加速器可以例如以本机代码格式高速缓存该应用(301)。然后,应用加速器103可以向目标设备101提供本机代码格式的应用(209)。
图4示出了根据所公开的主题的示例性***体系架构。该体系架构可以包括应用加速器103、406,这些应用加速器可以被理解为代理(proxy)。该***体系架构还可以包括应用源105或应用中介408,从其可以获得应用。该***体系架构还可以包括用户的设备或目标设备101,诸如电话402或平板电脑等等。目标设备101、402可以包括字节代码框架、修改后的Dalvik虚拟机(VM)、操作***(OS)以及诸如ARM处理器的处理器。
当目标设备101、402想要下载应用时,目标设备101、402可以经网络107向应用加速器103、406发送请求。该请求可以包括诸如设备类型和***版本的信息。如果这是第一次为给定的环境请求该应用,则应用加速器103、406可以从应用源408下载应用。应用可以按字节代码版本被下载。在一个例子中,如果应用加速器103、406还没有为给定的环境下载该应用,则应用加速器103、406可以从应用源105、408下载该应用的字节代码版本。然后,应用加速器103、406可以利用提前(AOT)编译器410将该应用编译为本机代码格式,例如,这种本机代码格式是为在目标设备101、402的环境中执行而被优化的。然后,应用加速器103、406可以高速缓存应用的本机版本。例如,这可以摊销编译成本并且更快地响应来自相同设备类型和OS版本的后续请求。
进一步参照图4,在一种实施例中,应用加速器103、406和AOT-编译器410可以被放置在应用分发路径中的不同位置处。例如,应用加速器103、406和AOT编译器410可以被放置在应用开发者工作站、应用源105服务器、用户台式机、目标设备101,或者被放置在应用源105、408的地点处。这种位置可以提供透明度和效率。由AOT-编译器410执行的AOT编译会招致冗余的工作,因为具有相同类型和相同***版本的每个设备仍然会需要对应用执行样本编译工作。它还可以要求设备上的编译基础设施支持。在用户台式机或开发者工作站的AOT编译可以要求用户或开发者建立该基础设施。
进一步参照图4,在一种实施例中,应用加速器103可以位于应用分发路径之外的位置。例如,应用加速器103可以位于独立于分发路径的服务器处。在一个例子中,服务器可以要求目标设备101上传例如应用的字节代码或预处理后的应用的字节代码等等。在另一种实施例中,应用加速器103可以位于目标设备101处。在这种实施例中,应用加速器103可以例如有选择地在目标设备101上优化应用。
示例
递增部署的提前编译器
为了说明而非限制,现在将描述所公开的主题的示例性实施例。虽然所公开的技术可以是多样化的,但是为了说明现在将联系所公开的主题进行描述。AOT编译器410可以被实现为使得由AOT编译器410生成的本机代码与***中的字节代码可以无缝地互操作。此外,AOT编译器410可以被实现为使得在两个方向进行调用的开销都可以被减小。此外或作为替代,与仅仅字节代码相比,组合的本机代码和字节代码***的整体性能可以被提高,并且随着更多的字节代码被转换为本机代码而可以普遍提高。
在示例性说明中,应用加速器103可以通过利用JNI来生成本机代码,这至少部分因为JNI可以被设计为允许字节代码和本机代码互操作。但是,跨JNI调用的开销会相对较高,如表1中所示。例如,JNI方法可以传递Java对象并且因此可以针对访问对象的字段、方法或类型。但是,JNI方法可能不能直接执行这种访问,这至少部分因为它由于可移植性原因而可能没有对字段、方法或类型的实际引用。相反,JNI方法可以只具有对数据的整数索引,并且可以利用对JNI环境的调用来将索引解析成实际的引用并执行方法调用,这可以包括频繁的“上下文切换”。如表1中所示,简单的字段或方法访问可以具有4倍至20倍的减速。如本文所体现的,包括跨本机和字节代码边界的调用会是频繁的。
表1:示例AndroidJNI开销
此外或作为替代,并且如本文所体现的,AOT编译器410可以直接针对DalvikVM的内部本机方法接口。所生成的本机代码可以被DalvikVM调用,就好像代码是DalvikVM的一部分,这可以避免JNI的不必要的可移植性开销。所生成的本机代码可以具有与DalvikVM相同的用于代表类、方法和字段的数据结构,并且可以调用DalvikVM的函数用于解析它们。AOT编译器410还可以通过在字节代码方法上调用Dalvik解释器/JIT引擎来调用字节代码方法。
递增部署的设计还可以允许应用加速器103执行更积极的优化技术。Java类加载可以改变类层次结构和方法的实现方式,如本文进一步讨论的。应用加速器103可以通过动态监视类加载并且只在有利的时候执行某些积极的优化来解决这个挑战。即,应用加速器103可以在运行时检测类加载,并且可以通过在字节代码方法上调用Dalvik解释器/JIT引擎来丢弃翻译后的代码。在实践中,既没有评估应用,Android框架通常也不利用类加载,并且因此应用加速器103可以利用诸如完全优化的技术来运行所有被评估的应用。
根据所公开的主题的另一方面,应用加速器103可以执行多种技术来进一步改善应用,诸如但不限于提高应用的速度。应用加速器103可以在运行时之前执行编译,并且因此可以执行全局优技术,诸如但不限于常常会扫描整个程序的全局优化。
在所公开的主题的示例性实施例中,AOT编译器410可以利用诸如优化技术的技术。这些示例性技术可以包括但不限于,寄存器再分配、方法内联、常量传播、消除无法访问的代码从而消除冗余的加载存储、去除不必要的空引用检查以及去除不必要的数组边界检查等等。
在某些实现方式中,Java类加载可以使本文所使用的全局分析失效,这至少是因为类加载会改变方法实现方式和类层次结构。为了限制或防止由于类加载造成的错误,如本文所讨论的,如果程序在运行时加载类,则应用加速器103可以监视类加载并且可以在字节代码方法上调用Dalvik解释器/JIT引擎。
为了说明所公开的主题而不是限制,应用加速器103可以为Android而实现。但是,将认识到,本文中所描述的***和技术可以在任何合适的平台中使用。
在一种实施例中,应用加速器103可以部分地通过执行对DalvikVM的某些修改来实现。这种修改可以包括粘接代码,这种代码可以提供要由AOT编译后的本机代码调用的一组支持函数和对Dalvik本身的补丁代码。
例如,粘接代码可以导出被AOT编译器410所生成的本机代码调用的函数。这些函数可以包括例如且不限于,进行类型转换的函数、解析字段、方法和类的函数(诸如resolveField、getObjectField和resolveMethod函数)、分配对象和数组的函数以及从常量池中查找常量的函数以及任何其它合适的函数。
为了说明,补丁代码可以执行以下修改。补丁代码可以改变应用加载器,以读取AOT编译后的本机代码,并且例如将方法元数据的某个成员字段设置为AOT编译后的本机代码中的方法的本机地址。
为了说明而不是限制,对DalvikVM的修改可以利用Ice-creamSandwich(Android4.0.4r2)执行。补丁可以被生成并应用到JellyBean的最新版本(Android4.2.2r1)。
在示例性实施例中,AOT编译器可以利用ODEX文件而不是DEX文件作为输入。应当理解的是,ODEX文件也可以被理解为.odex文件。还应当理解的是,DEX文件也可以被理解为.dex文件。ODEX可以是DEX的预处理后的、依赖于平台的字节代码格式。产生ODEX文件可以包括但不限于验证、优化和链接等的进程。通过为AOT编译器提供诸如链接信息的运行时信息,使用ODEX可以允许性能的提高。
此外,并且如本文所体现的,利用Dalvik的.dex文件,AOT编译器410可以调用Android的dex-opt实用程序来将文件优化成.odex文件,如本文所讨论的。这个实用程序可以解析一些方法调用,并且可以用更快的invoke-*-快速指令(该指令可以直接利用索引查找虚拟表中的方法)代替对应的invoke-*指令(该指令可能需要解析给定类名和方法名的方法)。库可以剖析(parse)片段,但不一定需要建立中间表示(IR)。照此,Dalvik指令的中间表示以为分析而创建,并且可以建立方法以剖析IR。这种剖析器可以支持所有的Dalvik指令。AOT编译器410可以执行技术,诸如但不限于本文所述的优化,并且为了说明并且如本文所体现的,可以以任何合适的形式输出编译后的代码。.dex或.odex文件可以包括许多Java类文件,以节省空间(例如,大约2.3倍)。为了加快编译,AOT编译器410可以并行地将类向下预编译并优化为本机代码。
此外,并且如这里所体现的,GooglePlay协议的Java实现方式可用于搜索和下载应用。该实现方式可以被配置为AOT编译应用并高速缓存编译后的应用,例如通过配置应用以从代理下载应用。
根据所公开的主题的另一方面,提供了用于递增地执行优化后的应用的解释器。在解释器的示例性实施例中,解释器可以利用内部本机接口机构。如本文所体现的,标准的内部本机接口可以包括可从解释器内部被调用并且可以直接访问解释器的标准内部本机函数或例程,例如但不限于,本机方法(一组为了访问和操纵解释器状态而被提供的本机函数,诸如获得解释器的当前自由存储器,在运行时钩住(hook)方法和字段,控制解释器级别的线程)和代码块(诸如(1)JIT表中JIT编译后的代码块或者(2)可以从解释器的内部被调用的定制定义的格式的代码块)。在一些实施例中,标准内部本机函数可以包括例如但不限于,利用Java本机接口(JNI)实现的函数。
经由内部本机接口执行的函数或例程可以是由解释器的开发者所编写的解释器的一部分,并且通常不允许由第三方开发者编写。照此,采用内部本机接口模型会需要对原始解释器的稍微修改,使得解释器可以从解释器外面加载并执行函数和代码块。原始字节代码的每个方法可以被翻译为单个本机方法和一个或多个机器代码块。本机方法和机器代码块可以被合并成库。以这种方式,当原始的应用被加载或者当该应用的每个方法第一次被执行时,该库可以被解释器加载,并且本机方法和/或代码块可以被设置到合适的位置,例如由解释器为本机方法管理的本机方法表、用于JIT代码块的JIT表、用于特殊代码块的特殊目的表,并且本机方法和/或代码块可以被解释器执行。
图5A和图5B示出了根据所公开的主题的示例性解释器实现方式。用于实现解释器的示例性技术在图5A和图5B中示出。在根据所公开的主题的解释器的备选实施例中,可以使用标准本机接口来代替内部本机接口。这种实施例可以在例如原始解释器实际上不能被修改的时候被使用。标准本机接口可以允许第三方开发者编写由解释器(例如,Java中的JNI)提供的本机模块。在这种实施例中,原始应用的每个方法可以被翻译为标准的本机方法,并且可以利用被包括在由解释器支持的开发工具包中的工具链被编译为本机模块。如本文所讨论的,这个本机模块可以被解释器加载并执行。模块不需要对解释器的修改。但是,这种技术会具有减小的速度,这至少部分因为,对于某些解释器,与内部本机接口相比,标准本机接口会消耗增加的性能开销。
作为替代,通过最小化对标准本机接口调用的次数,解释器克隆可以被用来解决标准本机接口的性能开销,例如如果解释器的源代码可用的话。在这种示例性技术中,最小次数的方法调用可以经由标准本机接口被翻译为调用。这些方法调用可以包括在不对解释器进行修改的情况下应当从解释器调用的方法(例如回调、本机)。其余方法被翻译为其它格式,这取决于所使用的技术。可以在原始解释器外面运行的另一种解释器实现方式可以执行昂贵的操作(诸如方法调用等),而无需使用标准本机接口。这种外部解释器可以利用原始解释器或者它自己的解释器来实现。
作为替代,可以实现与原始字节代码兼容的解释器。在这种示例性解释器中,被翻译的机器代码不必是解释器所提供的格式。
作为替代,利用本文所述的技术,例如通过减少对标准本机接口的调用次数,现有解释器的软代码拷贝可以被用来减少标准本机接口的性能开销。
作为替代,利用本文所述的技术,嵌入在应用中的解释器可以被用来最小化标准本机接口的性能开销。图6示出根据所公开的主题的示例性***解释器。如例如在图6中所示的,底层***解释器603或不同解释器的整体或简化版本可以被编译为二进制模块并且被嵌入到优化的应用中。在使用诸如但不限于优化的技术的阶段,某些方法调用可以经由标准本机接口被翻译为调用。这些某些方法可以包括例如框架中的事件处理器(eventhandler)或方法。其余的方法调用可以经由嵌入式解释器601的内部本机接口被翻译为调用。一旦底层翻译器的控制移动到嵌入式解释器601,要由底层解释器处理的所有指令就可以被嵌入式解释器601处理,至少直到嵌入式解释器601找到要经由标准本机接口进行处理的方法调用。
此外或作为替代,可以实现与原始字节代码兼容的新解释器。以这种方式,翻译后的机器代码不一定需要是解释器所提供的格式。
根据所公开的主题的另一方面,提供将字节代码翻译为机器代码的翻译器。在示例性实施例中,翻译器可以包括解码器、分析器和编译器。每个组件可以被包括在单个程序中,或者每个组件可以被实现为外部单独的程序并且经由进程间通信(IPC)、文件或任何其它合适的技术与其它组件进行通信。
图7示出了根据所公开的主题的示例性翻译器实现方式。参照图7,为了说明,在702处,解码器可以从应用包中提取字节代码。此外,并且如本文所体现的,解码器可以解码该字节代码并且从该字节代码中读取每个方法,并且字节代码可以被翻译为中间表示(IR),该中间表示可以适于分析和优化。
此外,并且如本文所体现的,分析器可以从解码器接收IR,并且可以利用该IR分析整个字节代码和其中的每个方法。此外,分析器可以通过硬化原始应用的字节代码来变换IR。此外,分析器可以对IR执行诸如但不限于优化的一种或多种技术,该优化包括全局优化和局部优化二者,例如但不限于,寄存器提升、方法内联、空引用去除、数组边界检查去除或者任何其它合适的技术。
此外,并且如本文所体现的,编译器可以从分析器接收优化后的IR并且将该优化后的IR翻译为本机机器代码。如本文所讨论的,编译器的实现方式可以依据目标设备101改变,并且可以至少部分地取决于解释器的实现方式。
为了说明,并且如本文所体现的,在702处,编译器可以如下将IR翻译为机器代码。基本的字节代码指令(诸如赋值、主要类型转换、流控制、条件、比较、算术、逻辑、逐位)可以直接被翻译为适当的机器代码。特定于解释器的指令可以被翻译为一组机器代码,这组机器代码可以调用由解释器提供或使用标准本机接口的例程。这种指令可以包括对象操纵、访问静态/动态字段、方法调用、异常处理、内置的数组操作、内置的字符串操作以及同步。在诸如优化的技术中,某些复杂的特定于解释器的指令可以被简化和优化,使得它们可以直接被翻译为适当的机器代码。在704处,编译器可以将翻译后的本机方法或代码块合并到可以被解释器加载的单个可执行文件中。该可执行文件可以与原始应用包重新封装,或者可以分开地被发送到设备101。在翻译后的应用被执行期间,解释器可以从应用包或者指定的目录中确定是否存在用于该应用的翻译后的可执行文件,并且如果找到该可执行文件的话就可以加载该可执行文件。照此,解释器可以用对应的翻译后的方法代替对每个方法的引用,使得解释器可以调用翻译后的方法而不是原始方法。
此外,当整个程序被加载时、当每个模块(例如,Java中的类)被加载时或者当每个方法被加载时,翻译后的二进制文件可以被加载到解释器进程的存储器中。定时可以取决于特定的应用,并且可以考虑期望的性能和效率。以这种方式,修改后的解释器可以搜索指定的地点(例如,目录)来找出翻译后的二进制文件,并将其打开。修改后的解释器可以将二进制库读到进程存储器中并且将每个方法的引用设置到适当的位置,如本文所讨论的,这可以取决于解释器的实现方式,使得解释器可以执行翻译后的代码而不是原始字节代码方法,就好像它们是本机方法或者已经被JIT编译器翻译。
例如,翻译可以发生在应用被发布(例如,由开发者)之前、在应用被下载(例如,由应用源或代理)到设备101之前、或者在应用被下载(例如,由用户的设备)到设备101之后。
可以利用所支持的工具在应用被发布之前执行翻译。为了说明,并且如本文所体现的,开发者可以在他们将应用交付给用户或中介服务器之前翻译字节代码应用。以这种方式,开发者可以指定目标设备101的列表。翻译工具可以被安装到开发者的机器,或者可以作为基于网络的服务而被提供。翻译工具或服务可以接收应用包和目标设备101作为输入。如本文所体现的,开发者可以提交应用包和选定的目标设备、接收翻译后的包,并将翻译后的包交付给用户或中介服务器。
作为替代,翻译可以在被发送到用户的设备101之前被执行,例如,当应用被应用源105服务器或代理接收到时,或者当应用源105服务器或代理从用户101接收到下载请求时(即,按需编译)。以这种方式,配置信息可以被用来生成用于特定目标设备101的机器代码,或者应用源105服务器或代理可以从目标设备101请求必要的信息。
例如,翻译器可以与应用源105合并。如本文所体现的,应用源105可以从设备101接收应用请求,该请求可以包括设备配置信息(例如,id),并且可以为设备选择应用的合适版本,并且将其发送到设备。以这种方式,合并后的翻译器可以利用给定的设备101的信息翻译该应用。应用源105可以将翻译后的应用而不是原始应用发送到设备。作为替代,当修改应用源105的服务不实际时,翻译代理服务可以被安装在应用源105的服务与用户设备101之间。
现在描述示例性翻译过程。在一种实施例中,解码器可以从目标应用包提取字节代码,并将其打开。然后,解码器可以从字节代码读取每个方法,进行解码,并将它变换为IR。然后,分析器可以分析整个字节代码和每个方法。然后,分析器可以决定哪个模块或类应当被优化。在一个例子中,优化器使用来自分析器的报告优化IR。在另一个例子中,使用诸如优化的技术的进程可以包括诸如整个程序或类的全局优化和诸如方法或块的局部优化。
在一个例子中,可以使用寄存器提升、方法内联、去除空引用检查、去除数组边界检查。取决于模型,编译器可以将每个方法的优化后的IR翻译成解释器的内部本机函数、标准本机函数、代码块等之一。每个方法的指令可以利用以下示例性技术被翻译为目标设备101的机器代码。在一种示例性技术中,基本字节代码指令可以直接被翻译为适当的机器代码。一些例子包括但不限于赋值、主要类型转换、流控制、条件、比较、算术、逻辑、逐位等等。
特定于解释器的指令可以被翻译为一组机器代码,这组机器代码可以调用由解释器提供的或使用标准本机接口的例程。一些例子包括但不限于对象操纵、访问静态/动态字段、方法调用、异常处理、内置的数组操作、内置的字符串操作、同步等等。在使用诸如但不限于优化的技术的进程中,一些昂贵的特定于解释器的指令可以被简化和优化,使得它们可以被直接翻译为适当的机器代码。在一个例子中,编译器可以将翻译后的本机方法或代码块合并到可以被解释器加载的单个可执行文件中。
在另一个例子中,该可执行文件可以与原始应用包重新封装,或者可以被分开地发送到设备。在一个例子中,当翻译后的应用要运行时,解释器可以尝试从应用的包或者指定的目录中找出是否存在用于该应用的翻译后的可执行文件,并且如果该可执行文件被找到的话就加载该可执行文件。在一个例子中,当翻译后的应用要运行时,解释器尝试从应用的包或者指定的目录中找出是否存在用于该应用的翻译后的可执行文件,并且如果该可执行文件被找到的话就加载该可执行文件。在另一个例子中,解释器可以用翻译后的方法代替对每个方法的引用,使得解释器调用翻译后的方法而不是原始方法。
作为进一步的备选方案,应用可以在它们被下载到用户的设备101之后被翻译。为了说明而非限制,翻译可以自动执行,例如作为在设备101上运行的后台服务,并且可以在它们被安装时或者周期性地优化所安装的应用。此外或者作为替代,翻译可以手动被执行。例如,利用所支持的***应用,用户可以选择哪个应用被优化。如本文所体现的,翻译器工具链可以被提供并安装到用户的设备101。这种翻译器可以作为本地机器的后台服务运行,或者可以通过用户的动作而被启动。安装在设备101中的客户端可以与翻译器进程通信,可以发送所安装的应用的字节代码,执行翻译,并将翻译后的应用下载回设备。设备101的信息可以连同字节代码一起被发送到翻译器,以协助翻译器确定任何编译选项。
虽然翻译一般可以由用户的设备101执行,但是,如果用户的设备101不适合翻译,例如,如果用户的设备101不具有强到足够用于翻译的计算能力,则可以提供云服务或其它工具来执行翻译。
例如,并且如本文中所体现的,云或远程(因特网)服务可以执行翻译进程。安装在用户的设备101中的客户端可以保留远程服务的地址,并且翻译过程可以在远程服务器上执行。具体的设备信息可以被发送到该服务,或者可以被该服务管理(例如,利用向该服务登记的设备ID)。
分析
对10个应用评估应用加速器103,其中包括8个真实世界应用和2个基准测试程序套件。真实世界应用是:Browser,Dolphin浏览器(Android上的另一浏览器选项);Barcodescanner,用于扫描条形码的应用和库;AdobePhotoshop,照片编辑软件;Fractal,用于生成分形图像的应用;Poker,用于计算流行的纸牌游戏TexasHold’em的获胜概率的应用;SudokuSolver,用于求解数独游戏的应用;Checkers,在固定的时间期限(5秒)内搜索跳棋游戏的可能走棋中的最佳走棋的应用;以及Chess,在固定的时间期限(60秒)内搜索国际象棋游戏的可能走棋中的最佳走棋的应用。基准测试程序套件是:Linpack,用于***的浮点运算能力的基准测试程序;及CaffeineMark,用于测试诸如方法调用和循环的常用操作的效率的一组微基准测试程序。表2示出这些应用和用于测量这些应用的性能的工作量。参考表2,前八个应用是真实应用,且后两个应用是基准测试程序。
表2:所评估的应用的描述
对于交互式应用,响应时间是通过测量花在做真实工作的最长运行事件处理器中的时间来量化的;对于纯粹的计算密集型应用,我们测量它们的总执行时间。对于Browser,测量当页面被读取时直到事件onLoad被分派的时间,该事件指示浏览器已经完成加载该页面。对于Barcodescanner,应用zxingtest被运行,以处理40个JPEG图像并测量总执行时间。对于Photoshop,其执行时间在doRender中被测量,doRender是一种用于进行渲染的方法。对于Fractal和Poker,测量运行(run)的执行时间,该运行是用于进行计算的方法。对于SudokuSolver,测量onClick的执行时间。Checkers和Chess显示他们搜索的节点数,并记录这些数字。所有的GUI动作都利用MonkeyRunner脚本进行自动化。
应用在Nexus4上运行,该Nexus4具有1.50GHz的ARMv7CPU和2GB的RAM,运行Android版本4.2.2r1JellyBean。应用加速器的性能也在NexusS上测量并且也实现了与以下讨论的那些类似的结果。
为了说明利用根据所公开的主题的应用加速器103的被提高的速度,关于两种配置测量测试应用的性能:
1.为了显示应用加速器103可以递增地提高性能,利用原始字节代码框架测量AOT编译后的应用的性能。
2.为了显示最终的加速,利用AOT编译后的框架运行AOT编译后的应用。核心和框架库在框架中被AOT编译。
利用以字节代码框架作为基准运行的字节代码应用,表3说明了被评估的应用的速度被提高。为了所公开的主题的说明和确认,表3说明了各种应用的利用或不利用应用加速器的性能。列“无fx”显示利用原始框架的AOT编译后的应用的测得的相对性能。列“有fx”显出利用AOT编译后的框架的AOT编译后的应用的测得的相对性能。越大的数字代表越快的性能。如表3中所说明的,应用加速器103将所有被评估的真实应用加速了18%-79%,并且均值为43%。例如,应用加速器103将Browser应用的页面加载加速了18%并且对于Photoshop加速了24%。应用加速器103将Linpack加速了112.5%,并且将Caffeine-Mark的整体得分提高了88.65%。应用加速器103将CaffeineMark中的Logic微基准测试程序加速了超过13倍,这至少部分因为应用加速器103将局部变量提升到寄存器。
表3:应用的加速
AOT编译后的应用也可以利用字节代码框架平稳地运行,从而显示应用加速器103可以被递增地部署。具有字节代码框架的五个应用(Browser、Poker、Sudoku、Checkers和String)比对应的字节代码应用运行得慢或者大约相同。但是,Barcode、Photoshop、Fractal、Chess和除String之外的所有基准测试程序都显示出提高的速度,这说明如果应用的用户、中介或开发者要在平台提供者之前采用应用加速器103时提高速度的好处。
应用加速器的能量节省是利用PowerTutor测量的。为了所公开的主题的说明和确认,表4示出了利用或不利用所公开的主题节省的示例性能量。如表4中所说明的,列“Orig”示出原始应用的能量消耗;列“AOT”示出利用AOT编译后的框架的AOT编译后的应用的能量消耗;列“百分比”示出能量节省的百分比。表4示出在表4中的每个真实应用不利用和利用应用加速器的能量消耗。Chess和Checkers探索尽可能多的空间,以便在固定时间量内找到最佳走棋,因此应用加速器103没有如预期的那样可测量地节省运行它们的能量。对于其它应用,应用加速器103显著地平均降低了12.71%的能量消耗。与表3相比,能量节省可以与被提高的速度相关联。即,具有被提高的速度的应用通常实现更多的能量节省。
表4:所评估的应用的能量节省
应用加速器的存储器开销是通过比较峰值存储器用量来测量的。为了所公开的主题的说明和确认,表5示出了所公开的主题的示例性存储器消耗。参照表5,列“Orig”示出原始应用的存储器用量;列“无fx”示出利用原始框架运行AOT编译后的应用的存储器用量;列“有fx”示出利用AOT编译后的框架运行AOT编译后的应用的存储器用量。表5说明了利用和不利用应用加速器的翻译的应用的存储器用量。如所示出的,对于某些应用,应用加速器103只是AOT编译应用,而并没有AOT编译框架,并且因此应用加速器103增加了些许存储器开销。对于Chess,应用加速器103减少了存储器用量,这至少部分地由于更加优化的机器代码。对于某些应用,应用加速器103同时AOT编译应用和框架,并且因此存储器开销变得更大,因为整个AOT编译后的框架都在运行时被加载,而JIT编译器仅AOT编译被执行的代码。
表5:应用加速器的存储器消耗
如本文所讨论的,当发布(emit)C代码时,应用加速器103可以执行某些技术,诸如但不限于优化:包括但不限于将局部变量提升到寄存器、使叶方法调用轻量化,和/或静态解析方法调用。
表6说明了诸如优化的这些技术的效果。为了所公开的主题的说明和确认,表6说明了所公开的主题的示例性效果。参照表6,列“No-opt”示出没有任何优化的加速;列“提升”示出具有存储器提升的加速;列“调用”示出既具有存储器提升又具有轻量级方法调用的加速。如所示出的,寄存器提升显著加速了Barcode、Fractal、Poker、Checkers和Chess;其它两个优化一起显著加速了Checkers和Chess。后两个优化的效果没有被单独测量,这至少部分地因为它们的实现方式被耦合。
表6:诸如优化的技术的效果
如本文中所讨论的,应用加速器103可以将编译卸载到代理并且可以在代理和用户设备二者上都存储AOT编译后的二进制文件。为了量化编译和存储开销,编译时间和AOT编译后的二进制文件的大小被测量。
表7说明了每个被评估的应用的编译时间和AOT编译后的二进制文件的大小。为了所公开的主题的说明和确认,表7说明了所公开的主题的示例性编译和存储开销。参照表7,列“DEX”示出字节代码的大小,列“Bin”示出AOT编译后的二进制文件的大小;列“二进制大小与字节代码大小之比”计算二进制文件大小与字节代码大小之比;列“时间”示出编译时间。对于所有的应用,AOT编译后的二进制文件的大小约为字节代码的大小的3倍,并且编译时间小于30s。编译时间与二进制文件的大小大致呈线性关系。考虑代理可以高速缓存AOT编译后的二进制文件并且对相同类型的设备重用它,测得的开销可以被认为是合理的。
表7:编译和存储开销
所公开的主题可以以硬件或软件或者两者的组合实现。本文所述的任何方法都可以利用软件执行,其中软件包括存储在一个或多个计算机可读介质(例如,通信介质、存储介质、有形介质等等)上的计算机可执行指令。此外,所公开的方法的任何中间或最终结果都可以存储在一个或多个计算机可读介质上。任何此类软件都可以在单个计算机上、在联网的计算机上(例如,经由因特网、广域网、局域网、客户端-服务器网络或其它此类网络)、一组计算机、网格等等之上执行。应当理解的是,所公开的技术不限于任何特定的计算机语言、程序或计算机。例如,可以使用各种广泛的市售计算机语言、程序和计算机。
前面仅仅说明了所公开的主题的原理。鉴于本文的示教,对所述实施例的各种修改和变更将对本领域技术人员而言是清楚的。因此,将认识到,本领域技术人员将能够设计出众多技术,这些技术虽然未在本文明确描述,但却体现所公开的主题的原理并且因此在其精神和范围之内。因此,其它实施例在权利要求的范围内。
Claims (20)
1.一种用于经网络将应用以被目标设备使用的本机代码格式从应用源提供给所述目标设备的方法,包括:
接收对所述应用的请求,所述请求包括目标设备信息;
确定所述应用是否已经被高速缓存,
如果所述应用还未被高速缓存:
将所述应用作为字节代码从所述应用源下载;及
利用提前编译器将所述字节代码处理成所述本机代码格式;及
经所述网络将本机代码格式的所述应用提供给所述目标设备。
2.如权利要求1所述的方法,其中所述目标设备信息包括设备类型、操作***版本和平台版本当中的一个或多个。
3.如权利要求1所述的方法,其中所述处理还包括,如果所述应用还未被高速缓存,则以本机代码格式高速缓存所述应用。
4.如权利要求1所述的方法,其中所述处理还包括:
将所述字节代码处理成中间表示。
5.如权利要求4所述的方法,其中本机代码格式的所述应用被虚拟机调用。
6.如权利要求1所述的方法,其中所述处理还包括将所述字节代码的一部分处理成所述本机代码格式。
7.如权利要求1所述的方法,其中所述字节代码包括通用字节代码和预处理后的字节代码当中的至少一个。
8.如权利要求1所述的方法,其中所述处理还包括:
选择所述应用的至少一部分;及
将所述应用的所述至少一部分的字节代码处理成本机代码格式。
9.如权利要求1所述的方法,其中所述处理还包括:
分析所述字节代码的方法的指令,其中所述字节代码包括至少一个方法,并且所述至少一个方法包括至少一条指令;
确定所述指令是否包括局部变量;
确定所述局部变量的类型;及
如果所述类型是基本类型,则提升所述局部变量。
10.如权利要求1所述的方法,其中所述处理还包括:
审查所述字节代码的至少一个方法当中的每一个方法,其中所述字节代码包括所述至少一个方法;
确定所述至少一个方法是否是叶方法;及
如果所述至少一个方法是叶方法,
确定所述至少一个方法的调用地点;及
除去所述至少一个方法的堆栈帧分配和解除分配。
11.如权利要求1所述的方法,其中所述处理还包括静态地解析方法。
12.一种用于经网络将应用以被目标设备使用的本机代码格式从应用源提供给目标设备的装置,包括:
处理器;及
存储器,用于存储计算机程序指令,当所述计算机程序指令在所述处理器上被执行时,使所述处理器执行包括以下步骤的操作:
接收对应用的请求,所述请求包括目标设备信息;
确定所述应用是否已经被高速缓存,
如果所述应用还未被高速缓存:
将所述应用作为字节代码从所述应用源下载;及
利用提前编译器将所述字节代码处理成所述本机代码格式;及
经所述网络将本机代码格式的所述应用提供给所述目标设备。
13.如权利要求12所述的装置,其中所述处理是由应用开发者服务器执行的。
14.如权利要求12所述的装置,其中所述处理是由应用中介服务器执行的。
15.如权利要求12所述的装置,其中所述处理是由目标设备执行的。
16.如权利要求12所述的装置,还包括利用解释器将所述字节代码处理成所述本机代码格式。
17.如权利要求16所述的装置,其中所述解释器嵌入到所述应用中。
18.如权利要求16所述的装置,其中所述解释器能够是***解释器或嵌入式解释器当中的至少一种。
19.如权利要求12所述的装置,其中所述目标设备能够执行所述字节代码和本机代码当中的至少一种。
20.一种用于经网络将应用以被目标设备使用的本机代码格式从应用源提供给目标设备的***,包括:
目标设备,提供对所述应用的请求;
应用源,以字节代码提供所述应用;及
至少一个处理器:
接收对所述应用的请求,所述请求包括目标设备信息;
确定所述应用是否已经被高速缓存,
如果所述应用还未被高速缓存:
将所述应用作为字节代码从所述应用源下载;及
利用提前编译器将所述字节代码处理成所述本机代码格式;及
经所述网络将本机代码格式的所述应用提供给所述目标设备。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361816461P | 2013-04-26 | 2013-04-26 | |
US61/816,461 | 2013-04-26 | ||
US201361871075P | 2013-08-28 | 2013-08-28 | |
US61/871,075 | 2013-08-28 | ||
PCT/US2014/035655 WO2014176587A2 (en) | 2013-04-26 | 2014-04-28 | Systems and methods for mobile applications |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105359090A true CN105359090A (zh) | 2016-02-24 |
Family
ID=51792529
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480032368.4A Pending CN105359090A (zh) | 2013-04-26 | 2014-04-28 | 用于移动应用的***和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9766867B2 (zh) |
CN (1) | CN105359090A (zh) |
WO (1) | WO2014176587A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106445662A (zh) * | 2016-09-13 | 2017-02-22 | 广东欧珀移动通信有限公司 | 一种移植应用程序的方法及终端设备 |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160373537A1 (en) * | 2015-06-17 | 2016-12-22 | Hsiu-Ping Lin | Systems for downloading location-based application and methods using the same |
KR102414250B1 (ko) * | 2015-07-30 | 2022-06-29 | 삼성전자주식회사 | 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체 |
US20170083298A1 (en) * | 2015-09-23 | 2017-03-23 | Microsoft Technology Licensing, Llc | Resilient format for distribution of ahead-of-time compiled code components |
US10129359B2 (en) * | 2016-01-20 | 2018-11-13 | Google Llc | Methods and apparatus to selectively provide cached and presently compiled applications |
US10831637B2 (en) | 2016-04-23 | 2020-11-10 | International Business Machines Corporation | Warning data management with respect to an execution phase |
US10977017B2 (en) * | 2016-04-23 | 2021-04-13 | International Business Machines Corporation | Warning data management for distributed application development |
US10089103B2 (en) | 2016-08-03 | 2018-10-02 | Smartshift Technologies, Inc. | Systems and methods for transformation of reporting schema |
US10698674B2 (en) | 2018-02-06 | 2020-06-30 | Smartshift Technologies, Inc. | Systems and methods for entry point-based code analysis and transformation |
US10740075B2 (en) * | 2018-02-06 | 2020-08-11 | Smartshift Technologies, Inc. | Systems and methods for code clustering analysis and transformation |
US10949343B2 (en) * | 2018-02-12 | 2021-03-16 | International Business Machines Corporation | Instant storage reclamation ensuring uninterrupted media recording |
KR102663196B1 (ko) | 2018-11-16 | 2024-05-07 | 삼성전자주식회사 | 사용자 단말장치, 서버, 사용자 단말장치의 제어방법 및 서버의 제어방법 |
US10838750B2 (en) | 2019-01-10 | 2020-11-17 | Red Hat, Inc. | Combining ahead-of-time compilation and just-in-time compilation to improve application deployment |
CN110062043B (zh) * | 2019-04-16 | 2021-10-29 | 杭州朗和科技有限公司 | 服务治理方法、服务治理装置、存储介质及电子设备 |
KR20210046426A (ko) | 2019-10-18 | 2021-04-28 | 삼성전자주식회사 | 어플리케이션의 최적화 방법 및 이를 지원하는 전자 장치 |
CN113961177A (zh) * | 2020-07-21 | 2022-01-21 | 腾讯科技(武汉)有限公司 | 一种应用程序的处理方法、装置、设备及介质 |
CN111768187A (zh) * | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种部署智能合约的方法、区块链节点和存储介质 |
EP4383071A2 (en) * | 2021-11-30 | 2024-06-12 | aicas GmbH | Translating intermediate code to provide machine code |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1451682A2 (en) * | 2001-10-05 | 2004-09-01 | Sun Microsystems, Inc. | Platform-independent selective ahead-of-time compilation |
US20040230950A1 (en) * | 2003-05-16 | 2004-11-18 | Ilja Bedner | Methods and systems for transforming Java applications on behalf of another device |
CN1672133A (zh) * | 2002-08-02 | 2005-09-21 | 艾利森电话股份有限公司 | 优化的代码生成 |
CN1798153A (zh) * | 2004-12-28 | 2006-07-05 | 国际商业机器公司 | 从部署服务器内为目标***运行时优化应用的方法和*** |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6077311A (en) | 1997-07-09 | 2000-06-20 | Silicon Graphics, Inc. | Method and apparatus for extraction of program region |
US6219787B1 (en) | 1997-12-22 | 2001-04-17 | Texas Instruments Incorporated | Method and apparatus for extending security model to native code |
US6748587B1 (en) * | 1998-01-02 | 2004-06-08 | Hewlett-Packard Development Company, L.P. | Programmatic access to the widest mode floating-point arithmetic supported by a processor |
US6247174B1 (en) * | 1998-01-02 | 2001-06-12 | Hewlett-Packard Company | Optimization of source code with embedded machine instructions |
US6110226A (en) * | 1998-02-19 | 2000-08-29 | Cygnus Solutions | Java development environment using optimizing ahead-of-time compiler |
US20020010911A1 (en) * | 2000-02-16 | 2002-01-24 | Ben-Chung Cheng | Compile time pointer analysis algorithm statement of government interest |
KR100441115B1 (ko) * | 2001-06-27 | 2004-07-19 | 주식회사 인터와이즈 | 정보 단말기의 자바 프로그램 처리 속도 향상을 위한 자바컴파일 온 디멘드 서비스 시스템 및 그 방법 |
US6895579B2 (en) * | 2001-07-31 | 2005-05-17 | Intel Corporation | Method and apparatus for maintaining exception reporting for register promotion |
US7290245B2 (en) | 2001-10-18 | 2007-10-30 | Microsoft Corporation | Methods and systems for navigating deterministically through a graphical user interface |
US6944795B2 (en) | 2002-03-25 | 2005-09-13 | Sun Microsystems, Inc. | Method and apparatus for stabilizing GUI testing |
US8423976B2 (en) * | 2003-03-13 | 2013-04-16 | Northrop Grumman Corporation | Extreme pipeline and optimized reordering technology |
JP4744106B2 (ja) * | 2003-08-06 | 2011-08-10 | パナソニック株式会社 | セキュアデバイス、情報処理端末、通信システム及び通信方法 |
US7587712B2 (en) * | 2003-12-19 | 2009-09-08 | Marvell International Ltd. | End-to-end architecture for mobile client JIT processing on network infrastructure trusted servers |
US7313789B1 (en) * | 2004-02-27 | 2007-12-25 | Sun Microsystems, Inc. | Methods and systems for reducing a program size |
KR100725386B1 (ko) * | 2004-09-25 | 2007-06-07 | 삼성전자주식회사 | 가상 머신 어플리케이션을 실행하는 방법 및 그 방법을이용한 디지털 방송 수신기 |
KR100597414B1 (ko) * | 2004-10-21 | 2006-07-05 | 삼성전자주식회사 | 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법 |
US8112745B2 (en) * | 2006-03-22 | 2012-02-07 | Honeywell International Inc. | Apparatus and method for capabilities verification and restriction of managed applications in an execution environment |
US20080005473A1 (en) * | 2006-06-30 | 2008-01-03 | Tong Chen | Compiler assisted re-configurable software implemented cache |
US7752501B2 (en) | 2006-07-27 | 2010-07-06 | International Business Machines Corporation | Dynamic generation and implementation of globalization verification testing for user interface controls |
US7752055B1 (en) | 2006-10-19 | 2010-07-06 | Sprint Communications Company L.P. | Systems and methods for determining a return on investment for software testing |
US8494832B2 (en) * | 2007-06-20 | 2013-07-23 | Sanjeev Krishnan | Method and apparatus for software simulation |
US9164783B2 (en) * | 2007-08-20 | 2015-10-20 | International Business Machines Corporation | Load time resolution for dynamic binding languages |
US8732676B1 (en) | 2007-08-29 | 2014-05-20 | Parasoft Corporation | System and method for generating unit test based on recorded execution paths |
US8122436B2 (en) | 2007-11-16 | 2012-02-21 | Microsoft Corporation | Privacy enhanced error reports |
US8473935B2 (en) * | 2008-04-21 | 2013-06-25 | Microsoft Corporation | Just-ahead-of-time compilation |
US9176754B2 (en) | 2008-07-16 | 2015-11-03 | Google Inc. | Method and system for executing applications using native code modules |
US8294723B2 (en) | 2008-11-07 | 2012-10-23 | Google Inc. | Hardware-accelerated graphics for web applications using native code modules |
US8359435B2 (en) * | 2009-12-16 | 2013-01-22 | International Business Machines Corporation | Optimization of software instruction cache by line re-ordering |
EP2336882A1 (en) | 2009-12-18 | 2011-06-22 | Telefonaktiebolaget L M Ericsson (PUBL) | Technique for run-time provision of executable code using off-device services |
CN103038752B (zh) | 2010-05-19 | 2016-04-13 | 谷歌公司 | 一种用于管理软件问题报告的方法、***和设备 |
US8924922B2 (en) * | 2010-06-14 | 2014-12-30 | Microsoft Corporation | Pre-compiling hosted managed code |
US8359496B1 (en) * | 2010-08-31 | 2013-01-22 | Google Inc. | Fault-resistant just-in-time compiler |
US9152437B2 (en) * | 2010-10-28 | 2015-10-06 | Hewlett-Packard Development Company, L.P. | Dynamically installing image processing |
EP2649520B1 (fr) * | 2010-12-06 | 2019-02-27 | Google LLC | Distribution d'application délivrant une application dédiée à un terminal à partir d'une application déposée par le développeur |
US8701090B2 (en) | 2010-12-31 | 2014-04-15 | Verizon Patent And Licensing Inc. | Graphical user interface testing systems and methods |
US8880991B2 (en) | 2011-04-21 | 2014-11-04 | Qualcomm Innovation Center, Inc. | Methods and apparatus for improved browsing performance by precompilation of high-priority JavaScripts in a webpage and delaying the removal of corresponding compiled code |
US9268665B2 (en) | 2011-07-26 | 2016-02-23 | Trimble Navigation Limited | System and method for identifying fault prone computer code files |
US8281288B1 (en) | 2011-10-20 | 2012-10-02 | Google Inc. | Integrated development environment with network-based compilation and sandboxed native machine-language capabilities |
US20130113809A1 (en) * | 2011-11-07 | 2013-05-09 | Nvidia Corporation | Technique for inter-procedural memory address space optimization in gpu computing compiler |
US20150058826A1 (en) | 2013-08-26 | 2015-02-26 | The Trustees Of Columbia University In The City Of New York | Systems and methods for efficiently and effectively detecting mobile app bugs |
-
2014
- 2014-04-28 WO PCT/US2014/035655 patent/WO2014176587A2/en active Application Filing
- 2014-04-28 CN CN201480032368.4A patent/CN105359090A/zh active Pending
-
2015
- 2015-10-26 US US14/922,977 patent/US9766867B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1451682A2 (en) * | 2001-10-05 | 2004-09-01 | Sun Microsystems, Inc. | Platform-independent selective ahead-of-time compilation |
CN1672133A (zh) * | 2002-08-02 | 2005-09-21 | 艾利森电话股份有限公司 | 优化的代码生成 |
US20040230950A1 (en) * | 2003-05-16 | 2004-11-18 | Ilja Bedner | Methods and systems for transforming Java applications on behalf of another device |
CN1798153A (zh) * | 2004-12-28 | 2006-07-05 | 国际商业机器公司 | 从部署服务器内为目标***运行时优化应用的方法和*** |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106445662A (zh) * | 2016-09-13 | 2017-02-22 | 广东欧珀移动通信有限公司 | 一种移植应用程序的方法及终端设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2014176587A3 (en) | 2014-12-11 |
WO2014176587A2 (en) | 2014-10-30 |
US9766867B2 (en) | 2017-09-19 |
US20160041816A1 (en) | 2016-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105359090A (zh) | 用于移动应用的***和方法 | |
US9098309B2 (en) | Power consumption optimized translation of object code partitioned for hardware component based on identified operations | |
Xu et al. | Graph processing on GPUs: Where are the bottlenecks? | |
Simmhan et al. | Bridging the gap between desktop and the cloud for escience applications | |
Gackstatter et al. | Pushing serverless to the edge with webassembly runtimes | |
Zhang et al. | A comprehensive benchmark of deep learning libraries on mobile devices | |
US20080216064A1 (en) | Method, Architecture and Software of Meta-Operating System, Operating Systems and Applications For Parallel Computing Platforms | |
CN102279765A (zh) | 预编译托存托管代码 | |
Lee et al. | OpenCL performance evaluation on modern multicore CPUs | |
Cheung et al. | Using Program Analysis to Improve Database Applications. | |
Damschen et al. | Transparent offloading of computational hotspots from binary code to Xeon Phi | |
Carneiro Pessoa et al. | GPU‐accelerated backtracking using CUDA Dynamic Parallelism | |
Wang | How far we’ve come–a characterization study of standalone webassembly runtimes | |
Maas et al. | Return of the runtimes: Rethinking the language runtime system for the cloud 3.0 era | |
Yu et al. | Lorien: Efficient deep learning workloads delivery | |
Hou et al. | RVTensor: a light-weight neural network inference framework based on the RISC-V architecture | |
Nuzman et al. | Jit technology with c/c++ feedback-directed dynamic recompilation for statically compiled languages | |
Popov et al. | Piecewise holistic autotuning of parallel programs with cere | |
Zhai et al. | Lit: A high performance massive data computing framework based on cpu/gpu cluster | |
Kallas et al. | Practically correct,{Just-in-Time} shell script parallelization | |
Fridman et al. | Portability and Scalability of OpenMP Offloading on State-of-the-art Accelerators | |
Li et al. | J2M: a Java to MapReduce translator for cloud computing | |
Zhang et al. | Artificial intelligence platform for mobile service computing | |
Hsu et al. | A dynamic binary translation system in a client/server environment | |
Endo et al. | Software technology that deals with deeper memory hierarchy in post-petascale era |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160224 |
|
WD01 | Invention patent application deemed withdrawn after publication |