零开销异常处理制造技术

技术编号:2882169 阅读:205 留言:0更新日期:2012-04-11 18:40
用于在由机器执行一个或多个类的方法的过程中处理可丢出异常的设备与过程,包括计算机实现的过程。每个方法包括一个定义与该方法相关的异常处理器的异常处理器数组。该方法包括把用于所有方法的异常处理器数组结合成一个单独的异常处理器表。(*该技术在2020年保护过期,可自由使用*)

【技术实现步骤摘要】
本专利文档公开的一部分包含受版权保护的材料。版权所有者不反对复制已经出现在专利与商标管理处专利文件或记录中的专利公开的任一部分,但保留除此之外的所有版权。背景本专利技术一般涉及面向对象的计算机软件,特别涉及为了在一个实现在资源受限的设备如智能卡中的Java虚拟机中支持异常处理时使栈存储要求最小的数据结构和方法。一个虚拟机是由在处理器上执行的应用软件或指令序列产生的一个抽象的计算机器。在虚拟机上执行的程序可以是“体系结构中立(architecture-neutral)”。术语“体系结构中立”指的是程序,像那些用Java TM语言编写的程序,它们可以在有多种不同计算机体系结构的不同计算机平台上由虚拟机执行。这样,举例来说,一个在基于WindowsTM的个人计算机系统上实现的虚拟机可以使用与在基于UNIXTM的计算机系统上实现的虚拟机相同的指令系统。一个虚拟机的指令序列的平台无关编码的结果是一个含一个或多个字节码的流,例如它们中的每一个是一个单字节长的数字代码。Java编程语言是一个面向对象的编程语言。在一个面向对象的系统中,“类”描述数据以及对这些数据进行操作的方法的集合。合在一起,这些数据和方法描述一个对象的状态和行为。Java编程语言也是可检验的,这意味着,在一个用Java编程语言编写的应用程序执行之前,就可以判断是否有程序中的指令序列试图为字节码处理不正确类型的数据或者程序中字节码指令的执行是否会引起操作数栈的下溢或上溢。Java虚拟机执行用Java编程语言写的虚机器代码并满足下面提到的“JavaTM虚拟机规范”。Java虚拟机被设计为使用32位的体系结构。然而,许多资源受限的设备,像智能卡,有8位和16位体系结构。智能卡,也被认为是智能移动数据传输卡,通常用塑料或金属制成并有一个包含一个用来执行程序的嵌入式微处理器和一个用来存储程序和数据的存储器的电子芯片。这些设备可以像一张信用卡大小,通常只有有限的存储容量。有限的体系结构和存储器使得在这些设备上实现一个Java虚拟机不切实际或者是不太可能的。例如,一些智能卡只有不到1K的随机访问存储器(RAM)和16K的只读存储器(ROM)。当在一个资源受限的设备上实现一个Java虚拟机时一个困难的例子出现在对异常的处理中。参照附图说明图1,在用Java编程语言编写的计算机程序的上下文中,异常处理器100是一个过程(或者是过程中的一个指令集合),用来保护程序代码的一个特定集合,称作被保护代码块112.当一个Java程序违反了Java编程语言的语义约束时,Java虚拟机把这个错误作为一个异常通知给该程序。在相应被保护代码的执行过程中,无论何时只要可适用的异常被“丢出”异常处理器就被执行。Java编程语言规范规定在语义约束被违反时一个异常将被丢出并引起一个从异常发生点到一个可以由程序员指定的点的非本地传输控制。一个异常被说成是从它发生的点被丢出并在控制被传向的点被捕获到。例如,一个特定的异常处理器,像一个处理“文件终点”I/O错误的过程,可以被定义为适用于第一个方法104的一个特定部分。如果相应异常(也就是本例中的文件终点异常)在被保护代码的执行过程中产生,异常处理器100的执行就被初始化。异常可以被隐含地或明确地丢出。隐含异常被Java虚拟机作为程序指令执行的结果丢出,像空指针异常。作为选择,明确异常可以被包括在使用Java“throw”语句的方法体中。如果有一个针对被丢出异常(thrown exception)的可适用的封装的异常处理器被丢出的异常就被说成是被异常处理器捕获到。封装的异常处理器的可适用指令范围包括丢出相应异常的指令。从一个方法中特定指令的观点来看,封装的异常处理器集就是那些可适用指令范围(被保护代码的集合)包括特定指令的异常处理器的集合。当提到异常处理器时Java编程语言通常指的是“try语句”,“try块”,“catch子句”以及“finally子句”。一个try语句包括一个try块,零个或多个catch子句以及可选择的finally子句。异常被try块中的封装代码捕获到。try块是特定异常处理器适用代码(也就是被保护的代码块)的一部分。catch子句定义了一个异常处理器。try语句中的finally子句为执行一节代码提供了一个机制,无论是否有异常被丢出。在一个Java程序中,如果语句或表达式出现在try语句的try块中且catch子句是try语句的一部分,或者语句或表达式的调用者被catch子句动态封装,则语句或表达式被catch子句动态封装。一个特定的catch子句是否处理一个异常是由对被丢出异常对象的类与catch子句中参数的声明类型进行比较来决定的。如果catch子句的参数的类型是异常的类或是异常类的超类catch子句就处理异常。等价地,一个catch子句将捕获是所声明参数类型的实例的任何异常。如果第一个方法的被保护部分包括对其他方法106的调用(在Java虚拟机规范中被称为“invoke”指令,见下),它可能依次包括对更多方法108,110的嵌套调用,这时由被被保护代码102直接或间接调用的方法106,108,110中的任何一个所产生的“文件终点”错误也将会引起异常处理器100的执行被调用。然而,嵌套的方法112可以包括它自己的文件终点异常处理器114.如果一个异常在执行方法112时被丢出,这时异常处理器114将被用来处理由被包括在该嵌套方法中的指令的执行所引起的文件终点异常,以及由被嵌套方法112调用的任一方法116的执行所产生的异常。在传统Java程序中,与一个对象类相关的所有方法一起被存储在一个称为类文件的数据结构中,它被定义在Java虚拟机规范中。每一个方法有它自己的异常表而且每个方法的代码包括用于被它的异常表所引用的异常处理器的代码。当一个Java类文件被创建时,与一个方法相关的所有异常被排列在一个列表中,作为异常处理器表被查阅。参见图2,一个传统的异常处理器表200包括一个或多个catch子句(异常处理器)202.每个catch子句202包括一个起始程序计数器地址204和一个结束程序计数器地址206,它们描述了对其来说异常处理器是活动的Java虚拟机指令范围,类型指示器208描述catch子句将要处理的异常的类型以及一个异常处理器代码的异常将从其开始的地址210。异常处理器表中catch子句的顺序非常重要。一个异常的丢出会导致Java虚拟机在异常处理器表中进行搜索。Java虚拟机的执行在第一个匹配的catch子句处继续。因为Java代码是结构化的,把用于一个方法的所有异常处理器排列在一个列表中通常是不可能的。对任意可能的程序计数器值这个列表都可以被搜索以找到合适的异常处理器,也就是说,最里层的异常处理器不仅封装了程序计数器(pc)值(在那里异常被丢出)并且可以处理正在被丢出的异常。如果没有匹配的catch子句,当前方法就被说成是有一个无法捕获的异常。当一个异常无法捕获时,调用者,也就是调用当前方法的方法(如果有的话)的异常状态被恢复。即使异常已经在调用者中调用实际产生异常的方法的指令处发生异常的传播仍然继续。Java虚拟机保持许多不同的运行期数据结构以追踪方法的执行和调用。一个Java虚拟机可以同时支持许多执本文档来自技高网...

【技术保护点】
一种计算机实现的过程,用于由机器执行在一个或多个类的方法的过程中处理可丢出异常,每个方法包括一个定义与方法相关的异常处理器的异常处理器数组,该过程包含: 把用于两个或多个方法的异常处理器数组结合成一个单独的异常处理器表。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:JE施瓦贝JB苏塞尔
申请(专利权)人:太阳微系统有限公司
类型:发明
国别省市:US[美国]

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

1