一种Java卡垃圾回收方法

文档序号:6443117阅读:291来源:国知局
专利名称:一种Java卡垃圾回收方法
技术领域
本发明涉及信息安全领域,特别涉及一种Java卡垃圾回收方法。
背景技术
JAVA是纯粹面向对象的编程语言,其程序以类为单位,程序运行期间会在内存中创建很多类的对象。这些对象在完成任务之后,Java卡的垃圾回收机制会自动释放这些对象所占用的空间,使回收的内存能够被再次利用,以提高程序的运行效率。垃圾回收能自动释放内存空间,减轻编程负担,但垃圾回收的一个潜在缺点是它的开销会影响程序性能。当前的JCVM(Java卡虚拟机)规范没有对Java卡中如何实现垃圾回收做出明确的规定,目前的智能卡中多采用mark-delete算法进行垃圾回收,运用该算法进行垃圾回收时需要对整个内存区域中的对象进行检测,垃圾回收的效率并不高。

发明内容
鉴于现有技术的不足,为了避免每次进行垃圾回收时都对整个内存区域中的对象进行检测,本发明提出了一种Java卡垃圾回收方法。本发明采用的技术方案如下一种Java卡垃圾回收的方法,Java卡虚拟机接收到命令后,对所述命令进行解析,当所述命令为第一删除命令时执行步骤SI,当所述命令为第二删除命令时执行步骤 S9,当所述命令为其它命令时根据所述命令执行相应操作步骤SI :判断应用程序管理集中是否有与所述第一删除命令的数据域相对应的应用标识符,是则执行步骤S2,否则执行步骤S5 ;步骤S2 :判断所述应用标识符对应的应用程序是否满足删除条件,是则将垃圾回收标志位置为有效执行步骤S3,否则执行步骤S12 ;步骤S3 :查找所述应用程序的对象、子孙对象,以及查找所述应用程序的应用标识符的对象、子孙对象,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、 子孙对象在Java卡存储区域中占用的空间,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象的对象索弓I值在对象管理表中占用的空间;步骤S4 :若所述步骤S3中的操作成功完成,则将所述垃圾回收标志位置为无效, 执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤 S12 ;步骤S5 :判断包管理集中是否有与所述第一删除命令的数据域相对应的应用标识符,是则执行步骤S6,否则执行步骤S12 ;步骤S6 :判断所述应用标识符对应的包是否包含应用程序,是则执行步骤S12,否则将所述垃圾回收标志位置为有效,执行步骤S7 ;步骤S7 :查找所述包的对象、子孙对象,回收所述包的对象、子孙对象在所述Java 卡存储区域中占用的空间,回收所述包的对象、子孙对象的对象索引值在所述对象管理表中占用的空间;步骤S8 :若所述步骤S7中的操作成功完成,则将所述垃圾回收标志位置为无效, 执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤 S12 ;步骤S9 :判断所述包包含的应用程序是否满足删除条件,是则将垃圾回收标志位置为有效,执行步骤S10,否则执行步骤S12 ;步骤SlO :查找所述包包含的应用程序的对象、子孙对象,以及查找所述包的应用标识符的对象、子孙对象,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,查找所述包的对象、子孙对象,回收所述包的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述包的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,回收所述应用标识符在所述包管理集中占用的空间;步骤Sll :若所述步骤SlO中的操作成功完成,则将所述垃圾回收标志位置为无效,执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤S12 ;步骤S12 :判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述 Java卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。当所述Java卡虚拟机首次上电时,判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述Java卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。当垃圾回收开始接口被调用时,所述Java卡虚拟机将所述垃圾回收标志位置为有效。所述对所述命令进行解析具体包括判断所述命令的第一字节是否为80或84,当判断结果为是时检测所述命令的第二字节是否为E4 ;当判断结果为否时判定所述命令为其它命令;当所述命令的第二字节为E4时,检测所述命令第四字节;当所述命令的第二字节不为E4时,所述Java卡虚拟机继续等待接收命令;当所述第四字节为00时,判定所述命令为第一删除命令;当所述第四字节为80 时,判定所述命令为第二删除命令。所述垃圾回收操作具体包括①根据所述对象管理表中对象索引值的个数在RAM中开辟相应大小的位图区,并将所述位图区中所有位的值置为初始值;②根据所述对象索引值对所述Java卡存储区域中的对象进行遍历,并将位图区中与能够访问到的对象对应的位的值置为有效值;③回收与所述位图区中值为初始值的位相对应的对象在所述Java卡存储区域中占用的空间;④回收与所述位图区中值为初始值的位相对应的对象的对象索引值在所述对象管理表中占用的空间;⑤将所述垃圾回收标志位置为无效,释放所述位图区占用的存储空间,判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述Java卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。所述判断所述应用标识符对应的应用程序是否满足删除条件具体为判断所述应用程序是否同时满足①所述应用程序未生成其它包的静态变量;②所述应用程序未在具有两个及以上实例的同时又含有静态变量;③所述应用程序以外的应用程序的对象数组中不包含在所述应用程序中生成的对象;当所述应用程序同时满足上述三个条件时,所述应用程序满足删除条件;当所述应用程序不同时满足上述三个条件时,所述应用程序不满足删除条件,所述Java卡虚拟机判断所述垃圾回收标志是否有效。所述查找所述应用程序的对象、子孙对象的具体方法为①查找应用程序管理集,获取所述应用程序对象的ID ;②根据所述应用程序对象的ID查找所述应用程序对象的地址;③根据所述应用程序对象的地址中的数据查找所述应用程序的对象;④查找对象管理表,获取所述应用程序的对象的ID ;⑤根据所述应用程序的对象的ID查找所述应用程序的对象的地址;⑥根据所述应用程序的对象的地址中的数据查找所述应用程序的子孙对象。所述查找所述应用标识符的对象、子孙对象的具体方法为①查找所述应用标识符的地址;②根据所述应用标识符的地址中的数据查找所述应用标识符的对象;③查找对象管理表,获取所述应用标识符的对象的ID ;④根据所述应用标识符的对象的ID查找所述应用标识符的对象的地址;⑤根据所述应用标识符的对象的地址中的数据查找所述应用标识符包含的子孙对象。所述查找所述包的对象、子孙对象的具体方法为①查找包管理集,获取所述包对象的ID ;②根据所述包对象的ID查找所述包对象的地址;③根据所述包对象的地址中的数据查找所述包的对象;④查找对象管理表,获取所述包的对象的ID ;⑤根据所述包的对象的ID查找所述包的对象的地址;⑥根据所述包t的对象的地址中的数据查找所述包的子孙对象。当所述垃圾回收标志位的值为true时,所述垃圾回收标志位有效,当所述垃圾回收标志位的值为false时,所述垃圾回收标志位无效。本发明的有益效果在于本发明提供的一种Java卡垃圾回收方法可以避免在每次垃圾回收时都对整个内存区域中的对象进行检测,减少垃圾回收的开销、提高垃圾回收的效率,所述Java卡垃圾回收方法中还保留了掉电保护功能,防止在垃圾回收过程中Java卡虚拟机的异常掉电。


