用于Java编程中的循环中止的系统和方法技术方案

技术编号:13360409 阅读:53 留言:0更新日期:2016-07-17 19:55
系统和方法被提供用于循环过程中止。与循环过程相关联的一个或多个循环指令被加载在代码高速缓存中。代码高速缓存中的与循环过程的分支相关联的一个或多个分支指令被确定。中止事件被检测。一经检测到中止事件,在代码高速缓存中,分支指令被替换为一个或多个跳转指令。如果跳转指令在代码高速缓存中被执行,则代码高速缓存中的分支指令被恢复,并且循环过程被中止。与中止事件相关联的一个或多个中止指令在解释器中被执行。

【技术实现步骤摘要】
【国外来华专利技术】相关申请的交叉引用本公开内容要求对2013年11月25日提交的美国临时专利申请No.61/908,429的优先权和来自该美国临时专利申请的权益,它的整体通过引用并入本文。
本专利文件中所描述的技术一般性地涉及计算机编程并且更特别地涉及Java编程。
技术介绍
Java程序可以运行在Java虚拟机(JVM)正在其上执行的任何机器上。在JVM(例如,Dalvik)中,在Java程序的启动时,可以使用解释器(interpreter)来执行Java字节代码。例如,在Java程序被执行之前,程序的源代码被分解为Java字节代码。在运行时,JVM的Java解释器对字节代码进行解释。作为一种备选,JVM可以选择不对字节代码进行解释,而是将字节代码编译分为本机(native)代码。JVM然后促使本机代码直接由一个或多个处理器执行。例如,频繁使用的字节代码被编译为本机代码以改进运行性能。即时(Just-in-time)编译(JIT)(也被称为动态转换)是程序或应用在运行时的执行期间而不是在执行之前进行的编译。经常地,JIT牵涉到向用于Java程序的本机代码的转换/编译。例如,本机代码(例如,轨迹(trace))被放入到JIT代码高速缓存中以用于执行。如图1中所示出的,JIT代码高速缓存100包括通常使用的子例程(例如,TEMPLATE_CMP_LONG)和本机代码(例如,轨迹-1)。
技术实现思路
根据本文所描述的教导,系统和方法被提供用于循环过程中止。与循环过程相关联的一个或多个循环指令被加载在代码高速缓存中。代码高速缓存中的与循环过程的分支相关联的一个或多个分支指令被确定。中止事件被检测。一经检测到中止事件,在代码高速缓存中,分支指令被替换为一个或多个跳转指令。如果跳转指令在代码高速缓存中被执行,则代码高速缓存中的分支指令被恢复,并且循环过程被中止。与中止事件相关联的一个或多个中止指令在解释器中被执行。在一个实施例中,一种用于循环过程中止的系统包括:代码高速缓存,被配置为存储与循环过程相关联的一个或多个循环指令;监测器组件,被配置为确定代码高速缓存中的与循环过程的分支相关联的一个或多个分支指令,并且一经检测到中止事件,在代码高速缓存中将分支指令替换为一个或多个跳转指令;运行组件,被配置为响应于跳转指令在代码高速缓存中被执行,恢复代码高速缓存中的分支指令并且中止循环过程;以及解释器组件,被配置为执行与中止事件相关联的一个或多个中止指令。在另一实施例中,一种用于循环过程中止的系统包括:代码高速缓存,被配置为存储与循环过程相关联的一个或多个循环指令;以及一个或多个数据处理器。这些数据处理器被配置为:确定代码高速缓存中的与循环过程的分支相关联的一个或多个分支指令;检测中止事件;一经检测到中止事件,在代码高速缓存中将分支指令替换为一个或多个跳转指令;在代码高速缓存中执行跳转指令;恢复代码高速缓存中的分支指令;中止循环过程;以及在解释器中执行一个或多个中止指令,这些中止指令与中止事件相关联。附图说明图1描绘了示出JIT代码高速缓存的示例示图。图2描绘了示出循环过程中止的示例示图。图3描绘了示出循环过程中止的另一示例示图。图4(A)和图4(B)描绘了示出用于循环过程中止的代码布局(layout)的示例示图。图5(A)和图5(B)描绘了示出用于恢复分支指令的代码的示例示图。图6描绘了示出用于循环过程中止的某些本机代码的示例示图。图7描绘了用于循环过程中止的示例流程图。具体实施方式通常,JIT代码高速缓存中的代码执行比在解释器中更快速。然而,解释器能够执行不适合于JIT代码高速缓存的大量的复杂处理逻辑和辅助操作。因此,在某些情形下可能需要从JIT代码高速缓存切换到解释器。例如,垃圾收集(GC)过程可能更好地是使用解释器来执行。具体地,监测线程可以在JVM中设置中止标记以指示需要暂停对当前过程的执行。解释器定期地检测中止标记。如果检测到该标记被设置,则当前(例如,正在JIT代码高速缓存中被执行)的过程被中止并且使用解释器来执行GC过程。一经完成GC过程,就传输信号以唤醒被中止的过程。在当前过程对应于经常要求长时间来执行的循环过程时,在执行GC过程之前等待直到整个循环过程结束可能就太迟了。因此,循环过程可能需要不时地被中止以便执行GC过程。图2描绘了示出循环过程中止的示例示图。如图2中所示出的,(例如,作为Java程序的一部分的)循环过程的源代码202被分解为字节代码204,并且一些字节代码被编译为本机代码206。在循环过程的每次迭代中的循环返回边缘处检查中止标记。如果中止标记被设置,则(例如,JIT代码高速缓存中执行的)循环过程被中止并且进入解释器以便执行(例如,与GC过程有关的)某些中止指令。具体地,(例如,在“000d”处的)字节代码208对应于循环返回边缘,并且与循环返回边缘相关联的本机代码210被执行以检查中止标记。如图2中所示出的,[r6,#42]对应于中止标记的地址。如果中止标记不是零,则它指示中止标记被设置。(例如,与重构DalvikPC有关的)本机代码212被执行。JIT代码高速缓存中执行的循环过程被中止。如图2中所示出的,[r6,#108]对应于解释器的入口,并且[r15pc,#64]对应于解释器的一个或多个参数的设置。图3描绘了示出循环过程中止的另一示例示图。如图3中所示出的,当中止事件发生时,与JIT代码高速缓存302中的循环过程的关键路径(例如,循环返回边缘)相关联的一个或多个分支指令被替换为用于跳转到解释器304的指令。因此,循环过程响应于中止事件而被中止,并且(例如,与GC过程有关的)某些中止指令在解释器304中被执行。具体地,监测器线程306响应于(例如,与GC过程有关的)中止事件来设置中止标记。另外,监测器线程306确定与循环过程的关键路径(例如,循环返回边缘)相关联的一个或多个分支指令,并且将这些分支指令替换为一个或多个跳转指令。当与JIT代码高速缓存302中的循环过程相关联的指令的执行到达关键路径(例如,循环返回边缘)时,运行线程308JIT在代码高速缓存302中恢复(restore)分支指令并且跳转到解释器304。例如,可以在解释器304中的(例如,与GC过程有关的)中止指令的执行之后立即重新开始(resume)循环过程。在另一示本文档来自技高网...

【技术保护点】
一种用于循环过程中止的方法,所述方法包括:在代码高速缓存中加载与循环过程相关联的一个或多个循环指令;确定所述代码高速缓存中的与所述循环过程的分支相关联的一个或多个分支指令;检测中止事件;一经检测到所述中止事件,在所述代码高速缓存中将所述分支指令替换为一个或多个跳转指令;响应于所述跳转指令在所述代码高速缓存中被执行,恢复所述代码高速缓存中的所述分支指令;中止所述循环过程;以及在解释器中执行一个或多个中止指令,所述中止指令与所述中止事件相关联。

【技术特征摘要】
【国外来华专利技术】2013.11.25 US 61/908,4291.一种用于循环过程中止的方法,所述方法包括:
在代码高速缓存中加载与循环过程相关联的一个或多个循环指
令;
确定所述代码高速缓存中的与所述循环过程的分支相关联的一
个或多个分支指令;
检测中止事件;
一经检测到所述中止事件,在所述代码高速缓存中将所述分支指
令替换为一个或多个跳转指令;
响应于所述跳转指令在所述代码高速缓存中被执行,
恢复所述代码高速缓存中的所述分支指令;
中止所述循环过程;以及
在解释器中执行一个或多个中止指令,所述中止指令与所述
中止事件相关联。
2.根据权利要求1所述的方法,其中所述分支对应于与所述循
环过程相关联的循环返回边缘。
3.根据权利要求1所述的方法,进一步包括:
响应于所述跳转指令在所述代码高速缓存中被执行,跳转到所述
解释器。
4.根据权利要求1所述的方法,进一步包括:
设置中止标记。
5.根据权利要求4所述的方法,其中在所述循环过程期间不测
试所述中止标记。
6.根据权利要求1所述的方法,进一步包括:
响应于所述分支指令在所述代码高速缓存中被恢复,测试中止标
记;以及
响应于所述中止标记没有被设置,继续所述循环过程。
7.根据权利要求1所述的方法,其中所述代码高速缓存与即时

\t(JIT)编译器相关联。
8.根据权利要求1所述的方法,其中所述解释器与Java虚拟机
相关联。
9.一种用于循环过程中止的系统,所述系统包括:
代码高速缓存,被配置为存储与循环过程相关联的一个或多个循
环指令;
监测器组件,被配置为确定所述代码高速缓存中的与所述循环过
程的分支相关联的一个或多个分支指令,并且一经检测到中止事件,
在所述代码高速缓存中将所述分支指令替换为一个或多个跳转指令;
运行组件,被配置为响应于所述跳转指令在所述代码高速缓存中
被执行,恢复所述代码高速缓存中的所述分支指令并且中止所述循环
过程;以及
解释器组件,被配置为执行与所述中止事件相关联的一...

【专利技术属性】
技术研发人员:黄海涛高丽萍齐歆瑜简宁胜
申请(专利权)人:马维尔国际贸易有限公司
类型:发明
国别省市:巴巴多斯;BB

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

1