一种异常处理执行的优化方法和系统技术方案

技术编号:34775097 阅读:33 留言:0更新日期:2022-08-31 19:45
本发明专利技术涉及一种异常处理执行的优化方法和系统,属于计算机软件的技术领域。本发明专利技术的方法中将程序包中编译的多个类文件转换为一个可加载执行文件,执行方法调用指令以执行可加载文件中的方法并判断每一方法是否有异常处理器,若有,则将方法中异常处理信息表的位置信息添加至栈帧对应的字段中,当虚拟机抛出异常时,根据当前方法的栈帧获取异常处理信息表的位置并对异常进行处理。采用本发明专利技术所述的方法,虚拟机实现异常处理功能时无需维护全局的异常处理信息表链接列表,可以提高程序包的安装和删除速度,并且可以提升虚拟机处理异常时的处理效率,从而提升虚拟机对程序包进行执行的执行性能。行的执行性能。行的执行性能。

【技术实现步骤摘要】
一种异常处理执行的优化方法和系统


[0001]本专利技术属于计算机软件的
,具体涉及一种异常处理执行的优化方法和系统,用于在资源受限的设备实现虚拟机的异常处理功能。

技术介绍

[0002]在传统的Java程序中,一个类中的所有方法存储在一个称为类文件的数据结构中,每个方法可以有异常表而且每个方法的代码包括其异常处理表引用的异常处理器的代码,当创建一个类文件时,与方法相关的所有异常排列在一个异常处理表中。如果没有匹配的catch子句,当前方法存在无法捕获的异常,方法的调用者的异常状态被恢复,继续寻找匹配的异常处理器,重复上述步骤直到找到匹配的异常处理器进行异常处理,或者无匹配的异常处理器,虚拟机会停止执行。
[0003]传统的在资源受限装置内实现Java语言虚拟机,预先掩膜或者后安装包到虚拟机时,需要维护一个全局的异常处理信息表的链接列表,增加了后安装包的安装以及删除操作的复杂程度;当程序抛出异常时,虚拟机需要查询全局异常处理信息表链接列表,获取当前方法的异常处理器的位置信息,并执行找到匹配的异常处理器,当平台安装程序包较多时,会增加异常处理信息表的查询时间,从而增加程序的执行时间。因此,现有技术方法在资源受限装置内执行程序包对异常进行处理时存在处理时间较长的问题。

技术实现思路

