在动态输出中减少由动态编译所引起的可察觉暂停的机制制造技术

技术编号:2837769 阅读:192 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种用于减少动态编译期间的动态暂停的方法。运行在系统上的应用程序检测对用户进行的动态输出。动态输出表示了应用程序运行时视频或音频数据的变化。当应用程序检测到这样的输出,就会通知监视动态输出的频度的系统。如果动态输出的频度超过了阈值,该系统就通知系统的编译器挂起编译。通常,当系统的解释器接受指令而把处理控制传送给编译器时,编译才进行。编译进行的一种方式就是目前正在由解释器处理的方法已被标识为编译。因此,为了挂起编译,编译器就停止把方法标识为编译,以使得解释器就不会收到把处理控制传送给编译器的指令。

【技术实现步骤摘要】

本专利技术涉及编译处理技术,尤其涉及在动态输出中减少由于动态编译所引起的可察觉暂停的方法和装置。
技术介绍
本部分所描述的方法是可推行的,但不一定是以前被考虑和推行的方法。因此,除非另外说明,否则,就不应该臆断,本部分所描述的任何方法由于其内容包含于本部分而被认为是现有技术。诸如Sun公司的Java的程序设计语言可以让程序员用一种语言在多种平台上相对容易地开发应用程序,这就导致产品开发消耗更多资源而不是保证相互可操作性。在一典型的Java实施中,只要Java应用程序是可执行的,一个Java虚拟机(JVM)的实例也同时启动来支持Java应用程序的运行。JVM,其可以是原码(native code)(本机代码或原始机器码)形式,解释执行Java字节码。Java字节码来源于Java源代码,是由人工程序员编写和理解的。字节码起着代码的中间级作用。Java程序可以在正执行JVM的任何平台上运行。有时,更希望Java应用程序是用原始机器码(native machinecode)(本机代码)形式而不是JVM解释字节码形式来执行的。在这些例子中,字节码可以通过编译器编译为原始机器指令码(本机代码),编译器的典型例子为just-in-time(JIT)。这样一来,JVM可以更加快了特定应用程序的运行速度(而不是使用Java解释器执行应用程序的Java字节码,该应用程序直接通过速度更快的处理器执行)。JVM包括在某些间隔触发将字节码向下编译成为原始机器码的采样机制。例如,一个采样机制可以被设置成每隔30毫秒触发一次编译。然而编译会消耗用于其他处理的系统资源。于是,为了使编译的影响最小化,JVM可设定每次编译可能只进行5毫秒的限制。这种情况特别适用于只够一次运行一个处理器线程的资源的单个处理器系统。通过采样机制限制编译时间,JVM可以分配更多的时间给处理器线程而保证编译不增加系统资源的负担。采样机制的缺陷之一是编译的静态特性。编译被设定在特定时刻发生并限制在某一持续时间内。然而。对于如性能测试之类的处理器敏感的程序,就要编译尽可能多的方法以便最大提高执行效率。在这些例子中,除采样之外,一些虚拟机还使用“热方法(hotmethod)”(在某一时间间隔内被频繁调用的方法)的动态编译。热方法通过跟踪最近执行的方法列表而被编译,该列表中的每一个方法都被标记,使得该方法被编译为原始机器码来执行而不是解释执行。然而,热方法的动态编译的缺陷之一是编译器快速消耗不成比例数量的系统资源。若有大量热方法存在时就更是如此。这会对其他系统功能,如视频和音频动态输出过程,起副作用。例如,若没有足够的处理能力,视频动画帧就不能以必要的频率刷新,使得动画查看程序察觉到不想要的间断,暂停或黑屏。综上所述,很明显,无论是静态采样方法还是热方法的动态编译,单从自身都无法提供最满意的效果。因此,就需要用于管理编译的改进机制。
技术实现思路
根据本专利技术的实施例,提供了一种在动态输出中减少由于动态编译所引起的可察觉暂停的方法。动态输出被定义为频繁发生变化的输出。动态输出的例子可能是运动视频、动画或音频。根据该方法,在具有虚拟机的系统上运行的应用程序发送输出到用户接口以便呈现给用户。无论何时应用程序发送这样的输出,它都调用一种方法来通知虚拟机这种输出已经发生。如此输出已经发生的通知是通过虚拟机来传送给跟踪输出频度(frequency of the output)的动态输出监视器的。动态输出监视器把输出的频度与阈值比较以确定是否为动态输出,以及确定虚拟机的编译是否应该被挂起或连续。如果输出的频度超过了该阈值,动态输出监视器就改变全局动态输出指示器的值,以通知其他的系统组件挂起编译。特别地,全局动态输出指示器用于通知系统中的编译器是否继续标识方法为编译。当系统解释器收到把方法处理的控制传送到一个编译器的指令时,编译就发生了。一旦处理控制被传送到编译器,编译器检查全局动态输出指示器以确定动态输出监视器是否已经请求挂起编译。如果是,则编译器将通过不标识任何方法为编译来挂起编译。如果某一当前被解释方法日志中有“热方法”则该方法通常被标识为编译。当前被解释方法是指被Java解释器刚刚执行过的那些方法。如果不标识方法为编译则那些方法下一次仍然被解释器处理,解释器也不把方法处理的控制传送给编译器;这样,编译就不执行。由于编译没有执行,更多资源就可以用于给用户的动态输出。这也就减少了动态输出中用户将经历可察觉暂停的可能性。以此方式,本专利技术的实施例允许热方法被动态编译。然而,当动态输出发生时,热方法的编译就被挂起以提供需要进行动态输出的处理资源给输出呈现机制。通过该方式自动控制动态编译,就有可能获得热方法编译好处而不会负面影响系统其他部分的操作。附图说明本专利技术通过附图实例来图示说明但不限于此,附图类似的标号表示类似的元素,其中图1是本专利技术实施例可以在其中执行的系统概况;图2是根据本专利技术的实施例所显示的动态输出监视器的操作流程图;图3是根据本专利技术的实施例的解释器的操作流程图;图4是根据本专利技术的实施例所显示的编译器的操作流程图;图5A是根据本专利技术实施例在采样机制操作期间的处理线程的框图;图5B是根据本专利技术实施例在热方法动态编译操作期间的处理线程的框图;以及图6是本专利技术实施例可以在其中执行的通用计算机系统框图。具体实施例方式在下面的描述中,出于解释的目的,阐述了大量的细节,以便彻底了解本专利技术。然而很清楚,本专利技术没有这些细节也是可实现的。在其他例子中,用框图形式示出公知结构和装置以避免对本专利技术不必要的模糊理解。结构概况先看图1,显示的是本专利技术实施例在其中执行的系统100的框图,为了方便图示,本专利技术实施例参考在系统100中JVM 101进行描述。然而应该注意的是,本专利技术并不局限于这样的实施例,也不必被JVM执行。另外,能够执行本文所述处理过程的任何系统都可能用上。系统100的例子可以包括手持计算装置,个人数字助理,移动电话,便携式计算机,PC计算机,或执行所述处理过程的其他任一类型的计算机系统。如所示出的,JVM 101包括解释器102和编译器106等等。解释器102和编译器106被JVM 101用来处理由系统100上的应用程序150调用的方法。解释器102通过执行字节码来解释性地执行方法。此外,解释器102使用执行日志104来记录方法的运行过程。在处理方法的过程中,解释器102还负责确定处理控制是否应该传送给编译器106。编译器106在被称为编译的处理过程中将字节码编译成原码。在编译期间,调用编译器106以将方法的字节码翻译成被一个或多个系统100处理器顺序执行的原始可执行码(native executable code)(本机代码)。另外,编译器106还负责多个其它任务。例如,根据一个实施例,编译器106还负责确定是否在执行日志104中为将来的编译标识方法。执行日志104包含了解释器102当前所执行过的方法的列表,执行日志104中所记录的方法被标识为“热方法”,该方法在一定间隔内被解释器102特别频繁地执行过。例如,根据一实施例,执行日志104可能是一个具有20个队列空间大小的队列,而每一个队列空间都代表最近被解释的方法。同理,执行日志104只跟踪最后20个被解释器102执行的方本文档来自技高网
...

