一种运行Java程序的方法和装置制造方法及图纸

技术编号:7786297 阅读:157 留言:0更新日期:2012-09-21 07:20
本发明专利技术实施例公开一种运行Java程序的方法和装置,该方法包括:Java虚拟机判断RAM中的Java栈是否满足第一预设条件,如果Java栈不满足第一预设条件,则继续运行Java程序;如果Java栈满足第一预设条件,则Java虚拟机将Java栈中的一个或多个帧复制到非易失性存储器中,将Java栈顶指针向Java栈底部方向移动,并继续运行Java程序。Java虚拟机判断Java栈是否满足第二预设条件,如果Java栈不满足第二预设条件,则继续运行Java程序;如果Java栈满足第二预设条件,则Java虚拟机将非易失性存储器中的一个或多个帧复制到Java栈中,将Java栈顶指针向Java栈顶部方向移动。本发明专利技术实施例使用非易失性存储器作为Java栈的扩展存储空间,可以避免由于资源不足而导致的异常情况的发生。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别是涉及一种运行Java程序的方法和装置
技术介绍
Java虚拟机是一种用于计算设备的规范,可以通过在实际的计算机上仿真模拟各种计算机功能来实现的。在Java应用开发过程中,开发人员使用IDE(IntegratedDevelopment Environment,集成开发环境)编写Java源代码文件(· java),并调用Java的编译器将Java源代码编译成与平台无关的字节码,Java虚拟机加载并执行上述字节码。Java卡虚拟机是Java虚拟机的子集合,用于对Java 卡Applet进行程序编译、执行以及结果返回。同Java虚拟机一样,Java卡虚拟机的运算模式也是基于栈的结构的,通过将局部变量入栈进行运算,在运算结束后,将运算结果出栈并写回局部变量。具体地,Java卡虚拟机运行时,会开设用于存储数据的Java栈,Java栈中存储的数据以帧为单位。在调用一个新的方法时,Java卡虚拟机会向Java栈中压入一个新帧。上述正在执行的方法称为当前方法,当前方法使用的帧称为当前帧,当前帧用于记录当前方法的运行状态。Java卡虚拟机在当前帧内调用当前方法对应的Java字节码,在当前方法执行结束后,将当前帧弹出并抛弃。由上述运算模式可知,Java卡虚拟机对栈的大小要求较高。现有的实现中,通常将Java栈放在RAM (Random Access Memory,随机存储器)中。专利技术人在实现本专利技术的过程中,发现现有技术至少存在以下缺陷现有的嵌入式芯片的RAM通常只有几K至十几K的存储空间,且其中的大部分空间还要用于存储C的全局变量和栈,以及用作通信的缓存和虚拟机的堆空间,因此,留给Java栈的空间通常都会比较少,会限制Java方法的调用层次和递归调用的深度。如果Java方法的调用层次过深,RAM将无法提供足够的空间执行Java方法。当Java卡虚拟机无法向RAM中的Java栈压入新巾贞时,Java卡应用程序将无法正常运行,JCRE (Java Card RuntimeEnvironment, Java卡运行环境)会抛出资源不足的异常。
技术实现思路
本专利技术实施例提供了一种运行Java程序的方法和装置,以解决RAM中的Java栈的空间不足的缺陷。本专利技术实施例提供了一种运行Java程序的方法,包括①、Java虚拟机判断随机存储器RAM中的Java栈是否满足第一预设条件,如果所述Java栈不满足所述第一预设条件,则继续运行Java程序;如果所述Java栈满足所述第一预设条件,则执行步骤②;②、所述Java虚拟机将所述Java栈中的所有帧复制到非易失性存储器中,将Java栈顶指针移动到Java栈底部,并继续运行Java程序;或者,所述Java虚拟机从位于所述Java栈底部的帧开始,选取一个帧或多个连续存储的帧,将选取的帧复制到所述非易失性存储器中,并判断所述Java栈中是否存在未被选取的帧,如果存在一个未被选取的帧,则将所述未被选取的帧复制到所述Java栈中的包括所述Java栈底部在内的存储空间,将所述Java栈顶指针移动到所述Java栈中与所述未被选取的帧被复制到的存储空间相邻且比所述存储空间更接近所述Java栈顶部的位置;如果存在多个未被选取的帧,则按照各个未被选取的帧之间的排列顺序,将所有未被选取的帧复制到所述Java栈中的包括所述Java栈底部在内的连续存储空间,将所述Java栈顶指针移动到与所述所有未被选取的帧中最接近Java栈顶部的帧被复制到的位置相邻且比所述被复制到的位置更接近所述Java栈顶部的位置,并继续运行所述Java程序;如果不存在未被选取的帧,则将所述Java栈顶指针移动到所述Java栈底部,并继续运行所述Java程序;③、当所述Java程序中的Java方法运行结束时,所述Java虚拟机将所述Java栈中与所述Java方法对应的巾贞从所述Java栈中弹出,判断所述Java栈是否满足第二预设条件,如果所述Java栈满足所述第二预设条件,则执行步骤④; 如果所述Java栈不满足所述第二预设条件,则继续运行所述Java程序;④、当所述Java栈中没有帧时,所述Java虚拟机将所述非易失性存储器中的一个或多个帧复制到所述Java栈中,将所述Java栈顶指针移动到与被复制到所述Java栈中的帧中最接近所述Java栈顶部的帧的位置相邻且比所述最接近所述Java栈顶部的帧的位置更接近所述Java栈顶部的位置,并继续运行所述Java程序;当所述Java栈中有巾贞时,所述Java虚拟机确定需要从所述非易失性存储器复制到所述Java栈中的巾贞的大小以及所述Java栈中对应的预留存储空间,将所述Java栈中的帧复制到所述Java栈中与所述预留存储空间相邻且比所述预留存储空间更接近所述Java栈顶部的连续存储空间,将确定的帧复制到所述预留存储空间,将所述Java栈顶指针移动到与所述连续存储空间顶部的帧的位置相邻且比所述顶部的帧的位置更接近所述Java栈顶部的位置,并继续运行所述Java程序。本专利技术实施例还提供了一种运行Java程序的装置,包括第一判断模块、第二判断模块、处理模块和运行模块,其中,所述第一判断模块,用于判断随机存储器RAM中的Java栈是否满足第一预设条件;所述第二判断模块,用于所述处理模块将所述Java栈中的帧从所述Java栈中弹出后,判断所述Java栈是否满足第二预设条件;所述处理模块,用于在所述Java栈满足所述第一预设条件时,将所述Java栈中的所有帧复制到非易失性存储器中,将Java栈顶指针移动到Java栈底部,并触发所述运行模块继续运行Java程序;或者,从位于所述Java栈底部的帧开始,选取一个帧或多个连续存储的帧,将选取的帧复制到所述非易失性存储器中,并判断所述Java栈中是否存在未被选取的帧,如果存在一个未被选取的帧,则将所述未被选取的帧复制到所述Java栈中的包括所述Java栈底部在内的连续存储空间,将所述Java栈顶指针移动到所述Java栈中与所述未被选取的帧被复制到的存储空间相邻且比所述存储空间更接近所述Java栈顶部的位置;如果存在多个未被选取的帧,则按照各个未被选取的帧之间的排列顺序,将所有未被选取的巾贞复制到所述Java栈中的包括所述Java栈底部在内的连续存储空间,将所述Java栈顶指针移动到与所述所有未被选取的帧中最接近Java栈顶部的帧被复制到的位置相邻且比所述被复制到的位置更接近所述Java栈顶部的位置,并继续运行所述Java程序;如果不存在未被选取的帧,则将所述Java栈顶指针移动到所述Java栈底部,并触发所述运行模块继续运行所述Java程序;在所述Java程序中的Java方法运行结束时,将所述Java栈中与所述Java方法对应的帧从所述Java栈中弹出;在所述Java栈满足所述第二预设条件,且所述Java栈中没有帧时,将所述非易失性存储器中的一个或多个帧复制到所述Java栈中,将所述Java栈顶指针移动到与被复制到所述Java栈中的帧中最接近所述Java栈顶部的帧的位置相邻且比所述最接近所述Java栈顶部的帧的位置更接近所述Java栈顶部的位置,并触发所述运行模块继续运行所述Java程序; 在所述Java栈满足所述第二预设条件本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种运行Java程序的方法,其特征在于,包括 ①、Java虚拟机判断随机存储器RAM中的Java栈是否满足第一预设条件,如果所述Java栈不满足所述第一预设条件,则继续运行Java程序;如果所述Java栈满足所述第一预设条件,则执行步骤②; ②、所述Java虚拟机将所述Java栈中的所有帧复制到非易失性存储器中,将Java栈顶指针移动到Java栈底部,并继续运行Java程序; 或者, 所述Java虚拟机从位于所述Java栈底部的巾贞开始,选取一个巾贞或多个连续存储的帧,将选取的帧复制到所述非易失性存储器中,并判断所述Java栈中是否存在未被选取的 帧,如果存在一个未被选取的帧,则将所述未被选取的帧复制到所述Java栈中的包括所述Java栈底部在内的存储空间,将所述Java栈顶指针移动到所述Java栈中与所述未被选取的帧被复制到的存储空间相邻且比所述存储空间更接近所述Java栈顶部的位置;如果存在多个未被选取的帧,则按照各个未被选取的帧之间的排列顺序,将所有未被选取的帧复制到所述Java栈中的包括所述Java栈底部在内的连续存储空间,将所述Java栈顶指针移动到与所述所有未被选取的帧中最接近Java栈顶部的帧被复制到的位置相邻且比所述被复制到的位置更接近所述Java栈顶部的位置,并继续运行所述Java程序;如果不存在未被选取的帧,则将所述Java栈顶指针移动到所述Java栈底部,并继续运行所述Java程序; ③、当所述Java程序中的Java方法运行结束时,所述Java虚拟机将所述Java栈中与所述Java方法对应的帧从所述Java栈中弹出,判断所述Java栈是否满足第二预设条件,如果所述Java栈满足所述第二预设条件,则执行步骤④;如果所述Java栈不满足所述第二预设条件,则继续运行所述Java程序; ④、当所述Java栈中没有帧时,所述Java虚拟机将所述非易失性存储器中的一个或多个帧复制到所述Java栈中,将所述Java栈顶指针移动到与被复制到所述Java栈中的帧中最接近所述Java栈顶部的帧的位置相邻且比所述最接近所述Java栈顶部的帧的位置更接近所述Java栈顶部的位置,并继续运行所述Java程序; 当所述Java栈中有帧时,所述Java虚拟机确定需要从所述非易失性存储器复制到所述Java栈中的帧的大小以及所述Java栈中对应的预留存储空间,将所述Java栈中的帧复制到所述Java栈中与所述预留存储空间相邻且比所述预留存储空间更接近所述Java栈顶部的连续存储空间,将确定的帧复制到所述预留存储空间,将所述Java栈顶指针移动到与所述连续存储空间顶部的帧的位置相邻且比所述顶部的帧的位置更接近所述Java栈顶部的位置,并继续运行所述Java程序。2.如权利要求I所述的方法,其特征在于,所述Java虚拟机判断RAM中的Java栈是否满足第一预设条件,具体为 当调用所述Java程序中的Java方法时,所述Java虚拟机判断所述Java栈中的可写入空间的大小是否小于与被调用的Java方法对应的帧的大小,如果小于,则满足所述第一预设条件;否则,则不满足所述第一预设条件; 或者, 当向所述Java栈压入一个帧后,所述Java虚拟机判断所述Java栈中的可写入空间的大小是否小于第一预设值,如果小于,则满足所述第一预设条件;否则,则不满足所述第一预设条件; 或者, 当向所述Java栈压入一个帧后,所述Java虚拟机判断所述Java栈中的帧的数量是否大于第二预设值,如果大于,则满足所述第一预设条件;否则,则不满足所述第一预设条件。3.如权利要求I所述的方法,其特征在于,所述Java虚拟机判断所述Java栈是否满足第二预设条件,具体为 所述Java虚拟机判断所述Java栈中的可写入空间的大小是否大于第三预设值,如果大于,则满足所述第二预设条件;否则,则不满足所述第二预设条件; 或者, 所述Java虚拟机判断所述Java栈中的帧的数量是否小于第四预设值,如果小于,则满足所述第二预设条件;否则,则不满足所述第二预设条件。4.如权利要求I所述的方法,其特征在于,所述Java虚拟机将所述非易失性存储器中的一个或多个巾贞复制到所述Java栈中,包括 所述Java虚拟机将所述非易失性存储器中的所有帧复制到所述Java栈中; 或者, 所述Java虚拟机根据所述非易失性存储器中的各个帧被复制到所述非易失性存储器之前在所述Java栈中的位置,从位置最接近栈顶的帧开始,选取一个帧或多个连续存储的帧,将选取的帧复制到所述Java栈中。5.如权利要求I所述的方法,其特征在于,所述Java虚拟机从位于所述Java栈底部的帧开始,选取一个帧或多个连续存储的帧,将选取的帧复制到所述非易失性存储器中,具体为 所述Java虚拟机从位于所述Java栈底部的巾贞开始,选取一个巾贞或多个连续存储的中贞,当选取的帧的数据总量最接近所述Java栈的空间大小的二分之一时,将选取的帧复制到非易失性存储器中; 所述Java虚拟机将所述非易失性存储器中的一个或多个帧复制到所述Java栈中,具体为 所述Java虚拟机根据所述非易失性存储器中的各个帧被复制到所述非易失性存储器之前在所述Java栈中的位置,从位置最接近栈顶的帧开始,选取一个帧或多个连续存储的帧,当选取的帧的数据总量...

【专利技术属性】
技术研发人员:陆舟于华章
申请(专利权)人:飞天诚信科技股份有限公司
类型:发明
国别省市:

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

1