[发明专利]将异常作为正常控制流进行处理的方法和装置有效
申请号: | 00107020.7 | 申请日: | 2000-04-24 |
公开(公告)号: | CN1271890A | 公开(公告)日: | 2000-11-01 |
发明(设计)人: | 小C·N·克利克;C·A·维克;M·H·帕莱茨尼 | 申请(专利权)人: | 太阳微系统有限公司 |
主分类号: | G06F9/45 | 分类号: | G06F9/45 |
代理公司: | 中国专利代理(香港)有限公司 | 代理人: | 王勇,王忠忠 |
地址: | 美国加利*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 异常 作为 正常 控制 流进 处理 方法 装置 | ||
本发明一般地涉及用于提高软件应用程序的性能的方法和装置。更具体地,本发明涉及用于将异常作为计算机程序的正常控制流的一部分来处理的方法和装置。
在提高与执行计算机程序相联系的效率的努力中,许多计算机程序被“优化”。优化计算机程序一般用于消除计算机代码的实质上未使用的部分。另外,优化计算机程序可以重新构造计算操作,使得整个计算更有效地执行,从而消耗更少的计算机资源。
优化器被安排为将一个计算机程序、例如以诸如C++、FORTRAN或Java字节码的程序设计语言写成的计算机程序有效地变换成一个更快的程序。更快或优化的程序一般包括基本上所有与初始或预先变换的计算机程序相同的、可观察得到的行为。更具体地,优化器包括与其相联系的初始程序相同的数学行为。然而,优化程序一般以更少的计算重新产生相同的数学行为。
优化器一般被安排为处理与计算机程序相联系的异常。如本领域普通技术人员所了解的,异常一般是要求在正常控制流之外处理的事件或条件。如名字“异常”所隐含的,意指信号稀少的或异常的事件。虽然程序有可能在其正常处理中采用异常,但对异常的处理通常与稀少差错条件相联系。与计算机程序相联系的异常一般或者涉及阵列范围检查,或者涉及无效指针访问。
在计算机程序中实施范围检查以确定一个阵列的引用是否位于该阵列的边界内。在计算机程序中可以包括专用代码来处理一个范围检查。当阵列引用不在阵列的边界内时,可以产生一个异常来表明该引用在阵列的边界之外。
无效指针引用一般涉及使用不指向任何有效存储单元的指针。在一些程序设计语言中,例如,在由加利福尼亚的Palo Alto的SunMicrosystems公司开发的JavaTM程序设计语言中,指针或者指向一个有效存储单元,或者是一个空值。当引用一个空指针时,投出一个异常。在一些情况下,可能会出现对空指针的冗余测试、即“空检查”。当第一测试表明指针不是空值时,则被安排为测试指针是否是空值的第二测试是冗余测试。如本领域普通技术人员所了解的,在试图加载与指针相联系的内容时,对空指针的测试被隐含地执行。
图1a是包括加载指针的命令并因此隐含地包括空检查的源代码的图解表示。源代码102包括将与指针相联系的内容加载进寄存器的命令或指令。举例来说,命令103是通过指针“ptrl”加载字段“A”的内容的命令。当这种命令出现时,中央处理单元[CPU]硬件进行检查以确定该指针是否是有效指针。对于JavaTM程序设计语言,只有无效指针是空指针。因此,由CPU硬件检查进行的检查在实质上是对空指针的检查。命令104也是通过指针“ptrl”进行加载的命令。虽然相对于命令103就指针“ptrl”是否为空通常已经作出了确定,但相对于命令104通常还对指针“ptrl”是否为空进行一个实质上冗余的检查。将源代码102提供给用于优化源代码102的优化器106。一旦完成了优化过程,则生成与源代码102相联系的机器代码110。
当响应于空指针的识别投出一个异常时,一般访问一个表来处理该异常。这种表常常是将异常类型映射到一个用于处理异常的合适的代码段的查找表。图1b是处理异常和访问查找表以处理异常的代码的图解表示。代码表示152包括被安排为投出不同类型的异常的调用。对投出“真异常”的函数的调用154产生一个被访问的查找表160。更具体地,“真异常”用作为进入查找表160的索引,使得适当的代码段与“真异常”的投出相联系。如图所示,代码段157最终由调用154访问。同样,对投出“假异常”的函数的调用156通过查找表160映射到代码段158。
一般来说,每次投出一个异常时,例如,每次对投出“真异常”的函数进行调用时,则将存储器定位到一个异常对象。也就是说,为投出的每个异常产生一个异常对象。如同本领域普通技术人员所了解的,这种异常对象经常从来不用。然而,异常对象被认为是在使用的,并因此不由优化器在优化过程中消除。因此,初始化异常对象的时间以及由异常对象所占据的存储空间实际上被浪费了,因为可能不会为替换的使用重新分配存储空间。
在诸如JavaTM程序设计语言的程序设计语言中,一般需要精确的异常处理。精确的异常处理一般要求异常检查既不被重新排序也不被移去。如此,则冗余代码常常与对异常、例如如上所述的空指针异常的处理相联系。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于太阳微系统有限公司,未经太阳微系统有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/00107020.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:用于接收广播信号的接收机
- 下一篇:具有排液特性的损坏指示盖