一种Java卡中垃圾回收的方法及装置的制作方法

文档序号:6430273阅读:225来源:国知局
专利名称:一种Java卡中垃圾回收的方法及装置的制作方法
技术领域
本发明涉及智能卡技术领域,尤其涉及一种Java卡中垃圾回收的方法及装置。
背景技术
Java卡是可以运行Java程序代码的智能卡,在Java卡中实现了应用程序 (Applet)运行所需的运行环境,负责解释Java语音的虚拟机,以及标准的系统应用程序编程接口(Application Programming Interface, API),为 Applet 在 Java 卡上的运行提供了保证,其中,Applet是运行在智能卡上的特定应用程序。Java语言的一大优势是,在Java运行环境中可以自主确定垃圾对象(不再使用的对象)并将其回收。具体的,Java堆是Java的数据区,而Java类的实例对象是从Java堆中分配空间,在个人电脑(PC)上,Java堆是保存在RAM上,而在Java卡中,Java堆是保存在非易失性存储器(如EEPR0M)上。所谓垃圾回收的主要功能就是发现那些不再被引用的对象(即垃圾对象),并释放这些垃圾对象占用的空间,而垃圾回收机制就是用时间换取空间,即通过增加系统运行时间,来释放堆空间。传统的Java卡垃圾回收机制是被动式回收,主要体现在以下两个方面1、利用用户编写的Applet调用Java卡类库的垃圾回收API,在用户认为合适的时机,通过垃圾回收 API调用虚拟机(VM)执行垃圾回收操作;2、在某个Applet被删除时,由虚拟机执行垃圾回收操作。被动式垃圾回收对时间要求较高,一般需要遍历整个对象表,确定垃圾对象并进行标记,再将带有标记的垃圾对象回收,这就造成进行垃圾对象回收的效率较低,并且,由于 Java堆是在非易失性存储器上,如果清除和移动的垃圾对象较多,则垃圾回收需要的时间就会非常长。然而,有效的时间管理和高效的运行速度是决定智能卡性能的重要因素,因此提高垃圾回收的效率,成为Java卡中垃圾回收的重要课题。

发明内容
本发明提供一种Java卡中垃圾回收的方法及装置,用以Java卡主动进行垃圾回收,并且采用分阶段垃圾回收的方式,使得垃圾回收操作分布在多个小的时间片内,避免了现有技术中一次性回收Java卡中的所有垃圾而占用过多时间的问题,提高了 Java卡中垃圾回收的效率。本发明实施例提供的具体技术方案包括一种Java卡中垃圾回收的方法,包括在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作;若根据所述赋值操作确定创建的对象未被静态对象所引用,则将该未被静态对象所引用的对象确定为垃圾对象;在函数执行结束时,对Java卡中的垃圾对象进行回收。一种Java卡中垃圾回收的装置,包括第一处理单元,用于在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作;第二处理单元,用于根据所述赋值操作确定创建的对象未被静态对象所引用时, 将该未被静态对象所引用的对象确定为垃圾对象;第三处理单元,用于在函数执行结束时,对Java卡中的垃圾对象进行回收。基于上述技术方案,本发明实施例中,通过在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作,在根据赋值操作确定确定创建的对象未被静态对象所引用, 则将该未被静态对象所引用的对象确定为垃圾对象,在函数执行结束时,对Java卡中的垃圾对象进行回收,从而可以在Java卡中的函数执行过程中确定垃圾对象,在函数执行结束时,对垃圾对象并回收,以函数为基本单位,采用局部分阶段的方式进行垃圾回收,将垃圾回收操作占用的时间均勻分布在整个Java卡的执行期间,避免了现有技术中一次性集中回收Java卡中的所有垃圾而占用过多时间的问题,将非常耗时的垃圾回收分布在很短的时间片内,从而提高了 Java卡垃圾回收的效率,提高了 Java卡的时效性,完善了 Java卡的功能,也无需遍历整个对象表,节约了时间。并且,采用Java卡主动回收的方式,避免了现有技术中Java卡被动回收时,对Java卡的正常使用带来的影响,提高Java卡的性能。


