CN102591788A - 一种Java卡垃圾回收方法 - Google Patents
一种Java卡垃圾回收方法 Download PDFInfo
- Publication number
- CN102591788A CN102591788A CN2011104399708A CN201110439970A CN102591788A CN 102591788 A CN102591788 A CN 102591788A CN 2011104399708 A CN2011104399708 A CN 2011104399708A CN 201110439970 A CN201110439970 A CN 201110439970A CN 102591788 A CN102591788 A CN 102591788A
- Authority
- CN
- China
- Prior art keywords
- descendants
- application program
- execution
- garbage reclamation
- java card
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 238000012217 deletion Methods 0.000 claims abstract description 22
- 230000037430 deletion Effects 0.000 claims abstract description 22
- 239000012141 concentrate Substances 0.000 claims description 15
- 230000003068 static effect Effects 0.000 claims description 13
- 238000011084 recovery Methods 0.000 abstract description 6
- 230000002159 abnormal effect Effects 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 3
- 241000030538 Thecla Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种Java卡垃圾回收的方法,属于信息安全领域。所述方法包括:Java卡虚拟机上电后判断垃圾回收标志是否有效,是则执行垃圾回收操作,否则等待接收命令,当接收到命令后对命令进行解析,若所述命令为第一删除命令且应用程序管理集中有与所述命令数据域对应的应用标识符,则执行删除应用程序操作,若所述命令为第一删除命令且包管理集中有与所述命令数据域对应的应用标识符,则执行删除包操作;若所述命令为第二删除命令,则执行删除包及其包含的应用程序操作,若所述命令为其它命令则根据所述命令执行相应操作。该方法具有减少垃圾回收的开销、提高垃圾回收的效率,防止在垃圾回收过程中Java卡虚拟机的异常掉电的优点。
Description
技术领域
本发明涉及信息安全领域,特别涉及一种Java卡垃圾回收方法。
背景技术
JAVA是纯粹面向对象的编程语言,其程序以类为单位,程序运行期间会在内存中创建很多类的对象。这些对象在完成任务之后,Java卡的垃圾回收机制会自动释放这些对象所占用的空间,使回收的内存能够被再次利用,以提高程序的运行效率。垃圾回收能自动释放内存空间,减轻编程负担,但垃圾回收的一个潜在缺点是它的开销会影响程序性能。当前的JCVM(Java卡虚拟机)规范没有对Java卡中如何实现垃圾回收做出明确的规定,目前的智能卡中多采用mark-delete算法进行垃圾回收,运用该算法进行垃圾回收时需要对整个内存区域中的对象进行检测,垃圾回收的效率并不高。
发明内容
鉴于现有技术的不足,为了避免每次进行垃圾回收时都对整个内存区域中的对象进行检测,本发明提出了一种Java卡垃圾回收方法。
本发明采用的技术方案如下:
一种Java卡垃圾回收的方法,Java卡虚拟机接收到命令后,对所述命令进行解析,当所述命令为第一删除命令时执行步骤S1,当所述命令为第二删除命令时执行步骤S9,当所述命令为其它命令时根据所述命令执行相应操作:
步骤S1:判断应用程序管理集中是否有与所述第一删除命令的数据域相对应的应用标识符,是则执行步骤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;
步骤S10:查找所述包包含的应用程序的对象、子孙对象,以及查找所述包的应用标识符的对象、子孙对象,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,查找所述包的对象、子孙对象,回收所述包的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述包的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,回收所述应用标识符在所述包管理集中占用的空间;
步骤S11:若所述步骤S10中的操作成功完成,则将所述垃圾回收标志位置为无效,执行步骤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卡虚拟机的异常掉电。
附图说明
图1为本发明实施例二中提供的一种Java卡垃圾回收方法的方法流程图;
图2为本发明实施例二中提供的一种Java卡垃圾回收方法中执行第一删除命令的方法流程图;
图3为本发明实施例二中提供的一种Java卡垃圾回收方法中执行第二删除命令的方法流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图和具体实施例对本发明做进一步地详细说明。
实施例一
为了避免每次进行垃圾回收时都对整个内存区域中的对象进行检测,提高垃圾回收的效率和减少垃圾回收的开销,本实施例一提供了一种Java卡垃圾回收方法,所述Java卡垃圾回收方法中保留了掉电保护功能,防止在垃圾回收过程中Java卡虚拟机的异常掉电。
具体包括:
Java卡虚拟机接收到命令后,对所述命令进行解析,当所述命令为第一删除命令时执行步骤S1,当所述命令为第二删除命令时执行步骤S9,当所述命令为其它命令时根据所述命令执行相应操作:
步骤S1:判断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;
步骤S10:查找所述package包含的applet的对象、子孙对象,以及查找所述package的AID的对象、子孙对象,回收所述applet的对象、子孙对象以及所述AID的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述applet的对象、子孙对象以及所述AID的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,查找所述package的对象、子孙对象,回收所述package的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述package的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,回收所述AID在所述package管理集中占用的空间;
步骤S11:若所述步骤S10中的操作成功完成,则将所述垃圾回收标志位置为无效,执行步骤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:将所述位图区中所有对象标识的值置为初始值;
优选地,在本实施例中所述初始值为0。
步骤111:根据所述对象管理表中的对象索引值对Java卡存储区域中的对象进行遍历,并将位图区中能够访问到的对象对应的对象标识的值置为有效值;
优选地,在本实施例中所述有效值为1。
步骤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包含的静态变量的个数,当所述个数不为0时,即所述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。
以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
Claims (10)
1.一种Java卡垃圾回收的方法,其特征在于:Java卡虚拟机接收到命令后,对所述命令进行解析,当所述命令为第一删除命令时执行步骤S1,当所述命令为第二删除命令时执行步骤S9,当所述命令为其它命令时根据所述命令执行相应操作:
步骤S1:判断应用程序管理集中是否有与所述第一删除命令的数据域相对应的应用标识符,是则执行步骤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;
步骤S10:查找所述包包含的应用程序的对象、子孙对象,以及查找所述包的应用标识符的对象、子孙对象,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述应用程序的对象、子孙对象以及所述应用标识符的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,回收所述包的对象、子孙对象在所述Java卡存储区域中占用的空间,回收所述包的对象、子孙对象的对象索引值在所述对象管理表中占用的空间,回收所述应用标识符在所述包管理集中占用的空间;
步骤S11:若所述步骤S10中的操作成功完成,则将所述垃圾回收标志位置为无效,执行步骤S12,若在所述Java卡虚拟机在执行上述操作过程中掉电,则重新上电后执行步骤S12;
步骤S12:判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述Java卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。
2.如权利要求1所述的方法,其特征在于,还包括:
当所述Java卡虚拟机首次上电时,判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述Java卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。
3.如权利要求2所述的方法,其特征在于,还包括:
当垃圾回收开始接口被调用时,所述Java卡虚拟机将所述垃圾回收标志位置为有效。
4.如权利要求3所述的方法,其特征在于,所述对所述命令进行解析具体包括:
判断所述命令的第一字节是否为80或84,当判断结果为是时检测所述命令的第二字节是否为E4;当判断结果为否时判定所述命令为其它命令;
当所述命令的第二字节为E4时,检测所述命令第四字节;当所述命令的第二字节不为E4时,所述Java卡虚拟机继续等待接收命令;
当所述第四字节为00时,判定所述命令为第一删除命令;当所述第四字节为80时,判定所述命令为第二删除命令。
5.如权利要求4所述的方法,其特征在于,所述垃圾回收操作具体包括:
①根据所述对象管理表中对象索引值的个数在RAM中开辟相应大小的位图区,并将所述位图区中所有位的值置为初始值;
②根据所述对象索引值对所述Java卡存储区域中的对象进行遍历,并将位图区中与能够访问到的对象对应的位的值置为有效值;
③回收与所述位图区中值为初始值的位相对应的对象在所述Java卡存储区域中占用的空间;
④回收与所述位图区中值为初始值的位相对应的对象的对象索引值在所述对象管理表中占用的空间;
⑤将所述垃圾回收标志位置为无效,释放所述位图区占用的存储空间,判断所述垃圾回收标志位是否有效,是则执行垃圾回收操作,否则所述Java卡虚拟机等待接收命令,且在接收到命令后对所述命令进行解析以及根据所述命令执行相应操作。
6.如权利要求1所述的方法,其特征在于,所述判断所述应用标识符对应的应用程序是否满足删除条件具体为判断所述应用程序是否同时满足:
①所述应用程序未生成其它包的静态变量;
②所述应用程序未在具有两个及以上实例的同时又含有静态变量;
③所述应用程序以外的应用程序的对象数组中不包含在所述应用程序中生成的对象;
当所述应用程序同时满足上述三个条件时,所述应用程序满足删除条件;当所述应用程序不同时满足上述三个条件时,所述应用程序不满足删除条件,所述Java卡虚拟机判断所述垃圾回收标志是否有效。
7.如权利要求1所述的方法,其特征在于,
所述查找所述应用程序的对象、子孙对象的具体方法为:
①查找应用程序管理集,获取所述应用程序对象的ID;
②根据所述应用程序对象的ID查找所述应用程序对象的地址;
③根据所述应用程序对象的地址中的数据查找所述应用程序的对象;
④查找对象管理表,获取所述应用程序的对象的ID;
⑤根据所述应用程序的对象的ID查找所述应用程序的对象的地址;
⑥根据所述应用程序的对象的地址中的数据查找所述应用程序的子孙对象。
8.如权利要求1所述的方法,其特征在于,
所述查找所述应用标识符的对象、子孙对象的具体方法为:
①查找所述应用标识符的地址;
②根据所述应用标识符的地址中的数据查找所述应用标识符的对象;
③查找对象管理表,获取所述应用标识符的对象的ID;
④根据所述应用标识符的对象的ID查找所述应用标识符的对象的地址;
⑤根据所述应用标识符的对象的地址中的数据查找所述应用标识符包含的子孙对象。
9.如权利要求1所述的方法,其特征在于,
所述查找所述包的对象、子孙对象的具体方法为:
①查找包管理集,获取所述包对象的ID;
②根据所述包对象的ID查找所述包对象的地址;
③根据所述包对象的地址中的数据查找所述包的对象;
④查找对象管理表,获取所述包的对象的ID;
⑤根据所述包的对象的ID查找所述包的对象的地址;
⑥根据所述包的对象的地址中的数据查找所述包的子孙对象。
10.如权利要求1-9中任意一项权利要求所述的方法,其特征在于,当所述垃圾回收标志位的值为true时,所述垃圾回收标志位有效,当所述垃圾回收标志位的值为false时,所述垃圾回收标志位无效。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110439970.8A CN102591788B (zh) | 2011-12-23 | 2011-12-23 | 一种Java卡垃圾回收方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110439970.8A CN102591788B (zh) | 2011-12-23 | 2011-12-23 | 一种Java卡垃圾回收方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102591788A true CN102591788A (zh) | 2012-07-18 |
CN102591788B CN102591788B (zh) | 2014-09-10 |
Family
ID=46480478
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110439970.8A Expired - Fee Related CN102591788B (zh) | 2011-12-23 | 2011-12-23 | 一种Java卡垃圾回收方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102591788B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103559076A (zh) * | 2013-11-04 | 2014-02-05 | 飞天诚信科技股份有限公司 | 一种使用寄生对象管理对象堆的方法和装置 |
CN103778064A (zh) * | 2012-10-23 | 2014-05-07 | 阿里巴巴集团控股有限公司 | 一种数据管理方法及装置 |
CN105635198A (zh) * | 2014-10-27 | 2016-06-01 | 中国移动通信集团公司 | 一种一致性管理方法及装置 |
CN106096408A (zh) * | 2016-06-03 | 2016-11-09 | 成都信息工程大学 | 一种Java卡越界访问静态变量漏洞的检测方法和装置 |
CN107729260A (zh) * | 2017-09-30 | 2018-02-23 | 捷德(中国)信息科技有限公司 | 用于智能卡的存储空间回收方法 |
CN109298959A (zh) * | 2017-07-25 | 2019-02-01 | 华为技术有限公司 | 一种内存异常检测方法及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020169556A1 (en) * | 2001-05-08 | 2002-11-14 | Sun Microsystems, Inc. | Identifying and tracking object references in a java programming environment |
CN101246440A (zh) * | 2007-02-12 | 2008-08-20 | 东信和平智能卡股份有限公司 | Java卡系统垃圾回收方法 |
CN101281458A (zh) * | 2008-05-14 | 2008-10-08 | 华为技术有限公司 | 一种垃圾回收的装置、系统及方法 |
EP2386958A1 (en) * | 2010-05-13 | 2011-11-16 | Assa Abloy AB | Method for incremental anti-tear garbage collection |
CN102270134A (zh) * | 2011-08-09 | 2011-12-07 | 北京握奇数据系统有限公司 | 一种Java卡中垃圾回收的方法及装置 |
-
2011
- 2011-12-23 CN CN201110439970.8A patent/CN102591788B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020169556A1 (en) * | 2001-05-08 | 2002-11-14 | Sun Microsystems, Inc. | Identifying and tracking object references in a java programming environment |
CN101246440A (zh) * | 2007-02-12 | 2008-08-20 | 东信和平智能卡股份有限公司 | Java卡系统垃圾回收方法 |
CN101281458A (zh) * | 2008-05-14 | 2008-10-08 | 华为技术有限公司 | 一种垃圾回收的装置、系统及方法 |
EP2386958A1 (en) * | 2010-05-13 | 2011-11-16 | Assa Abloy AB | Method for incremental anti-tear garbage collection |
CN102270134A (zh) * | 2011-08-09 | 2011-12-07 | 北京握奇数据系统有限公司 | 一种Java卡中垃圾回收的方法及装置 |
Non-Patent Citations (1)
Title |
---|
谌宁 等: "基于嵌入式Java虚拟机的垃圾回收算法", 《计算机应用》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103778064A (zh) * | 2012-10-23 | 2014-05-07 | 阿里巴巴集团控股有限公司 | 一种数据管理方法及装置 |
CN103559076A (zh) * | 2013-11-04 | 2014-02-05 | 飞天诚信科技股份有限公司 | 一种使用寄生对象管理对象堆的方法和装置 |
CN103559076B (zh) * | 2013-11-04 | 2016-09-28 | 飞天诚信科技股份有限公司 | 一种使用寄生对象管理对象堆的方法和装置 |
CN105635198A (zh) * | 2014-10-27 | 2016-06-01 | 中国移动通信集团公司 | 一种一致性管理方法及装置 |
CN105635198B (zh) * | 2014-10-27 | 2019-09-13 | 中国移动通信集团公司 | 一种一致性管理方法及装置 |
CN106096408A (zh) * | 2016-06-03 | 2016-11-09 | 成都信息工程大学 | 一种Java卡越界访问静态变量漏洞的检测方法和装置 |
CN109298959A (zh) * | 2017-07-25 | 2019-02-01 | 华为技术有限公司 | 一种内存异常检测方法及设备 |
CN109298959B (zh) * | 2017-07-25 | 2021-09-21 | 华为技术有限公司 | 一种内存异常检测方法及设备 |
US11513932B2 (en) | 2017-07-25 | 2022-11-29 | Huawei Technologies Co., Ltd. | Memory anomaly detection method and device |
CN107729260A (zh) * | 2017-09-30 | 2018-02-23 | 捷德(中国)信息科技有限公司 | 用于智能卡的存储空间回收方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102591788B (zh) | 2014-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102591788A (zh) | 一种Java卡垃圾回收方法 | |
CN105159777B (zh) | 进程的内存回收方法及装置 | |
CN101447940B (zh) | 访问控制列表规则的更新方法和装置 | |
US11042477B2 (en) | Memory management using segregated free lists | |
JP6014925B2 (ja) | メモリ回収方法および装置 | |
CN100530140C (zh) | 应用程序级的内存管理方法 | |
CN101382916B (zh) | 嵌入式系统内存管理的方法 | |
CN104008111A (zh) | 一种数据的存储管理方法及装置 | |
CN1321377C (zh) | 智能卡存储环境的控制方法 | |
CN1996258A (zh) | 一种动态内存池的实现方法 | |
CN102567522B (zh) | 一种智能卡文件系统的管理方法及设备 | |
CN101650972A (zh) | 智能卡的非易失性存储器数据更新方法 | |
CN101286878A (zh) | 一种终端的内存池的管理方法 | |
US8966212B2 (en) | Memory management method, computer system and computer readable medium | |
CN102662799B (zh) | 数据备份的方法、服务器及热备份系统 | |
CN107329836A (zh) | 多系统的内存管理方法、管理装置以及移动终端 | |
CN103049298A (zh) | 一种Nandflash烧写方法 | |
CN102270134B (zh) | 一种Java卡中垃圾回收的方法及装置 | |
CN101957801A (zh) | 信息处理设备和信息处理方法 | |
US8990532B2 (en) | Method of managing memory in computer system, computer system and memory managing program | |
CN103077118A (zh) | 一种无效数据回收方法及系统 | |
CN107341049A (zh) | 一种事务处理的优化处理方法及装置 | |
CN105302527B (zh) | 线程组织方法 | |
CN107273303A (zh) | 一种闪存数据管理系统、方法、闪存芯片及存储装置 | |
CN107315598A (zh) | 一种系统恢复方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140910 |
|
CF01 | Termination of patent right due to non-payment of annual fee |