【技术保护点】
一种机器执行方法,包括:    确定动态输出是否正在被呈现给用户;以及    响应于确定动态输出正被呈现给用户,使一组或多组指令不被编译,从而使所述一组或多组指令被解释执行。

【技术特征摘要】
US 2006-3-30 11/395,9851.一种机器执行方法,包括确定动态输出是否正在被呈现给用户;以及响应于确定动态输出正被呈现给用户,使一组或多组指令不被编译,从而使所述一组或多组指令被解释执行。2.根据权利要求1所述的机器执行方法,其中的确定包括接收表明正在被呈现给用户的输出的一个或多个指示;以及至少部分基于所述一个或多个指示,确定所述正在被呈现的输出是否为动态输出。3.根据权利要求2所述的机器执行方法,其中,确定所述输出是否为动态输出包括确定所述一个或多个指示正在被接收的频度。4.根据权利要求1所述的机器执行方法,其中,动态输出是指包括运动视频和音频那一组中的一个。5.根据权利要求1所述的机器执行方法,其中,使一组或多组指令不被编译包括使计算机系统停止将一组或多组指令标识为编译,其中,标识所述一组或多组指令使得所述计算机系统下一次处理这些指令时对其进行编译。6.根据权利要求5所述的机器执行方法,其中,编译使得所述一组或多组指令从第一种格式转换为第二种格式,其中,所述第二种格式被用于本机执行所述一组或多组指令。7.根据权利要求5所述的机器执行方法,其中,所述一组或多组指令是列在执行日志中最近被执行的指令组,以及其中,使所述计算机系统停止将一组或多组指令标识为编译包括使所述计算机系统停止标识在所述执行日志中的任一指令组。8.一种机器可读介质,包括一组或多组指令,当其被一个或多个处理器执行时,使所述一个或多个处理器执行如下操作确定动态输出是否正在对用户进行;以及响应于确定动态输出正在对用户进行,使一组或多组指令不被编译,从而使所述一组或多组指令被解释执行。9.根据权利要求8所述的机器可读介质,其中的确定包括接收表明正在对用户进行的输出的一个或多个指示;以及至少部分基于所述一个或多个指示,确定所述正在进行的输出是否为动态输出。10.根据权利要求9所述的机器可读介质,其中,确定输出是否为动态输出包括确定所述一个或多个指示正在被接收的频度。11.根据权利要求...

【专利技术属性】
技术研发人员:洛伊K拉姆奥列格A普利斯
申请(专利权)人:太阳微系统有限公司
类型:发明
国别省市:US[美国]

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

1