CN102270134B - 一种Java卡中垃圾回收的方法及装置 - Google Patents
一种Java卡中垃圾回收的方法及装置 Download PDFInfo
- Publication number
- CN102270134B CN102270134B CN201110226977.1A CN201110226977A CN102270134B CN 102270134 B CN102270134 B CN 102270134B CN 201110226977 A CN201110226977 A CN 201110226977A CN 102270134 B CN102270134 B CN 102270134B
- Authority
- CN
- China
- Prior art keywords
- garbage
- assignment
- java card
- static
- quoted
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种Java卡中垃圾回收的方法及装置,用以Java卡主动进行垃圾回收,并且采用局部分阶段垃圾回收的方式,使得垃圾回收操作分布在多个小的时间片内,避免了现有技术中一次性回收Java卡中的所有垃圾而占用过多时间的问题,提高了Java卡中垃圾回收的效率。该方法为:在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作,若根据所述赋值操作确定创建的对象未被静态对象所引用,则将该未被静态对象所引用的对象确定为垃圾对象,在函数执行结束时,对Java卡中的垃圾对象进行回收,本发明同时公开了一种Java卡中垃圾回收的装置。
Description
技术领域
本发明涉及智能卡技术领域,尤其涉及一种Java卡中垃圾回收的方法及装置。
背景技术
Java卡是可以运行Java程序代码的智能卡,在Java卡中实现了应用程序(Applet)运行所需的运行环境,负责解释Java语音的虚拟机,以及标准的系统应用程序编程接口(Application Programming Interface,API),为Applet在Java卡上的运行提供了保证,其中,Applet是运行在智能卡上的特定应用程序。
Java语言的一大优势是,在Java运行环境中可以自主确定垃圾对象(不再使用的对象)并将其回收。具体的,Java堆是Java的数据区,而Java类的实例对象是从Java堆中分配空间,在个人电脑(PC)上,Java堆是保存在RAM上,而在Java卡中,Java堆是保存在非易失性存储器(如EEPROM)上。所谓垃圾回收的主要功能就是发现那些不再被引用的对象(即垃圾对象),并释放这些垃圾对象占用的空间,而垃圾回收机制就是用时间换取空间,即通过增加系统运行时间,来释放堆空间。
传统的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指令)。putstatic_a指令是给静态对象赋值,putfield指令是给静态对象的一个成员变量赋值。其中,在监控到putfield指令时,根据被赋值的成员变量找到所述的类对象,进而判断该类对象是否为静态对象,若是则统计该对象的引用次数。
例如,有如下一段源代码:
将上述源代码编译成bytecode指令如下:
bspush 100(0x64) //在堆栈中压入常量100;
newarray //创建临时对象
putstatic_a Test/Test.a //将创建的临时对象赋值给a
则相应的Java卡解释器代码如下:
在_putstatic_a函数中,将a对象所引用的对象的引用次数加1。
本实施例中,将未被静态对象所引用的对象确定为垃圾对象,具体为:统计静态对象所引用的对象的引用次数,将引用次数为初始值的对象确定为垃圾对象。
步骤203:在函数执行结束时,对Java卡中的垃圾对象进行回收。
较佳地,对Java卡中的垃圾对象进行回收,具体为:判断确定的垃圾对象的个数是否达到设定阈值,若是,则对Java卡中确定的垃圾对象进行回收,否则,继续执行下一个函数,直至累计的确定的垃圾对象的个数达到设定阈值时,对Java卡中确定的垃圾对象进行回收。
实际应用中,也可以设定其它的垃圾回收的触发条件,例如,将执行的函数的个数设定为垃圾回收的触发条件,假设在执行设定个数的函数后,进行垃圾回收。
本发明实施例中,无论是将确定的垃圾对象的个数作为垃圾回收的触发条件,还是将执行的函数的个数作为垃圾回收的触发条件,均是以函数为基本单位,即是在一个函数执行结束时,执行垃圾回收操作。
较佳地,在函数执行过程中,将各对象的引用次数保存在缓存中,并根据统计更新缓存中保存的引用次数,在函数执行结束时,将缓存中保存的对象的引用次数保存至非易失性存储器(例如EEPROM)中,由于非易失性存储器具有断电数据不易丢失的特性,可以长期保存各对象的引用次数。实际应用中,下一个函数在执行时,可以基于历史统计获得的各对象的引用次数进行累计,在函数执行结束时,基于最终获得的各对象的引用次数进行垃圾回收操作。
基于上述技术方案,本发明实施例中,通过在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作,在根据赋值操作确定确定创建的对象未被静态对象所引用,则将该未被静态对象所引用的对象确定为垃圾对象,在函数执行结束时,对Java卡中的垃圾对象进行回收,从而可以在Java卡中的函数执行过程中确定垃圾对象,在函数执行结束时,对垃圾对象进行回收,以函数为基本单位,采用局部分阶段的方式进行垃圾回收,将垃圾回收操作占用的时间均匀分布在整个Java卡的执行期间,避免了现有技术中一次性集中回收Java卡中的所有垃圾而占用过多时间的问题,将非常耗时的垃圾回收分布在很短的时间片内,从而提高了Java卡垃圾回收的效率,提高了Java卡的时效性,完善了Java卡的功能,也无需遍历整个对象表,节约了时间。并且,采用Java卡主动回收的方式,避免了现有技术中Java卡被动回收时,对Java卡的正常使用带来的影响,提高Java卡的性能,并提升用户使用体验。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (6)
1.一种Java卡中垃圾回收的方法,其特征在于,包括:
在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作,其中,在监控到创建对象操作时,针对创建的对象设置引用次数,并将引用次数设定为初始值;在监控到对静态对象的赋值操作时,若监控到赋值操作,则将该赋值操作中被引用的对象的引用次数增加设定数值;若监控到重复赋值操作,则将该重复赋值操作中被引用的对象的引用次数增加设定数值,同时将针对同一静态对象前一次赋值操作中所引用的对象的引用次数减少设定数值;
若根据所述赋值操作确定创建的对象未被静态对象所引用,则将该未被静态对象所引用的对象确定为垃圾对象;
在函数执行结束时,对Java卡中的垃圾对象进行回收。
2.如权利要求1所述的方法,其特征在于,将未被静态对象所引用的对象确定为垃圾对象,包括:
统计所述静态对象所引用的对象的引用次数,将所述引用次数为初始值的对象确定为垃圾对象。
3.如权利要求1或2所述的方法,其特征在于,对Java卡中的垃圾对象进行回收,包括:
判断确定的垃圾对象的个数是否达到设定阈值,若是,则对Java卡中确定的垃圾对象进行回收,否则,继续执行下一个函数,直至累计的确定的垃圾对象的个数达到设定阈值时,对Java卡中确定的垃圾对象进行回收。
4.一种Java卡中垃圾回收的装置,其特征在于,包括:
第一处理单元,用于在函数执行过程中,监控创建对象操作以及对静态对象的赋值操作,其中,在监控到创建对象操作时,针对创建的对象设置引用次数,并将引用次数设定为初始值;
第二处理单元,用于在所述第一处理单元监控到对静态对象的赋值操作时,统计所述静态对象所引用的对象的引用次数,其中,若所述第一处理单元监控到赋值操作,则将该赋值操作中被引用的对象的引用次数增加设定数值;若所述第一处理单元监控到重复赋值操作,则将该重复赋值操作中被引用的对象的引用次数增加设定数值,同时将针对同一静态对象前一次赋值操作中所引用的对象的引用次数减少设定数值;并根据所述赋值操作确定创建的对象未被静态对象所引用时,将该未被静态对象所引用的对象确定为垃圾对象;
第三处理单元,用于在函数执行结束时,对Java卡中的垃圾对象进行回收。
5.如权利要求4所述的装置,其特征在于,所述第二处理单元用于将未被静态对象所引用的对象确定为垃圾对象,具体为:
统计所述静态对象所引用的对象的引用次数,将所述引用次数为初始值的对象确定为垃圾对象。
6.如权利要求4或5所述的装置,其特征在于,所述第三处理单元用于对Java卡中的垃圾对象进行回收,具体为:
判断所述第二处理单元确定的垃圾对象的个数是否达到设定阈值,若是,则对Java卡中确定的垃圾对象进行回收,否则,继续执行下一个函数,直至累计的所述第二处理单元确定的垃圾对象的个数达到设定阈值时,对Java卡中确定的垃圾对象进行回收。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110226977.1A CN102270134B (zh) | 2011-08-09 | 2011-08-09 | 一种Java卡中垃圾回收的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110226977.1A CN102270134B (zh) | 2011-08-09 | 2011-08-09 | 一种Java卡中垃圾回收的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102270134A CN102270134A (zh) | 2011-12-07 |
CN102270134B true CN102270134B (zh) | 2015-05-27 |
Family
ID=45052445
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110226977.1A Active CN102270134B (zh) | 2011-08-09 | 2011-08-09 | 一种Java卡中垃圾回收的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102270134B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591788B (zh) * | 2011-12-23 | 2014-09-10 | 飞天诚信科技股份有限公司 | 一种Java卡垃圾回收方法 |
CN102722415B (zh) * | 2012-05-22 | 2014-11-05 | 广州晶锐信息技术有限公司 | 基于堆栈体系结构Java SoC系统的垃圾收集方法 |
US10120655B2 (en) * | 2016-06-03 | 2018-11-06 | Microsoft Technology Licensing, Llc. | Seamless high performance interoperability between different type graphs that share a garbage collector |
CN106951306B (zh) * | 2017-03-06 | 2020-01-03 | 东软集团股份有限公司 | 一种stw检测方法、装置及设备 |
CN107122247B (zh) * | 2017-04-27 | 2021-11-02 | 腾讯科技(深圳)有限公司 | 一种静态占用图片的检测方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101246440A (zh) * | 2007-02-12 | 2008-08-20 | 东信和平智能卡股份有限公司 | Java卡系统垃圾回收方法 |
CN101281458A (zh) * | 2008-05-14 | 2008-10-08 | 华为技术有限公司 | 一种垃圾回收的装置、系统及方法 |
CN101894049A (zh) * | 2010-07-14 | 2010-11-24 | 中兴通讯股份有限公司 | 一种自适应回收垃圾对象的系统及方法 |
-
2011
- 2011-08-09 CN CN201110226977.1A patent/CN102270134B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101246440A (zh) * | 2007-02-12 | 2008-08-20 | 东信和平智能卡股份有限公司 | Java卡系统垃圾回收方法 |
CN101281458A (zh) * | 2008-05-14 | 2008-10-08 | 华为技术有限公司 | 一种垃圾回收的装置、系统及方法 |
CN101894049A (zh) * | 2010-07-14 | 2010-11-24 | 中兴通讯股份有限公司 | 一种自适应回收垃圾对象的系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102270134A (zh) | 2011-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102270134B (zh) | 一种Java卡中垃圾回收的方法及装置 | |
CN103150259B (zh) | 一种内存回收方法和装置 | |
US9355029B2 (en) | Thread-based memory management with garbage collection | |
CN101515967B (zh) | 一种终端固件空中下载装置及方法 | |
US7103723B2 (en) | Priority-based code cache management | |
JP4701321B2 (ja) | メモリ管理 | |
CN101971146A (zh) | 改进作为管理程序来宾而运行的虚拟机中内存使用情况的系统和方法 | |
CN1321377C (zh) | 智能卡存储环境的控制方法 | |
CN110325969B (zh) | 多阶段垃圾收集器 | |
CN105159777A (zh) | 进程的内存回收方法及装置 | |
CN103729235A (zh) | Java虚拟机的编译方法和Java虚拟机 | |
US7822938B2 (en) | System and method for performing garbage collection based on unmanaged memory allocations | |
CN104657378A (zh) | 一种文件缓存方法及装置 | |
CN104933051A (zh) | 文件存储空间回收方法和装置 | |
CN109189739B (zh) | 缓存空间回收方法和装置 | |
CN106055404A (zh) | 一种清理后台应用程序的方法和装置 | |
CN103593300A (zh) | 一种内存分配回收方法 | |
CN112199042B (zh) | 存储空间管理方法、装置、芯片、设备及存储介质 | |
CN103617060A (zh) | 使用超级状态存储加快嵌入式软件启动过程的方法 | |
CN104731634A (zh) | 一种实时在线的分布式计算框架的实现方法 | |
CN102169464B (zh) | 一种用于非易失性存储器的缓存方法、装置及智能卡 | |
CN1092358C (zh) | 带有检测点功能的计算机系统 | |
CN103699435A (zh) | 负载均衡方法及装置 | |
WO2017206302A1 (zh) | 一种应用程序的运行方法和运行装置 | |
CN113568581B (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 | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100015 Beijing city Chaoyang District Dongzhimen West eight Street No. 2 room Wanhong Yan Dong Business Garden Patentee after: Beijing Watchdata Limited by Share Ltd Address before: 100015 Beijing city Chaoyang District Dongzhimen West eight Street No. 2 room Wanhong Yan Dong Business Garden Patentee before: Beijing Woqi Data System Co., Ltd. |
|
CP01 | Change in the name or title of a patent holder |