[0004]针对现有技术中存在的缺陷,本专利技术的目的是提供一种异常处理执行的优化方法和系统。该方法和系统通过对方法中各组件的内容进行重新布局,对异常处理信息表中的程序包所定义的异常类采用类的内部表示方法,虚拟机执行方法并调用指令时,新建的栈帧通过增加方法的异常处理信息表的位置信息,以对异常处理过程进行优化,虚拟机实现异常处理功能时无需维护全局的异常处理信息表链接列表,可以提高程序包的安装和删除速度,并且可以提升虚拟机处理异常时的处理效率,从而提升虚拟机对程序包进行执行的执行性能。
[0005]为达到以上目的,本专利技术采用的技术方案是:一种异常处理执行的优化方法,包括以下步骤:
[0006]通过预置的转换程序将程序包中编译的多个类文件转换为一个可在资源受限装置安装执行的初始文件;所述程序包为待安装的程序安装包;所述初始文件中包括与异常有关的段及子段,所述与异常有关的段及子段包括动态绑定段、代码段、常量池子段、代码常量池索引位置子段;所述程序安装包定义的异常类采用动态绑定段的偏移表示;
[0007]通过执行方法调用指令以执行所述初始文件中的每一方法,并在执行过程中判断每一方法是否有异常处理器;方法调用时,创建的方法栈帧包括所述方法的异常处理信息表的位置信息;
[0008]若所述方法有异常处理器,将所述方法中异常处理信息表的位置信息添加至所述
栈帧对应的字段中;
[0009]当虚拟机抛出异常时,根据当前所述方法的栈帧获取异常处理信息表的位置并对所述方法中的异常进行处理。
[0010]进一步的,所述动态绑定段,获取所述程序包定义的异常类的信息;所述异常类的信息表示为finally子句、本包定义的异常类和导入包的异常类,本包定义的异常类采用动态绑定段的偏移表示,导入包的异常类采用常量池索引的方式表示;
[0011]所述常量池子段,获取所述程序包中异常类的引用信息;所述常量池子段引用导入所述程序包中的异常类;
[0012]所述代码常量池索引位置子段,用于安装所述程序包时对常量池索引进行解析时使用;
[0013]获取所述程序包中所有类的方法组成所述代码段,每一所述方法均包括方法头、对应的字节码,以及可选的异常处理信息表。
[0014]进一步的,所述方法的字节码中包括正常执行的字节码,以及可选的异常处理器的字节码,每个方法包括:所述方法的方法头以及可选异常处理信息表,以及所述方法的字节码;
[0015]所述的方法头包括标记字段,所述标记字段指示所述方法中是否包括异常处理信息表。
[0016]进一步的,所述异常处理信息表包括一个指示异常入口项个数的字段以及异常处理信息表,所述根据当前所述方法的栈帧获取异常处理信息表的位置并对所述方法中的异常进行处理,包括:
[0017]执行抛出异常时,根据当前所述方法的栈帧获取异常处理信息表的位置;其中,所述异常处理信息表包括开始地址、长度、异常类信息以及异常处理器的偏移地址;
[0018]判断所述方法是否存在异常处理信息表;
[0019]读取异常处理信息表进行异常处理器的匹配处理,以对所述方法中的异常进行处理。
[0020]进一步的,所述通过执行方法调用指令以执行所述初始文件中的每一方法,并在执行过程中判断每一方法是否有异常处理器之后,还包括:
[0021]若所述方法没有异常处理器,将标识无异常的特殊值添加至所述帧栈对应的字段中;所述特殊值与有效的方法字段位置信息不相同。
[0022]一种异常处理执行的优化系统,包括以下装置:
[0023]初始文件获取装置,用于通过预置的转换程序将程序包中编译的多个类文件转换为一个可在资源受限装置安装执行的初始文件;所述程序包为待安装的程序安装包;所述初始文件中包括与异常有关的段及子段,所述与异常有关的段及子段包括动态绑定段、代码段、常量池子段、代码常量池索引位置子段;
[0024]异常处理器判断装置,用于通过执行方法调用指令以执行所述初始文件中的每一方法,并在执行过程中判断每一方法是否有异常处理器;方法调用时,创建的方法栈帧包括所述方法的异常处理信息表的位置信息;
[0025]位置信息添加装置,用于若所述方法有异常处理器,将所述方法中异常处理信息表的位置信息添加至所述栈帧对应的字段中;
[0026]异常处理装置,用于当虚拟机抛出异常时,根据当前所述方法的栈帧获取异常处理信息表的位置并对所述方法中的异常进行处理。
[0027]进一步的,所述动态绑定段,获取所述程序包定义的异常类的信息;所述异常类的信息表示为finally子句、本包定义的异常类和导入包的异常类,所述程序安装包定义的异常类采用动态绑定段的偏移表示,导入包的异常类采用常量池索引的方式表示;
[0028]所述常量池子段,获取所述程序包中异常类的引用信息;所述常量池子段引用导入所述程序包中的异常类;
[0029]所述代码常量池索引位置子段,用于安装所述程序包时对常量池索引进行解析时使用;
[0030]获取所述程序包中所有类的方法组成所述代码段,每一所述方法均包括方法头、对应的字节码,以及可选的异常处理信息表。
[0031]进一步的,所述方法的字节码中包括正常执行的字节码,以及可选的异常处理器的字节码,每个方法包括:所述方法的方法头以及可选异常处理信息表,以及所述方法的字节码;
[0032]所述的方法头包括标记字段,所述标记字段指示所述方法中是否包括异常处理信息表。
[0033]进一步的,所述异常处理信息表包括一个指示异常入口项个数的字段以及异常处理信息表,所述异常处理装置包括单元:
[0034]位置获本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种异常处理执行的优化方法,其特征在于,所述方法应用于虚拟机中,所述方法用于对虚拟机执行程序安装包的异常处理过程进行优化,执行寄存器指令的所述虚拟机的栈帧由寄存器区及帧栈数据区组成,执行操作数栈指令的虚拟机的栈帧由局部变量区,操作数栈和帧栈数据区组成,所述帧栈数据区用于保存所调用方法的状态信息、方法的异常处理信息表位置,所述方法包括以下步骤:通过预置的转换程序将程序包中编译的多个类文件转换为一个可在资源受限装置安装执行的初始文件;所述程序包为待安装的程序安装包;所述初始文件中包括与异常有关的段及子段,所述与异常有关的段及子段包括动态绑定段、代码段、常量池子段、代码常量池索引位置子段;通过执行方法调用指令以执行所述初始文件中的每一方法,并在执行过程中判断每一方法是否有异常处理器;方法调用时,创建的方法栈帧包括所述方法的异常处理信息表的位置信息;若所述方法有异常处理器,将所述方法中异常处理信息表的位置信息添加至所述栈帧对应的字段中;当虚拟机抛出异常时,根据当前所述方法的栈帧获取异常处理信息,如果存在,通过获取的异常处理信息表的位置读取异常处理信息表,并对所述方法中的异常进行处理。2.如权利要求1所述的一种异常处理执行的优化方法,其特征在于;所述动态绑定段,获取所述程序包定义的异常处理类的信息;所述异常类的信息表示为finally子句、本包定义的异常类和导入包的异常类,本包定义的异常类采用动态绑定段的偏移表示,导入包的异常类采用常量池索引的方式表示;所述常量池子段,获取所述程序包中异常类的引用信息;所述常量池子段引用导入所述程序包中的异常类;所述代码常量池索引位置子段,用于安装所述程序包时对常量池索引进行解析时使用;获取所述程序包中所有类的方法组成所述代码段,每一所述方法均包括方法头、可选的异常处理信息表,以及对应的字节码。3.如权利要求2所述的一种异常处理执行的优化方法,其特征在于,所述方法的字节码中包括正常执行的字节码,以及可选的异常处理器的字节码,每个方法包括:所述方法的方法头以及可选异常处理信息表,以及所述方法的字节码;所述的方法头包括标记字段,所述标记字段指示所述方法中是否包括异常处理信息表。4.如权利要求3所述的一种异常处理执行的优化方法,其特征在于,所述异常处理信息表包括一个指示异常入口项个数的字段以及异常处理信息表,所述根据当前所述方法的栈帧获取异常处理信息表的位置并对所述方法中的异常进行处理,包括:执行抛出异常时,根据当前所述方法的栈帧获取异常处理信息表的位置;其中,所述异常处理信息表包括开始地址、长度、异常类信息以及异常处理器的偏移地址;判断所述方法是否存在异常处理信息表;读取异常处理信息表进行异常处理器的匹配处理,以对所述方法中的异常进行处理。5.如权利要求1所述的一种异常处理执行的优化方法,其特征在于,所述通过执行方法
调用指令以执行所述初始文件中的每一方法,并在执行过程中判断每一方法是否有异常处理器之后,还包括:若所述方法没有异常处理器,将标识无异常的特殊值添加至所述帧栈对应的字段中;所述特殊值与有效的方法字段位置信息不相同...

【专利技术属性】
技术研发人员:石玉平徐俊江郑江东王幼君
申请(专利权)人:北京握奇智能科技有限公司
类型:发明
国别省市:

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

1