当前位置: 首页 > 专利查询>复旦大学专利>正文

一种动静态结合的Java程序异常处理优化方法技术

技术编号:6069046 阅读:309 留言:0更新日期:2012-04-11 18:40
本发明专利技术属于Java编译运行环境设计技术领域,具体一种Java动静态结合的的异常处理优化方法。本发明专利技术把动静结合的编译运行环境分为两个阶段:静态处理阶段和动态执行阶段。静态处理阶段主要是在静态编译器里分析和收集程序的异常处理信息,如产生异常的语句,异常的类型及异常着陆点等信息;动态执行阶段主要是利用静态分析得到的异常处理信息,在异常发生的时候根据异常的类型和异常着陆点跳转到相应的异常处理代码段,执行异常处理的相关操作。本发明专利技术糅合动、静优化技术来完成Java程序编译工作,从而达到提供一个最优的异常处理机制的效果。

A dynamic and static Java program exception handling optimization method

The invention belongs to the technical field of Java compiling and running environment design, in particular to an abnormal processing optimization method of Java dynamic and static combination. The invention integrates the static and dynamic compiling environment into two stages: a static processing stage and a dynamic execution stage. Static processing stage is the exception handling information analysis and collection procedures in a static compiler, such as abnormal statements, types of abnormal and abnormal landing point information; dynamic execution stage is mainly using static analysis of exception handling information, when the exception occurred according to the types of abnormal and abnormal abnormal jump to the landing point with the code, execute exception handling. The invention combines dynamic and static optimization techniques to complete the compiling of the Java program, thereby achieving the effect of providing an optimal exception handling mechanism.

【技术实现步骤摘要】