图I为本发明实施例二中提供的一种Java卡垃圾回收方法的方法流程图;图2为本发明实施例二中提供的一种Java卡垃圾回收方法中执行第一删除命令的方法流程图;图3为本发明实施例二中提供的一种Java卡垃圾回收方法中执行第二删除命令的方法流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图和具体实施例对本发明做进一步地详细说明。实施例一为了避免每次进行垃圾回收时都对整个内存区域中的对象进行检测,提高垃圾回收的效率和减少垃圾回收的开销,本实施例一提供了一种Java卡垃圾回收方法,所述Java 卡垃圾回收方法中保留了掉电保护功能,防止在垃圾回收过程中Java卡虚拟机的异常掉电。具体包括Java卡虚拟机接收到命令后,对所述命令进行解析,当所述命令为第一删除命令时执行步骤SI,当所述命令为第二删除命令时执行步骤S9,当所述命令为其它命令时根据所述命令执行相应操作步骤SI :判断applet (应用程序)管理集中是否有与所述第一删除命令的数据域相对应的AID (应用标识符),是则执行步骤S2,否则执行步骤S5 ;步骤S2 :判断所述AID对应的applet是否满足删除条件,是则将垃圾回收标志位置为有效执行步骤S3,否则执行步骤S12 ;步骤S3 :查找所述applet的对象、子孙对象,以及查找所述applet的AID的对象、 子孙对象,回收所述applet的对象、子孙对象以及所述AID的对象、子孙对象在Java卡存储区域中占用的空间,回收所述applet的对象、子孙对象以及所述AID的对象、子孙对象的对象索引值在对象管理表中占用的空间;步骤S4 :若所述步骤S3中的操作成功完成,则将所述垃圾回收标志位置为无效, 执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤 S12 ;步骤S5 :判断package (包)管理集中是否有与所述第一删除命令的数据域相对应的AID,是则执行步骤S6,否则执行步骤S12 ;步骤S6 :判断所述AID对应的package是否包含package,是则执行步骤S12,否则将所述垃圾回收标志位置为有效,执行步骤S7 ;步骤S7 :查找所述package的对象、子孙对象,回收所述package的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述package的对象、子孙对象的对象索引值在所述对象管理表中占用的空间;
步骤S8 :若所述步骤S7中的操作成功完成,则将所述垃圾回收标志位置为无效, 执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤 S12 ;步骤S9 :判断所述package包含的applet是否满足删除条件,是则将垃圾回收标志位置为有效,执行步骤S10,否则执行步骤S12 ;步骤SlO :查找所述package包含的applet的对象、子孙对象,以及查找所述 package的AID的对象、子孙对象,回收所述applet的对象、子孙对象以及所述AID的对象、 子孙对象在所述Java卡存储区域中占用的空间,回收所述applet的对象、子孙对象以及所述AID的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,查找所述package 的对象、子孙对象,回收所述package的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述package的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,回收所述AID在所述package管理集中占用的空间;步骤Sll :若所述步骤SlO中的操作成功完成,则将所述垃圾回收标志位置为无效,执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤S12 ;步骤S12 :判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述 Java卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。实施例二为了避免每次进行垃圾回收时都对整个内存区域中的对象进行检测,提高垃圾回收的效率和减少垃圾回收的开销,参见图1、2、3,本实施例二提供了一种Java卡垃圾回收方法。具体地,Java卡虚拟机上电后,执行以下步骤步骤101 :判断垃圾回收标志位是否有效,是则执行步骤109,开始垃圾回收,否则所述Java卡虚拟机等待接收命令,当接收到命令后执行步骤102 ;优选地,在本实施例中,当所述垃圾回收标志位的值为true时,所述垃圾回收标志位有效,当所述垃圾回收标志位的值为false时,所述垃圾回收标志位无效;其中,所述Java卡虚拟机接收到的命令为标准的APDU命令。步骤102 :判断接收到的命令的CLA(指令类别)是否为80或84,是则执行步骤 103,否则执行步骤105 ;步骤103 :判断所述命令的INS (指令码)是否为E4,是则执行步骤104,否则所述 Java卡虚拟机等待接收命令,当接收到命令后执行步骤102 ;步骤104 :检测所述命令的参数P2的值,当所述参数P2的值为00时,所述Java卡虚拟机接收到的为第一删除命令,执行步骤201,当所述参数P2的值为80时,所述Java卡虚拟机接收到的为第二删除命令,执行步骤301 ;步骤105 :根据所述命令开始执行相应操作;具体地,所述相应操作为虚拟机为所述Java卡虚拟机根据所述命令执行的一系列操作。步骤106 :判断是否调用了垃圾回收开始接口,是则执行步骤107,否则执行步骤
108;
步骤107 :将所述垃圾回收标志位置为有效;步骤108 :判断所述相应操作是否完成,是则返回执行步骤101,否则返回执行步骤 105 ;步骤109 :根据对象管理表中对象索引值的个数计算位图区的大小,并在RAM中开辟相应大小的位图区;其中,所述位图区用于存储对象标识,每一对象标识对应所述对象管理表中的一个对象索引值,进而对应Java卡存储区域中的一个对象,优选地,在本实施例中,所述对象标识为一个比特位,例如当所述对象管理表中对象索引值的个数为80时,则所述位图区的大小为80比特,具体地,所述对象管理表存储于Java卡的EEPROM中。步骤110 :将所述位图区中所有对象标识的值置为初始值;优选地,在本实施例中所述初始值为O。步骤111 :根据所述对象管理表中的对象索引值对Java卡存储区域中的对象进行遍历,并将位图区中能够访问到的对象对应的对象标识的值置为有效值;优选地,在本实施例中所述有效值为I。步骤112 :回收与所述位图区中值仍为初始值的对象标识相对应的对象在Java卡存储区域中占用的空间;步骤113 :回收所述对象的对象索引值在所述对象管理表中占用的空间;步骤114 :将所述垃圾回收标志位置为无效,释放位图区占用的存储空间;在执行完步骤114后Java卡虚拟机等待接收命令,并根据接收到的命令进行相应处理。参见图2,当所述参数P2的值为00时,所述Java卡虚拟机接收到的为第一删除命令,执行步骤201 ;步骤201 :判断applet管理集中是否有与所述命令相对应的AID,是则执行步骤 202,否则执行步骤208 ;其中,所述applet管理集存储于Java卡的EEPROM中,用于存储Java卡中applet 的应用标识符AID ;所述命令的Data部分包含所要删除的applet或package的AID。步骤202 :判断与所述AID相对应的applet是否满足删除条件,是则执行步骤 203,否则返回执行步骤101 ;具体地,在本实施例中,所述判断与所述AID相对应的applet是否满足删除条件具体为判断所述applet是否生成了其它package的静态变量;判断所述applet是否在具有两个及以上实例的同时又含有静态变量;判断所述applet以外的applet的对象数组中是否有包含了在所述applet中生成的对象;当上述三个判断的判断结果中至少有一个为是时,则所述applet不满足删除条件,其中所述三个判断可同时进行,或分别进行(无顺序限制),可当三个判断均完成时判断所述applet是否满足删除条件,或当得到一个判断的判断结果为是时则判定所述applet不满足删除条件。其中①判断所述applet是否生成了其它package的静态变量的具体方法为根据 package管理集,得到除所述applet所在package外的package的地址,从所述的地址中得到静态变量的个数及偏移地址,查找静态变量并根据静态变量的防火墙值判断是否在所述 applet中生成;②所述判断所述applet是否在具有两个及以上实例的同时又含有静态变量的具体方法为判断所述applet属于哪个类,查找applet管理集,判断除所述applet外是否还有与所述applet属于同一类的applet,有则所述applet具有至少两个实例;查找applet管理集,根据所述applet的ID得到所述applet的地址,从所述地址存储的数据中获取所述applet包含的静态变量的个数,当所述个数不为O时,即所述 applet包含静态变量;③判断所述applet以外的applet的对象数组中是否有包含了在所述applet中生成的对象的具体方法为根据所述applet以外的applet的对象数组中对象的防火墙值判断是否有在所述 applet中生成的对象。步骤203 :将所述垃圾回收标志位置为有效;步骤204 :查找所述applet的对象、子孙对象以及所述AID的对象、子孙对象;具体地,在本实施例中,所述查找所述applet的对象、子孙对象具体包括①查找applet管理集,获取所述applet对象的ID;②根据所述applet对象的ID查找所述applet对象的地址;③根据所述applet对象的地址中的数据查找所述applet的对象;具体地,所述applet对象的地址中的数据包含所述applet自身的对象的开始地址、所述applet自身的对象的个数、所述applet的父类的地址,其中,所述applet的对象包括所述applet自身的对象和其父类的对象,所述其父类的对象又包括其父类自身的对象和其父类的父类的对象,依此类推直至某个父类没有父类为止,所述applet的各对象的地址是连续的。④查找对象管理表,获取所述applet的对象的ID ;⑤根据所述applet的对象的ID查找所述applet的对象的地址;⑥根据所述applet的对象的地址中的数据查找所述applet的子孙对象。具体地,所述applet的对象的地址中的数据包含所述applet包含的子孙对象的开始地址以及所述applet包含的子孙对象的个数,其中,所述applet包含的各子孙对象的地址是连续的。所述查找所述AID的对象、子孙对象具体包括①查找所述AID的地址;②根据所述AID的地址中的数据查找所述AID的对象;具体地,所述AID的地址中的数据包含所述AID自身的对象的开始地址、所述 AID自身的对象的个数、所述AID父类的地址,其中,所述AID的对象包括所述AID自身的对象和其父类的对象,所述其父类的对象又包括其父类自身的对象和其父类的父类的对象, 依此类推直至某个父类没有父类为止,所述AID的各对象的地址是连续的;③查找对象管理表,获取所述AID的对象的ID ;④根据所述AID的对象的ID查找所述AID的对象的地址;⑤根据所述AID的对象的地址中的数据查找所述AID包含的子孙对象。具体地,所述AID的对象的地址中的数据包含所述AID包含的子孙对象的开始地址以及所述AID包含的子孙对象的个数,其中,所述AID包含的各子孙对象的地址是连续的。步骤205 :回收所述applet的对象、子孙对象,以及所述AID的对象、子孙对象在 Java卡存储区域中占用的空间;步骤206 :回收所述applet的对象、子孙对象,以及所述AID的对象、子孙对象的对象索引值在对象管理表中占用的空间;步骤207 :将垃圾回收标志位置为无效,返回执行步骤101 ;步骤208 :判断package管理集中是否有与所述命令相对应的AID,是则执行步骤 209,否则返回执行步骤101 ; 其中,所述package管理集存储于Java卡的EEPROM中,用于存储Java卡中 package的应用标识符AID。步骤209 :判断与所述AID相对应的package中是否包含applet,是则执行步骤 101,否则执行步骤210 ;具体地,所述判断与所述AID对应的package中是否包含applet的具体方法为 判断所述applet管理集中是否还有与所述package所包含的applet相对应的AID。步骤210 :将垃圾回收标志位置为有效;步骤211 :查找所述package的对象、子孙对象;具体地,在本实施例中,所述查找所述package的对象、子孙对象具体包括①查找package管理集,获取所述package对象的ID ;②根据所述package对象的ID查找所述package对象的地址;③根据所述package对象的地址中的数据查找所述package的对象;具体地,所述package对象的地址中的数据包含所述package自身的对象的开始地址、所述package自身的对象的个数、所述package的父类的地址,其中,所述package的对象包括所述package自身的对象和其父类的对象,所述其父类的对象又包括其父类自身的对象和其父类的父类的对象,依此类推直至某个父类没有父类为止,所述package的各对象的地址是连续的。④查找对象管理表,获取所述packaget的对象的ID ;⑤根据所述package的对象的ID查找所述package的对象的地址;⑥根据所述packaget的对象的地址中的数据查找所述package的子孙对象。具体地,所述package的对象的地址中的数据包含所述package的子孙对象的开始地址以及所述package的子孙对象的个数,其中,所述package的各子孙对象的地址是连续的。步骤212 :回收所述package的对象、子孙对象在Java卡存储区域中占用的空间;
步骤213 :回收所述package的对象、子孙对象的对象索引值在所述对象管理表中占用的空间;步骤214 :将垃圾回收标志位置为无效,返回执行步骤101 ;参见图3,当所述参数P2的值为80时,所述Java卡虚拟机接收到的为第二删除命令,执行步骤301 ;步骤301 :判断package管理集中是否有与所述命令相对应的AID,是则执行步骤 302,否则返回执行步骤101 ;步骤302 :在applet管理集中查找与所述AID相对应的package所包含的applet 的 AID ;具体地,在本实施例中,与所述AID相对应的package所包含的applet可以为多个。步骤303 :判断所述applet是否满足删除条件,是则执行步骤304,否则返回执行步骤101 ;具体地,判断所述applet是否满足删除条件的方法与步骤202中的判断方法相同,在此不再赘述。步骤304 :将垃圾回收标志位置为有效;步骤305 :查找所述applet的对象、子孙对象以及所述AID的对象、子孙对象;具体地,在本实施例中,所述查找所述applet的对象、子孙对象的方法与步骤204 中查找applet的对象、子孙对象的方法相同;所述查找所述AID的对象、子孙对象与步骤 204中查找AID的对象、子孙对象的方法相同,在此不再赘述。步骤306 :回收所述applet的对象、子孙对象以及所述AID的对象、子孙对象在所述Java卡存储区域中占用的空间;步骤307 :回收所述applet的对象、子孙对象以及所述AID的对象、子孙对象的对象索引值在所述对象管理表中占用的空间;步骤308 :查找所述package的对象、子孙对象;具体地,在本实施例中,所述查找所述package的对象、子孙对象的方法与步骤 211中查找package的对象、子孙对象的方法相同,在此不再赘述。步骤309 :回收所述package的对象、子孙对象在所述Java卡存储区域中占用的空间;步骤310 :回收所述package的对象、子孙对象的对象索引值在所述对象管理表中占用的空间;步骤311 :回收所述AID在package管理集中所占用的空间;步骤312 :将垃圾回收标志位置为无效,返回执行步骤101。以上所述的实施例只是本发明较优选的具体实施方式
,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
权利要求
1.一种Java卡垃圾回收的方法,其特征在于Java卡虚拟机接收到命令后,对所述命令进行解析,当所述命令为第一删除命令时执行步骤SI,当所述命令为第二删除命令时执行步骤S9,当所述命令为其它命令时根据所述命令执行相应操作步骤SI :判断应用程序管理集中是否有与所述第一删除命令的数据域相对应的应用标识符,是则执行步骤S2,否则执行步骤S5 ;步骤S2 :判断所述应用标识符对应的应用程序是否满足删除条件,是则将垃圾回收标志位置为有效执行步骤S3,否则执行步骤S12 ;步骤S3 :查找所述应用程序的对象、子孙对象,以及查找所述应用程序的应用标识符的对象、子孙对象,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象在Java卡存储区域中占用的空间,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象的对象索引值在对象管理表中占用的空间;步骤S4:若所述步骤S3中的操作成功完成,则将所述垃圾回收标志位置为无效,执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤 S12 ;步骤S5 :判断包管理集中是否有与所述第一删除命令的数据域相对应的应用标识符, 是则执行步骤S6,否则执行步骤S12 ;步骤S6 :判断所述应用标识符对应的包是否包含应用程序,是则执行步骤S12,否则将所述垃圾回收标志位置为有效,执行步骤S7 ;步骤S7 :查找所述包的对象、子孙对象,回收所述包的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述包的对象、子孙对象的对象索引值在所述对象管理表中占用的空间;步骤S8:若所述步骤S7中的操作成功完成,则将所述垃圾回收标志位置为无效,执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤 S12 ;步骤S9 :判断所述包包含的应用程序是否满足删除条件,是则将垃圾回收标志位置为有效,执行步骤S10,否则执行步骤S12 ;步骤SlO :查找所述包包含的应用程序的对象、子孙对象,以及查找所述包的应用标识符的对象、子孙对象,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,回收所述包的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述包的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,回收所述应用标识符在所述包管理集中占用的空间;步骤Sll :若所述步骤SlO中的操作成功完成,则将所述垃圾回收标志位置为无效,执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤 S12 ;步骤S12 :判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述Java 卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。
2.如权利要求I所述的方法,其特征在于,还包括当所述Java卡虚拟机首次上电时,判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述Java卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。
3.如权利要求2所述的方法,其特征在于,还包括当垃圾回收开始接口被调用时,所述Java卡虚拟机将所述垃圾回收标志位置为有效。
4.如权利要求3所述的方法,其特征在于,所述对所述命令进行解析具体包括判断所述命令的第一字节是否为80或84,当判断结果为是时检测所述命令的第二字节是否为E4 ;当判断结果为否时判定所述命令为其它命令;当所述命令的第二字节为E4时,检测所述命令第四字节;当所述命令的第二字节不为 E4时,所述Java卡虚拟机继续等待接收命令;当所述第四字节为00时,判定所述命令为第一删除命令;当所述第四字节为80时,判定所述命令为第二删除命令。
5.如权利要求4所述的方法,其特征在于,所述垃圾回收操作具体包括①根据所述对象管理表中对象索引值的个数在RAM中开辟相应大小的位图区,并将所述位图区中所有位的值置为初始值;②根据所述对象索引值对所述Java卡存储区域中的对象进行遍历,并将位图区中与能够访问到的对象对应的位的值置为有效值;③回收与所述位图区中值为初始值的位相对应的对象在所述Java卡存储区域中占用的空间;④回收与所述位图区中值为初始值的位相对应的对象的对象索引值在所述对象管理表中占用的空间;⑤将所述垃圾回收标志位置为无效,释放所述位图区占用的存储空间,判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述Java卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。
6.如权利要求I所述的方法,其特征在于,所述判断所述应用标识符对应的应用程序是否满足删除条件具体为判断所述应用程序是否同时满足①所述应用程序未生成其它包的静态变量;②所述应用程序未在具有两个及以上实例的同时又含有静态变量;③所述应用程序以外的应用程序的对象数组中不包含在所述应用程序中生成的对象;当所述应用程序同时满足上述三个条件时,所述应用程序满足删除条件;当所述应用程序不同时满足上述三个条件时,所述应用程序不满足删除条件,所述Java卡虚拟机判断所述垃圾回收标志是否有效。
7.如权利要求I所述的方法,其特征在于,所述查找所述应用程序的对象、子孙对象的具体方法为①查找应用程序管理集,获取所述应用程序对象的ID;②根据所述应用程序对象的ID查找所述应用程序对象的地址;③根据所述应用程序对象的地址中的数据查找所述应用程序的对象;④查找对象管理表,获取所述应用程序的对象的ID;⑤根据所述应用程序的对象的ID查找所述应用程序的对象的地址;⑥根据所述应用程序的对象的地址中的数据查找所述应用程序的子孙对象。
8.如权利要求I所述的方法,其特征在于,所述查找所述应用标识符的对象、子孙对象的具体方法为①查找所述应用标识符的地址;②根据所述应用标识符的地址中的数据查找所述应用标识符的对象;③查找对象管理表,获取所述应用标识符的对象的ID;④根据所述应用标识符的对象的ID查找所述应用标识符的对象的地址;⑤根据所述应用标识符的对象的地址中的数据查找所述应用标识符包含的子孙对象。
9.如权利要求I所述的方法,其特征在于,所述查找所述包的对象、子孙对象的具体方法为①查找包管理集,获取所述包对象的ID;②根据所述包对象的ID查找所述包对象的地址;③根据所述包对象的地址中的数据查找所述包的对象;④查找对象管理表,获取所述包的对象的ID;⑤根据所述包的对象的ID查找所述包的对象的地址;⑥根据所述包的对象的地址中的数据查找所述包的子孙对象。
10.如权利要求1-9中任意一项权利要求所述的方法,其特征在于,当所述垃圾回收标志位的值为true时,所述垃圾回收标志位有效,当所述垃圾回收标志位的值为false时,所述垃圾回收标志位无效。
全文摘要
本发明公开了一种Java卡垃圾回收的方法,属于信息安全领域。所述方法包括Java卡虚拟机上电后判断垃圾回收标志是否有效,是则执行垃圾回收操作,否则等待接收命令,当接收到命令后对命令进行解析,若所述命令为第一删除命令且应用程序管理集中有与所述命令数据域对应的应用标识符,则执行删除应用程序操作,若所述命令为第一删除命令且包管理集中有与所述命令数据域对应的应用标识符,则执行删除包操作;若所述命令为第二删除命令,则执行删除包及其包含的应用程序操作,若所述命令为其它命令则根据所述命令执行相应操作。该方法具有减少垃圾回收的开销、提高垃圾回收的效率,防止在垃圾回收过程中Java卡虚拟机的异常掉电的优点。
文档编号G06F12/02GK102591788SQ201110439970
公开日2012年7月18日 申请日期2011年12月23日 优先权日2011年12月23日
发明者于华章, 陆舟 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1