图1为本发明实施例中Java卡中垃圾回收的装置结构图;图2为本发明实施例中Java卡中垃圾回收的方法流程图。
具体实施例方式为了提高Java卡中垃圾回收的效率,实现Java卡主动地、分阶段地进行垃圾回收的目的,本发明实施例提供了一种Java卡中垃圾回收的方法及装置,该方法为在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作,若根据赋值操作确定创建的对象未被静态对象所引用,则将该未被静态对象所引用的对象确定为垃圾对象,在函数执行结束时,对Java卡中的垃圾对象进行回收。下面结合附图对本发明优选的实施方式进行详细说明。如附图1所示,本发明实施例中,Java卡中垃圾回收的装置主要包括以下处理单元第一处理单元101,用于在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作;第二处理单元102,用于根据赋值操作确定创建的对象未被静态对象所引用时,将该未被静态对象所引用的对象确定为垃圾对象;第三处理单元103,用于在函数执行结束时,对Java卡中的垃圾对象进行回收。基于上述系统架构,本发明实施例中,如附图2所示,在Java卡中进行垃圾回收的详细方法流程如下步骤201 在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作。较佳地,在监控到创建对象操作时,针对创建的对象设置引用次数,并将引用次数设定为初始值;在监控到对静态对象的赋值操作时,统计静态对象所引用的对象的引用次数。
例如,在监控到创建对象操作时,将该对象对应的引用次数初始化为零值。步骤202 若根据赋值操作确定创建的对象未被静态对象所引用,则将该未被静态对象所引用的对象确定为垃圾对象。本实施例中,通过统计赋值操作中静态对象所引用的对象的引用次数,确定所引用的对象是否被静态对象所引用,以进一步确定所引用的对象是否为垃圾对象。较佳地,在统计静态对象所引用的对象的引用次数时,若监控到赋值操作,则将该赋值操作中被引用的对象的引用次数增加设定数值;若监控到重复赋值操作,则将该重复赋值操作中被引用的对象的引用次数增加设定数值,同时将针对同一静态对象前一次赋值操作中所引用的对象的引用次数减少设定数值。例如,若监控到赋值操作,则将该赋值操作中被引用的对象的引用次数加1 ;若监控到重复赋值操作,则将该重复赋值操作中被引用的对象的引用次数加1,同时将前一次赋值操作中被引用的对象的引用次数减1。又例如,a引用对象C,则对象c的引用次数为1 ;b引用对象d,则对象d的引用次数为1 ;若a又引用对象b,则a为重复赋值,则b对象的引用次数为1,同时将a上一次赋值操作时引用的对象c的引用次数减1,即c的引用次数变为0。在Java卡中,对源代码进行编译后形成的字节码(bytecode)中,涉及到静态对象的赋值操作的指令包括对象赋值指令(putStatiC_a指令)和成员变量赋值指令(putfield 指令)。putstaticj指令是给静态对象赋值,putfield指令是给静态对象的一个成员变量赋值。其中,在监控到putfield指令时,根据被赋值的成员变量找到所述的类对象,进而判断该类对象是否为静态对象,若是则统计该对象的引用次数。例如,有如下一段源代码
权利要求
1.一种Java卡中垃圾回收的方法,其特征在于,包括在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作;若根据所述赋值操作确定创建的对象未被静态对象所引用,则将该未被静态对象所引用的对象确定为垃圾对象;在函数执行结束时,对Java卡中的垃圾对象进行回收。
2.如权利要求1所述的方法,其特征在于,在监控到创建对象操作时,针对创建的对象设置引用次数,并将引用次数设定为初始值;在监控到对静态对象的赋值操作时,统计所述静态对象所引用的对象的引用次数。
3.如权利要求2所述的方法,其特征在于,统计所述静态对象所引用的对象的引用次数,包括若监控到赋值操作,则将该赋值操作中被引用的对象的引用次数增加设定数值;若监控到重复赋值操作,则将该重复赋值操作中被引用的对象的引用次数增加设定数值,同时将针对同一静态对象前一次赋值操作中所引用的对象的引用次数减少设定数值。
4.如权利要求3所述的方法,其特征在于,将未被静态对象所引用的对象确定为垃圾对象,包括统计所述静态对象所引用的对象的引用次数,将所述引用次数为初始值的对象确定为垃圾对象。
5.如权利要求1-4任一项所述的方法,其特征在于,对Java卡中的垃圾对象进行回收, 包括判断确定的垃圾对象的个数是否达到设定阈值,若是,则对Java卡中确定的垃圾对象进行回收,否则,继续执行下一个函数,直至累计的确定的垃圾对象的个数达到设定阈值时,对Java卡中确定的垃圾对象进行回收。
6.一种Java卡中垃圾回收的装置,其特征在于,包括第一处理单元,用于在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作;第二处理单元,用于根据所述赋值操作确定创建的对象未被静态对象所引用时,将该未被静态对象所引用的对象确定为垃圾对象;第三处理单元,用于在函数执行结束时,对Java卡中的垃圾对象进行回收。
7.如权利要求6所述的装置,其特征在于,所述第一处理单元还用于,在监控到创建对象操作时,针对创建的对象设置引用次数,并将引用次数设定为初始值;所述第二处理单元还用于,在所述第一处理单元监控到对静态对象的赋值操作时,统计所述静态对象所引用的对象的引用次数。
8.如权利要求7所述的装置,其特征在于,所述第二处理单元用于统计所述静态对象所引用的对象的引用次数,具体为若所述第一处理单元监控到赋值操作,则将该赋值操作中被引用的对象的引用次数增加设定数值;若所述第一处理单元监控到重复赋值操作,则将该重复赋值操作中被引用的对象的引用次数增加设定数值,同时将针对同一静态对象前一次赋值操作中所引用的对象的引用次数减少设定数值。
9.如权利要求8所述的装置,其特征在于,所述第二处理单元用于将未被静态对象所引用的对象确定为垃圾对象,具体为统计所述静态对象所引用的对象的引用次数,将所述引用次数为初始值的对象确定为垃圾对象。
10.如权利要求6-9任一项所述的装置,其特征在于,所述第三处理单元用于对Java卡中的垃圾对象进行回收,具体为判断所述第二处理单元确定的垃圾对象的个数是否达到设定阈值,若是,则对Java卡中确定的垃圾对象进行回收,否则,继续执行下一个函数,直至累计的所述第二处理单元确定的垃圾对象的个数达到设定阈值时,对Java卡中确定的垃圾对象进行回收。
全文摘要
本发明公开了一种Java卡中垃圾回收的方法及装置,用以Java卡主动进行垃圾回收,并且采用局部分阶段垃圾回收的方式,使得垃圾回收操作分布在多个小的时间片内,避免了现有技术中一次性回收Java卡中的所有垃圾而占用过多时间的问题,提高了Java卡中垃圾回收的效率。该方法为在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作,若根据所述赋值操作确定创建的对象未被静态对象所引用,则将该未被静态对象所引用的对象确定为垃圾对象,在函数执行结束时,对Java卡中的垃圾对象进行回收,本发明同时公开了一种Java卡中垃圾回收的装置。
文档编号G06F9/44GK102270134SQ20111022697
公开日2011年12月7日 申请日期2011年8月9日 优先权日2011年8月9日
发明者宋浩 申请人:北京握奇数据系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1