本专利技术属于Java编译运行环境设计
,具体涉及Java静态编译器和动态 虚拟机中的异常处理优化方法。
技术介绍
异常处理机制是现代编程语言中普遍采用的一种提高程序可靠性的方法。作为 目前应用最广泛的面向对象编程语言,Java也将异常处理机制视为语言规范的一个重要方 面。如何正确地实现Java的异常处理机制是实现任何Java编译运行环境的关键部分。目前Java编译运行环境主要采用静态和动态两种编译优化方式。静态优化方式 是将Java源程序或字节码(byte code)直接编译成可执行代码;动态编译优化方式,则先 将Java源程序翻译成平台无关的字节码,然后由Java虚拟机(Java Virtual Machine)对 字节码进行解释或优化编译执行。上述传统Java编译运行环境存在着各自的缺陷静态编译优化将程序编译成可 执行代码,它破坏了 Java的跨平台性,其优化的效果也不理想。而动态编译优化则会带来 高昂的运行时开销,给通过动态编译执行的程序带来了额外的负担。而糅合动、静优化技术 来优化Java程序的系统框架在静态端对源程序进行静态分析与优化并将静态分析的结果 传递给动态端,动态端结合静态分析的结果进行基于采样的动态优化,这样既保留Java的 跨平台性,又能减少运行时开销,保障程序性能。然而,现有的Java异常处理机制一般只适用于纯静态或纯动态的Java编译运行 环境。所以要完成以上工作还存在的一个问题是目前的技术中缺少一套既适用于静态优 化,又能在Java虚拟机中正常工作的Java异常处理机制。
技术实现思路
本专利技术的目的在于针对目前的技术中缺少一套既适用于静态优化,又能在Java 虚拟机中正常工作的Java异常处理机制的这一问题,提出一种Java动静态结合的异常处 理优化方法。本专利技术调研了不同的Java静态编译器和动态虚拟机中对异常处理机制设计的差 异,发现这些设计在处理原理上具有很大程度的相似,只是在具体的算法实现时有较大的 差异。该结果说明,建立统一优化方法框架的可能性和优越性。本专利技术采用的技术方案为为实现一个糅合动、静优化技术来完成Java程序编译 工作的框架,在这个框架上再完成适用的各种动、静态优化方法,从而达到提供一个最优的 异常处理机制的效果。本专利技术调研了动静结合的编译运行环境的特点异常信息的收集和异常处理是分 别在两个不同的环境的。一般来说,异常信息的收集这一过程发生在静态编译器端,而真正 执行异常处理的过程发生在动态虚拟机里面,即是动静结合的编译运行环境区别于传统的 纯静态或纯动态的编译运行环境的最关键之处。针对调研中动静结合的编译运行环境的特点,本专利技术把动静结合的编译运行环境 分为两个阶段静态处理阶段和动态执行阶段。静态处理阶段主要是在静态编译器里分析 和收集程序的异常处理信息,如产生异常的语句,异常的类型及异常着陆点等信息;动态执 行阶段主要是利用静态分析得到的异常处理信息,在异常发生的时候根据异常的类型和异 常着陆点跳转到相应的异常处理代码段,执行异常处理的相关操作。本专利技术对基于动静结合的编译运行环境的Java异常处理方法,共分为5个阶段, 图1中是异常处理编译、执行设计的整体示意图,具体步骤如下1、在静态处理阶段,分析识别Java程序中所有可能抛出异常的语句;2、在静态处理阶段,利用静态编译器前端分析try-catch-finally的层次关系;3、在静态处理阶段,确定可能抛出异常的语句的异常着陆点;4、在静态处理阶段,将静态编译器收集到的异常处理信息转化为动态编译器需要的异 常处理信息;5、在动态执行阶段,利用动态编译器提供的运行时支持函数来完成异常处理的跳转等 操作。前三个阶段只要是分析并收集程序的异常信息,这些异常处理信息主要用于静态 编译器对程序进行优化的过程。由于静态编译器里收集到的异常处理信息并不能直接在动 态虚拟机上使用,因此,该异常处理机制会在适当的时机将静态收集到的异常处理信息转 化为动态虚拟机需要的异常处理信息,这一过程对应于阶段四。最后,在Java程序运行过 程中,如果有异常产生,该机制会利用运行时环境提供的支持函数,再结合异常处理信息来 跳转到相应的异常处理的代码。本专利技术的有益效果是1)本专利技术提供了一个实现糅合动、静优化技术来完成Java 程序编译工作的统一优化框架,实现了 Java程序在动静结合的环境中编译和运行。2)本发 明使得一个Java程序可以同时运用动静态异常处理优化,提供了更多的优化机会。3 )本发 明使得更多不同的优化算法能在这一框架下方便的被实现,很大程度上方便了今后异常处 理优化的设计和实现。4)框架的实现不针对具体的某一平台,这样的设计增加了本框架的 平台可移植性。附图说明图1所示为动静结合的Java异常处理机制的整体框架。图2所示为实施例Java异常代码片段。图3所示为实施例代码片段的补偿代码。图4所示为实施例对应的异常处理代码示意图。图5所示为实施例动态编译器的表示形式。图6所示为程序栈空间中方法栈的示意图。具体实施例方式本专利技术设计并实现了上述的动静结合Java异常处理机制的整体框架,本节对该 框架的具体实施作一个详细的介绍。图1为动静结合的Java异常处理机制的整体框架,描 述了本专利技术框架中,Java程序编译和执行的流程。本专利技术分5个步骤前4个步骤属于静态分析的范畴,最后一个步骤是动态执行的范畴。下面将以实施例的形式对本专利技术每个步骤进行详细的介绍,展示本框架把Java 代码编译成可执行代码的全过程。(实施例Java异常代码片段见图2)。步骤一、分析识别可能抛出异常的语句本步骤目的在于得到能够引发异常的语句,通常是下面三种语句中的一种(1) throw 语句;( 可能引发异常的函数调用语句;C3)在程序运行过程中可能违反Java语言的语 义规则的语句。以图2中的代码片段为例,第5行的除法操作就是一个能够引发异常的语 句,如果right这个变量的值为0,程序就会产生一个除零异常。静态编译器总会有一个将Java源程序转化为抽象语法树的过程。本专利技术的框架 在Java程序转化为相应的抽象语法树之后,对该抽象语法树进行操作,识别那些可能引发 不受检查异常的节点。下面我们给出处理的流程。首先,获得Java源程序转化后的抽象语法树后,遍历整个抽象语法树,查找可能 弓I发不受检查异常的语句,记录它的位置。接着,对记录下来的每一个节点查看其父节点是否是if语句。如果不是,则对其 进行标记。如果是,则检查判断条件是否包含当前节点发生异常的条件,如果没有,同样对 该节点做标记。然后对标记下来的每个节点,根据其类型判断其引发异常的条件,然后在抽象语 法树的适当位置插入相应的补偿代码。以图2中的代码为例,静态编译器会对本程序添加 判断,判断变量right的值是否为0,如不是则正常运行;如是则抛出异常。补偿后的代码 如图3,补偿代码中插入了第5、第6行的判断。经过上述的处理后,程序中可能引发异常的点就由throw语句的集合和会引发异 常的函数调用语句的集合组成,即补偿代码(图3)中的第6行throw语句。而函数调用语 句可以分为用户自定义函数调用语句和库函数调用语句。用户自定义函数抛出异常的本质 还是由函数体内的throw语句和函数调用本文档来自技高网...

【技术保护点】
1.一种Java动静态结合的异常处理优化方法,其特征在于把动静结合的编译运行环境分为两个阶段:静态处理阶段和动态执行阶段,具体步骤如下:(1)在静态处理阶段,分析识别Java程序中所有可能抛出异常的语句;(2)在静态处理阶段,利用静态编译器前端分析try-catch-finally的层次关系;(3)在静态处理阶段,确定可能抛出异常的语句的异常着陆点;(4)在静态处理阶段,将静态编译器收集到的异常处理信息转化为动态编译器需要的异常处理信息;(5)在动态执行阶段,利用动态编译器提供的运行时支持函数来完成异常处理的操作。

【技术特征摘要】

【专利技术属性】
技术研发人员:杨珉王迪许铝才臧斌宇
申请(专利权)人:复旦大学
类型:发明
国别省市:31

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

1