CN103559076B - 一种使用寄生对象管理对象堆的方法和装置 - Google Patents
一种使用寄生对象管理对象堆的方法和装置 Download PDFInfo
- Publication number
- CN103559076B CN103559076B CN201310537587.5A CN201310537587A CN103559076B CN 103559076 B CN103559076 B CN 103559076B CN 201310537587 A CN201310537587 A CN 201310537587A CN 103559076 B CN103559076 B CN 103559076B
- Authority
- CN
- China
- Prior art keywords
- parasitic objects
- address
- parasitic
- objects
- deleted
- 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.)
- Expired - Fee Related
Links
- 230000003071 parasitic effect Effects 0.000 title claims abstract description 995
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000002372 labelling Methods 0.000 claims description 99
- 230000024241 parasitism Effects 0.000 claims description 31
- 241000406668 Loxodonta cyclotis Species 0.000 claims description 14
- 235000013399 edible fruits Nutrition 0.000 claims description 5
- 238000012217 deletion Methods 0.000 claims description 2
- 230000037430 deletion Effects 0.000 claims description 2
- 230000032696 parturition Effects 0.000 claims description 2
- 230000001960 triggered effect Effects 0.000 claims description 2
- 238000005299 abrasion Methods 0.000 abstract description 4
- 230000007423 decrease Effects 0.000 abstract description 4
- 238000011067 equilibration Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 10
- 230000007547 defect Effects 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种使用寄生对象管理对象堆的方法和装置,通过使用寄生对象标记对象堆中的空闲空间,并根据寄生对象在对象堆中为待创建对象申请空间,能够有效地管理对象堆中的空闲空间,提高对象堆的空间利用率;在执行完删包或删应用操作后,以及在检测到java卡应用程序调用与垃圾回收对应的预设API后,仅需要执行一个空操作,而不再需要通过移动对象堆中的已创建对象进行垃圾回收,减少了对已创建对象的移动次数以及移动对象带来的时间消耗,提高了Java卡虚拟机的工作效率,并在一定程度上达到磨损平衡。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种使用寄生对象管理对象堆的方法和装置。
背景技术
现有技术中,Java卡虚拟机将已创建的对象存储到对象堆中,在需要使用已创建的对象时,从对象表中获取该对象的引用值,并使用该引用值访问对象堆中的该对象。Java卡虚拟机在创建新对象时,为新对象申请的空间通常为对象堆中位于最后一个对象后的空间。如果对象堆中位于最后一个对象后的空间小于新对象占用的空间,Java卡虚拟机会返回资源不足的错误信息。此外,Java卡虚拟机在执行完删包或删应用操作后,以及在检测到java卡应用程序调用与垃圾回收对应的预设API后,会进行垃圾回收操作,即,扫描对象堆,通过移动对象使对象堆中的已创建的对象连续排列,将不同对象之间的空间碎片集合成一个连续的存储空间。
发明人在实现本发明的过程中,发现现有技术至少存在以下缺陷:
由于对象堆中的各个对象的生命周期不同,经过多次创建和删除对象后,对象堆中的可用空间通常是不连续的,而在创建新对象时,为新对象申请的空间通常为对象堆中位于最后一个对象后的空间,因此,在进行垃圾回收之前,已创建对象之间的空闲碎片无法得到有效的利用,导致对象堆的空间利用率低。另外,当上层应用频繁地调用API进行垃圾回收,Java卡虚拟机也需要频繁移动对象合并碎片,时间消耗较大,降低了Java卡虚拟机的工作效率。
发明内容
本发明提供了一种使用寄生对象管理对象堆的方法和装置,以解决现有技术中对象堆的空间利用率低的缺陷。
本发明提供了一种使用寄生对象管理对象堆的方法,所述寄生对象用于标记所述对象堆中的空闲空间,包括地址字节和容量字节,所述地址字节用于表示所述寄生对象的后一个寄生对象的地址,所述容量字节用于表示所述寄生对象所标记的空闲空间的大小,Java卡虚拟机的系统信息中存储有所述对象堆中的第一个寄生对象的地址;
所述Java卡虚拟机需要在所述对象堆中创建非寄生对象时,执行以下操作:
S1、所述Java卡虚拟机读取所述对象堆中的第一个寄生对象,将所述第一个寄生对象作为当前寄生对象;
S2、所述Java卡虚拟机判断当前寄生对象所标记的空闲空间是否小于待创建对象所占用的空间,如果是,则执行步骤S3;否则,执行步骤S10;
S3、所述Java卡虚拟机判断所述对象堆中是否存在当前寄生对象的后一个寄生对象,如果是,则执行步骤S4;否则,执行步骤S5;
S4、所述Java卡虚拟机将当前寄生对象的后一个寄生对象,作为更新后的当前寄生对象,并返回步骤S2;
S5、所述Java卡虚拟机将所述对象堆中的所有空闲空间进行合并,根据合并后的空闲空间创建对应的寄生对象,判断所述合并后的空闲空间是否小于所述待创建对象所占用的空间,如果是,则将创建的寄生对象的地址作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中,结束流程;否则,执行步骤S6;
S6、所述Java卡虚拟机读取当前寄生对象的地址字节,将读取到的结果作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中;
S7、所述Java卡虚拟机从当前寄生对象的地址开始,为所述待创建对象申请空间,获取申请空间后的剩余空间;
S8、所述Java卡虚拟机判断所述剩余空间是否大于寄生对象所占用的空间,如果是,则执行步骤S9;否则,结束流程;
S9、所述Java卡虚拟机从所述剩余空间的首地址开始,创建第一寄生对象,将所述第一寄生对象的地址作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中,结束流程;
S10、所述Java卡虚拟机从当前寄生对象的地址开始,为所述待创建对象申请空间,并对当前寄生对象的前一个寄生对象,和/或所述系统信息中存储的所述对象堆中的第一个寄生对象的地址进行更新。
本发明还提供了一种使用寄生对象管理对象堆的装置,所述寄生对象用于标记所述对象堆中的空闲空间,包括地址字节和容量字节,所述地址字节用于表示所述寄生对象的后一个寄生对象的地址,所述容量字节用于表示所述寄生对象所标记的空闲空间的大小,系统信息中存储有所述对象堆中的第一个寄生对象的地址;
所述装置,包括:
第一读取模块,用于在需要在所述对象堆中创建非寄生对象时,读取所述对象堆中的第一个寄生对象,将所述第一个寄生对象作为当前寄生对象,并触发第一判断模块;
第一判断模块,用于判断当前寄生对象所标记的空闲空间是否小于待创建对象所占用的空间,并在判断出当前寄生对象所标记的空闲空间小于待创建对象所占用的空间时,触发第二判断模块;
第二判断模块,用于在所述第一判断模块判断出当前寄生对象所标记的空闲空间小于待创建对象所占用的空间时,判断所述对象堆中是否存在当前寄生对象的后一个寄生对象,并在判断出所述对象堆中不存在当前寄生对象的后一个寄生对象时,触发合并模块;
第一更新模块,用于在所述第二判断模块判断出所述对象堆中存在当前寄生对象的后一个寄生对象时,将当前寄生对象的后一个寄生对象,作为更新后的当前寄生对象,并触发所述第二判断模块;
合并模块,用于将所述对象堆中的所有空闲空间进行合并,根据合并后的空闲空间创建对应的寄生对象;
第三判断模块,用于判断所述合并模块合并后的空闲空间是否小于所述待创建对象所占用的空间,并在判断出所述合并后的空闲空间小于所述待创建对象所占用的空间时,触发第一处理模块;
保存模块,用于在所述第三判断模块判断出所述合并后的空闲空间小于所述待创建对象所占用的空间时,将创建的寄生对象的地址作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中;
第一处理模块,用于读取当前寄生对象的地址字节,将读取到的结果作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中;从当前寄生对象的地址开始,为所述待创建对象申请空间,获取申请空间后的剩余空间;
第四判断模块,用于判断所述第一处理模块获取的所述剩余空间是否大于寄生对象所占用的空间;
第一创建模块,用于在所述第四判断模块判断出所述剩余空间大于寄生对象所占用的空间时,从所述剩余空间的首地址开始,创建第一寄生对象,将所述第一寄生对象的地址作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中;
第二处理模块,用于在所述第一判断模块判断出当前寄生对象所标记的空闲空间不小于待创建对象所占用的空间时,从当前寄生对象的地址开始,为所述待创建对象申请空间,并对当前寄生对象的前一个寄生对象,和/或所述系统信息中存储的所述对象堆中的第一个寄生对象的地址进行更新。
本发明达到的有益效果:通过使用寄生对象标记对象堆中的空闲空间,并根据寄生对象在对象堆中为待创建对象申请空间,能够有效地管理对象堆中的空闲空间,提高对象堆的空间利用率;在执行完删包或删应用操作后,以及在检测到java卡应用程序调用与垃圾回收对应的预设API后,仅需要执行一个空操作,而不再需要通过移动对象堆中的已创建对象进行垃圾回收,减少了对已创建对象的移动次数以及移动对象带来的时间消耗,提高了Java卡虚拟机的工作效率,并在一定程度上达到磨损平衡。
附图说明
图1为本发明实施例中的Java卡虚拟机第一次上电初始化后,对象堆的分布示意图;
图2为本发明实施例中的Java卡虚拟机连续创建多个非寄生对象后,对象堆的分布示意图;
图3为本发明实施例中的Java卡虚拟机删除非寄生对象后,对象堆的分布示意图;
图4为本发明实施例中的Java卡虚拟机创建和删除非寄生对象后,对象堆的分布示意图;
图5为本发明实施例中的Java卡虚拟机创建非寄生对象的流程图;
图6为本发明实施例中的Java卡虚拟机更新系统信息后,对象堆的分布示意图;
图7为本发明实施例中的Java卡虚拟机申请空间后,对象堆的分布示意图;
图8为本发明实施例中的Java卡虚拟机创建第一寄生对象后,对象堆的分布示意图;
图9为图5中步骤107的细化的流程图;
图10为本发明实施例中的Java卡虚拟机删除非寄生对象的流程图;
图11为本发明实施例中的使用寄生对象管理对象堆的装置结构图;
图12为本发明实施例中的合并模块450的结构图;
图13为本发明实施例中的第二处理模块510的结构图;
图14为本发明实施例中的第二更新模块550的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例的技术方案应用于Java卡虚拟机的对象堆中,该对象堆中包含寄生对象和非寄生对象,其中,非寄生对象为Java程序运行时创建的Java对象,寄生对象用于标记对象堆中的空闲空间。Java卡虚拟机的系统信息中存储有对象堆中的第一个寄生对象的地址。本发明实施例中的对象堆是从低地址向高地址使用的,对象堆中的第一个寄生对象为对象堆中地址最小的寄生对象。
具体地,寄生对象包括类型字节、地址字节和容量字节,其中,类型字节用于表示寄生对象的类型,地址字节用于表示该寄生对象的后一个寄生对象的地址,容量字节用于表示所标记的空闲空间的大小。其中,寄生对象的类型字节的取值可以为第一预设值,例如,“0x01”。当前寄生对象的后一个寄生对象是指对象堆中地址比当前寄生对象的地址大,且地址差值最小的寄生对象。
本发明实施例中,Java卡虚拟机第一次上电初始化时,从对象堆的首地址开始,创建对象堆中的第一个寄生对象,并将对象堆的首地址作为对象堆中的第一个寄生对象的地址存储到Java卡虚拟机的系统信息中。上述寄生对象用于标记整个对象堆,其容量字节的取值为对象堆的空间大小,其地址字节为空。
如图1所示,为Java卡虚拟机第一次上电初始化后,对象堆的分布示意图,对象堆中的空闲空间_1为对象堆的所有空间,寄生对象parasiticObj_1为对象堆中的第一个寄生对象,也是对象堆中唯一的寄生对象。
当Java卡虚拟机基于图1所示的对象堆连续创建多个非寄生对象后,对象堆中的空闲空间为对象堆中位于最后一个对象后的空间,对象堆的分布示意图如图2所示,其中,obj1、obj2、obj3、obj4、obj5和obj6为对象堆中的非寄生对象,parasiticObj_1为对象堆中的寄生对象,用于标记对象堆中的空闲空间。
当Java卡虚拟机从对象堆中删除非寄生对象后,对象堆中的空闲空间除包括对象堆中位于最后一个对象后的空间外,还包括已删除的非寄生对象曾占用的空间。例如,当Java卡虚拟机从图2所示的对象堆中删除非寄生对象obj3和obj6后,对象堆的分布示意图如图3所示,其中,obj1、obj2、obj4和obj5为对象堆中的非寄生对象,parasiticObj_1和parasiticObj_2为对象堆中的寄生对象,分别用于标记对象堆中的空闲空间_1和空闲空间_2。
当Java卡虚拟机基于图3所示的对象堆创建和删除非寄生对象后,对象堆的分布示意图如图4所示,其中,obj1、obj5、obj6和obj7为对象堆中的非寄生对象,parasiticObj_1、parasiticObj_2和parasiticObj_3为对象堆中的寄生对象,用于标记对象堆中的空闲空间_1、空闲空间_2和空闲空间_3。系统信息中存储有对象堆中的第一个寄生对象parasiticObj_1的地址“0x1111”,对象表中存储有obj1、obj5、obj6和obj7的引用值,即,objref_1、objref_5、objref_6和objref_7。
基于本发明的技术方案,当需要在如图4所示的对象堆中创建非寄生对象Obj_8时,Java卡虚拟机执行的操作流程,如图5所示,包括以下步骤:
步骤101,Java卡虚拟机从系统信息中获取对象堆中的第一个寄生对象的地址。
步骤102,Java卡虚拟机判断获取到的地址是否为空,如果是,则执行步骤107,否则执行步骤103。
例如,Java卡虚拟机从系统信息中获取到的对象堆中的第一个寄生对象的地址为“0x1111”时,Java卡虚拟机判断出该地址不为空,进而确定对象堆中的第一个寄生对象的地址为“0x1111”;Java卡虚拟机从系统信息中获取到的对象堆中的第一个寄生对象的地址为“0x0000”时,Java卡虚拟机判断出该地址字节为空,进而确定系统中没有存储第一个寄生对象的地址,即对象堆中没有寄生对象。
步骤103,Java卡虚拟机读取对象堆中的第一个寄生对象,将第一个寄生对象作为当前寄生对象。
具体地,Java卡虚拟机可以根据系统信息中存储的对象堆中的第一个寄生对象的地址,读取对象堆中的第一个寄生对象,并将该寄生对象作为当前寄生对象。
例如,Java卡虚拟机的系统信息中存储的对象堆中的第一个寄生对象的地址为“0x1111”时,Java卡虚拟机可以根据该地址,读取到对象堆中的第一个寄生对象parasiticObj_1“01 2222 0056”,将parasiticObj_1“01 2222 0056”作为当前寄生对象。
步骤104,Java卡虚拟机判断当前寄生对象所标记的空闲空间是否小于待创建对象所占用的空间,如果是,则执行步骤105;否则,执行步骤109。
具体的,Java卡虚拟机可以读取当前寄生对象的容量字节,从操作栈中读取待创建对象的所占用的空间的大小,判断上述容量字节的取值是否小于待创建对象所占用的空间的大小,如果是,则确定当前寄生对象所标记的空闲空间小于待创建对象所占用的空间;否则,确定当前寄生对象所标记的空闲空间不小于待创建对象所占用的空间。
例如,当前寄生对象为“01 2222 0056”,寄生对象的第四个字节和第五个字节为容量字节时,如果待创建对象所占用的空间为0x66个字节,则Java卡虚拟机判断出当前寄生对象的容量字节的取值小于待创建对象所占用的空间的大小,确定当前寄生对象所标记的空闲空间小于待创建对象所占用的空间;如果待创建对象所占用的空间为0x45个字节,则Java卡虚拟机判断出当前寄生对象的容量字节的取值大于待创建对象所占用的空间的大小,确定当前寄生对象所标记的空闲空间大于待创建对象所占用的空间。
步骤105,Java卡虚拟机判断对象堆中是否存在当前寄生对象的后一个寄生对象,如果是,则执行步骤106;否则,执行步骤107。
具体地,Java卡虚拟机可以读取当前寄生对象的地址字节,判断该地址字节是否为空,如果是,则确定对象堆中不存在当前寄生对象的后一个寄生对象;否则,确定对象堆中存在当前寄生对象的后一个寄生对象。本实施例中,对象堆是从低地址向高地址使用的,当前寄生对象的后一个寄生对象是指对象堆中地址比当前寄生对象的地址大,且地址差值最小的寄生对象。
例如,如果当前寄生对象为“01 2222 0056”,Java卡虚拟机可以读取地址字节“0x2222”,判断出该地址字节不为空,进而确定对象堆中存在当前寄生对象的后一个寄生对象;如果当前寄生对象为“01 0000 0016”,Java卡虚拟机可以读取地址字节“0x0000”,判断出该地址字节为空,进而确定对象堆中不存在当前寄生对象的后一个寄生对象。
步骤106,Java卡虚拟机读取当前寄生对象的后一个寄生对象,将当前寄生对象更新为读取到的寄生对象,并返回步骤104。
具体地,Java卡虚拟机可以根据当前寄生对象的地址字节的取值,读取当前寄生对象的后一个寄生对象,将当前寄生对象更新为读取到的寄生对象。
例如,当前寄生对象为“01 2222 0056”,Java卡虚拟机可以根据地址字节“0x2222”,从地址“0x2222”处读取当前寄生对象的后一个寄生对象parasiticObj_2,将当前寄生对象更新为读取到的寄生对象parasiticObj_2。
步骤107,Java卡虚拟机将对象堆中的所有空闲空间进行合并,根据合并后的空闲空间创建对应的寄生对象,并将该寄生对象的地址作为对象堆中的第一个寄生对象的地址保存到系统信息中。
具体地,Java卡虚拟机可以通过移动对象堆中的已创建的对象,将对象堆中的所有的空闲空间集中起来,得到合并后的空闲空间,从合并后的空闲空间的首地址开始,创建对应的寄生对象,将该寄生对象的类型字节的取值设置为第一预设值,将该寄生对象的地址字节设置为空,将该寄生对象的容量字节的取值设置为上述合并后的空闲空间的大小。其中,对象堆中的空闲空间包括对象堆中的空间碎片以及寄生对象所标记的空闲空间。
例如,合并后的空闲空间的大小为“0x0175”,Java卡虚拟机根据合并后的空闲空间创建对应的寄生对象parasiticObj_1“01 0000 0175”。
需要说明的是,本步骤的详细过程可参照如图9所示的流程图。
步骤108,Java卡虚拟机判断合并后的空闲空间是否小于待创建对象所占用的空间,如果是,则结束流程;否则,返回步骤103。
具体的,Java卡虚拟机可以读取步骤107中创建的寄生对象的容量字节,从操作栈中读取待创建对象的所占用的空间的大小,判断上述寄生对象的容量字节的取值是否小于待创建对象所占用的空间的大小,如果是,则确定合并后的空闲空间小于待创建对象所占用的空间;否则,确定合并后的空闲空间不小于待创建对象所占用的空间。
例如,当待创建对象所占用的空间为0x66个字节,寄生对象的第四个字节和第五个字节为容量字节时,如果步骤107中创建的寄生对象parasiticObj_1为“01 0000 0175”,则Java卡虚拟机可以判断出步骤107中创建的寄生对象的容量字节的取值大于待创建对象所占用的空间的大小,确定合并后的空闲空间大于待创建对象所占用的空间。
步骤109,Java卡虚拟机判断当前寄生对象是否为对象堆中的第一个寄生对象,如果是,则执行步骤110;否则,执行步骤114。
具体地,Java卡虚拟机可以判断当前寄生对象的地址是否为Java卡虚拟机的系统信息中存储的对象堆中的第一个寄生对象的地址,如果是,则确定当前寄生对象为对象堆中的第一个寄生对象;否则,确定当前寄生对象不是对象堆中的第一个寄生对象。
例如,Java卡虚拟机的系统信息中存储的对象堆中的第一个寄生对象的地址为“0x1111”时,如果当前寄生对象的地址为“0x1111”,Java卡虚拟机可以确定当前寄生对象为对象堆中的第一个寄生对象。
步骤110,Java卡虚拟机读取当前寄生对象的地址字节,将读取到的结果作为对象堆中的第一个寄生对象的地址保存到系统信息中。
例如,如果当前寄生对象为“01 2222 0056”,Java卡虚拟机可以读取地址字节“0x2222”,将“0x2222”作为对象堆中的第一个寄生对象的地址保存到系统信息中,如图6所示。如果当前寄生对象为“01 0000 0175”,Java卡虚拟机可以读取地址字节“0x0000”,判断出该地址字节为空,进而确定对象堆中不存在当前寄生对象的后一个寄生对象,将系统信息中记录的第一个寄生对象的地址更新为“0x0000”。
步骤111,Java卡虚拟机从当前寄生对象的地址开始,为待创建对象申请空间,初始化对象头,将待创建对象添加到对象表中,并获取申请空间后的剩余空间。
具体地,Java卡虚拟机可以从当前寄生对象的地址开始,为待创建对象申请空间,初始化对象头,将待创建对象的偏移地址作为引用值添加到对象表中,将当前寄生对象所标记的空闲空间的大小减去已被申请的空间的大小,将得到的结果作为申请空间后的剩余空间的大小,并获取当前寄生对象的地址与已被申请的空间的大小相加,将得到的结果作为申请空间后的剩余空间的首地址。
例如,当前寄生对象为“01 2222 0056”,其地址为“0x1111”,待创建对象Obj_8所占用的空间为0x45个字节时,Java卡虚拟机可以从地址“0x1111”开始,为待创建对象Obj_8申请0x45个字节的空间,将待创建对象Obj_8的偏移地址“0x1111”作为引用值添加到对象表中,剩余空间的大小为当前寄生对象所标记的空闲空间的大小减去已被申请的空间的大小,即,0x56字节-0x45字节=0x11字节,剩余空间的首地址为“0x1111”+0x45=“0x1156”,如图7所示。
步骤112,Java卡虚拟机判断剩余空间是否大于寄生对象所占用的空间,如果是,则执行步骤113;否则,结束流程。
本实施例中,寄生对象所占用的空间可以为0x05个字节;相应地,Java卡虚拟机可以判断剩余空间的大小是否大于0x05个字节,如果是,则确定剩余空间大于寄生对象所占用的空间;否则,确定剩余空间不大于寄生对象所占用的空间。
例如,剩余空间的大小为0x11个字节时,Java卡虚拟机可以判断出剩余空间的大小大于0x05个字节,进而确定剩余空间大于寄生对象所占用的空间。
步骤113,Java卡虚拟机从剩余空间的首地址开始,创建第一寄生对象,将该第一寄生对象的地址作为对象堆中的第一个寄生对象的地址保存到系统信息中,结束流程。
具体地,Java卡虚拟机可以将第一寄生对象的类型字节的取值设置为第一预设值,将第一寄生对象的地址字节的取值设置为第一寄生对象的后一个寄生对象的地址,将第一寄生对象的容量字节的取值设置为剩余空间的大小,并将该第一寄生对象的地址作为对象堆中的第一个寄生对象的地址保存到系统信息中。本实施例中,对象堆是从低地址向高地址使用的,第一寄生对象的后一个寄生对象是指对象堆中地址比第一寄生对象的地址大,且地址差值最小的寄生对象。
例如,剩余空间的大小为0x11个字节,首地址为“0x1156”,第一寄生对象的后一个寄生对象的地址为“0x2222”时,则Java卡虚拟机生成的第一寄生对象parasiticObj_4为“01 2222 0011”,Java卡虚拟机将该第一寄生对象parasiticObj_4的地址“0x1156”作为对象堆中的第一个寄生对象的地址保存到系统信息中,如图8所示。
步骤114,Java卡虚拟机根据当前寄生对象的后一个寄生对象的地址,更新当前寄生对象的前一个寄生对象。
具体地,Java卡虚拟机可以读取当前寄生对象的地址字节的取值,将当前寄生对象的前一个寄生对象的地址字节的取值,更新为当前寄生对象的地址字节的取值。本实施例中,对象堆是从低地址向高地址使用的,当前寄生对象的前一个寄生对象是指对象堆中地址比当前寄生对象的地址小,且地址差值最小的寄生对象;当前寄生对象的后一个寄生对象是指对象堆中地址比当前寄生对象的地址大,且地址差值最小的寄生对象。
例如,当前寄生对象为“01 2222 0056”,当前寄生对象的前一个寄生对象为“01 1785 0020”时,Java卡虚拟机可以将当前寄生对象的前一个寄生对象更新为“01 2222 0020”。
步骤115,Java卡虚拟机从当前寄生对象的地址开始,为待创建对象申请空间,初始化对象头,将待创建对象添加到对象表中,获取申请空间后的剩余空间。
具体地,Java卡虚拟机可以从当前寄生对象的地址开始,为待创建对象申请空间,初始化对象头,将待创建对象的偏移地址作为引用值添加到对象表中,将当前寄生对象所标记的空闲空间的大小减去已被申请的空间的大小,将得到的结果作为申请空间后的剩余空间的大小,并获取当前寄生对象的地址与已被申请的空间的大小相加,将得到的结果作为申请空间后的剩余空间的首地址。
例如,当前寄生对象为“01 2222 0056”,其地址为“0x1900”时,Java卡虚拟机从地址“0x1900”开始,为待创建对象申请0x45个字节的空间,将待创建对象的偏移地址“0x1900”作为引用值添加到对象表中,剩余空间的大小为当前寄生对象所标记的空闲空间减去已被申请的空间后得到的空间,即,0x56字节-0x45字节=0x11字节,剩余空间的首地址为“0x1900”+0x45=“0x1945”。
步骤116,Java卡虚拟机判断剩余空间是否大于寄生对象所占用的空间,如果是,则执行步骤117;否则,结束流程。
本实施例中,寄生对象所占用的空间可以为0x05个字节;相应地,Java卡虚拟机可以判断剩余空间的大小是否大于0x05个字节,如果是,则确定剩余空间大于寄生对象所占用的空间;否则,确定剩余空间不大于寄生对象所占用的空间。
例如,剩余空间的大小为0x11个字节时,Java卡虚拟机可以判断出剩余空间的大小大于0x05个字节,进而确定剩余空间大于寄生对象所占用的空间。
步骤117,Java卡虚拟机从剩余空间的首地址开始,创建第二寄生对象,根据该第二寄生对象的地址,更新该第二寄生对象的前一个寄生对象,结束流程。
具体地,Java卡虚拟机可以将第二寄生对象的类型字节的取值设置为第一预设值,将第二寄生对象的地址字节的取值设置为第二寄生对象的后一个寄生对象的地址,将第二寄生对象的容量字节的取值设置为剩余空间的大小,将第二寄生对象的前一个寄生对象的地址字节的取值,更新为第二寄生对象的地址。本实施例中,对象堆是从低地址向高地址使用的,第二寄生对象的前一个寄生对象是指对象堆中地址比第二寄生对象的地址小,且地址差值最小的寄生对象;第二寄生对象的后一个寄生对象是指对象堆中地址比第二寄生对象的地址大,且地址差值最小的寄生对象。
例如,剩余空间的大小为0x11个字节,第二寄生对象的后一个寄生对象的地址为“0x2222”,第二寄生对象的地址为“0x1945”,第二寄生对象的前一个寄生对象为“0122220020”时,则Java卡虚拟机生成的第二寄生对象为“01 22220011”,Java卡虚拟机根据该第二寄生对象的地址“0x1945”,将第二寄生对象的前一个寄生对象更新为“0119450020”。
上述实施例中,步骤107可细化为如图9所示的流程图,包括以下步骤:
步骤201,Java卡虚拟机将系统信息中保存的对象堆中的第一个寄生对象的地址设置为空。
例如,Java卡虚拟机将系统信息中保存的对象堆中的第一个寄生对象的地址设置为“0x0000”。
步骤202,Java卡虚拟机将对象堆中的第一个非寄生对象作为当前对象,获取当前对象的地址减去对象堆的首地址得到的差值,将空闲空间变量初始化为上述差值。
本发明实施例中,对象堆是从低地址向高地址使用的,对象堆中的第一个非寄生对象为对象堆中地址最小的非寄生对象。
例如,当对象堆中的第一个非寄生对象Obj1的地址为“0x0023”,对象堆的首地址为“0x0000”时,Java卡虚拟机将对象堆中的第一个非寄生对象Obj1作为当前对象pObj,将pObj的地址减去对象堆的首地址,即,0x0023-0x0000,得到的差值为0x23字节,Java卡虚拟机将空闲空间变量的取值设置为0x23字节。
步骤203,Java卡虚拟机判断当前对象的地址是否小于对象堆中最后一个非寄生对象的地址,如果是,则执行步骤204;否则,执行步骤207。
本发明实施例中,对象堆是从低地址向高地址使用的,对象堆中的最后一个非寄生对象为对象堆中地址最大的非寄生对象。
例如,当前对象pObj的地址为“0x0023”,对象堆中最后一个非寄生对象的地址为“0x1529”时,Java卡虚拟机判断出当前对象pObj的地址小于对象堆中最后一个非寄生对象的地址。
步骤204,Java卡虚拟机判断空闲空间变量的取值是否为零,如果是,则执行步骤206;否则,执行步骤205。
步骤205,Java卡虚拟机根据空闲空间变量的取值,将当前对象前移,更新当前对象在对象表中的引用值,并执行步骤206。
具体地,Java卡虚拟机将当前对象前移的空间大小,可以为空闲空间变量的取值,Java卡虚拟机可以将对象表中记录的当前对象的引用值新为当前对象前移后的偏移地址。
例如,空闲空间变量的取值为0x13字节,当前对象pObj的地址为“0x0023”时,Java卡虚拟机将当前对象pObj前移0x13个字节,前移后的当前对象pObj的地址为“0x0010”,Java卡虚拟机将对象表中记录的当前对象pObj的引用值更新为当前对象前移后的偏移地址“0x0010”。
步骤206,Java卡虚拟机获取当前对象的后一个非寄生对象的地址减去当前对象的地址和当前对象占用的空间的大小得到的差值,将空闲空间变量更新为上述差值,将当前对象的后一个非寄生对象作为更新后的当前对象,并返回步骤203。
本发明实施例中,对象堆是从低地址向高地址使用的,当前对象的后一个非寄生对象是指对象堆中地址比当前对象的地址大,且地址差值最小的非寄生对象。
例如,当前对象pObj的后一个非寄生对象为Obj2,Obj2的地址为“0x0059”,pObj的地址为“0x0023”,pObj占用的空间的大小为0x10个字节,Java卡虚拟机将Obj2的地址减去pObj的地址和pObj占用的空间的大小,即,0x0059-0x0023-0x10,得到的差值为0x26字节,Java卡虚拟机将空闲空间变量的取值设置为0x26字节。
步骤207,Java卡虚拟机根据空闲空间变量的取值,将当前对象前移,更新当前对象在对象表中的引用值。
具体地,具体地,Java卡虚拟机将当前对象前移的空间大小为空闲空间变量的取值,Java卡虚拟机可以将对象表中记录的当前对象的引用值更新为当前对象前移后的偏移地址。
例如,空闲空间变量的取值为0x125字节,当前对象pObj的地址为“0x1529”时,Java卡虚拟机将当前对象pObj前移0x125个字节,前移后的当前对象pObj的地址为“0x1404”,Java卡虚拟机将对象表中记录的当前对象pObj的引用值更新为“0x1404”。
步骤208,Java卡虚拟机将当前对象的地址与当前对象占用的空间的大小相加,将得到的结果作为地址,创建对应的寄生对象,将该寄生对象的地址作为对象堆中的第一个寄生对象的地址保存到系统信息中。
具体地,Java卡虚拟机获取当前对象的地址与当前对象占用的空间的大小相加得到的结果,从该结果开始创建对应的寄生对象,将上述寄生对象的类型字节的取值设置为第一预设值,将上述寄生对象的地址字节的取值设置为空,将上述寄生对象的容量字节的取值设置为对象堆的尾地址与上述结果之间的差值。
例如,当前对象pObj的地址为“0x1404”,占用的空间的大小为0x20个字节,对象堆的尾地址为“0x1599”时,Java卡虚拟机将当前对象的地址与当前对象占用的空间的大小相加,即,0x1404+0x20,得到的结果为“0x1424”;Java卡虚拟机将对象堆的尾地址减去上述结果,即,0x1599-0x1424,得到的差值为0x175字节。Java卡虚拟机将“0x1424”作为地址创建寄生对象,将该寄生对象的类型字节的取值设置为第一预设值“0x01”,将该寄生对象的地址字节的取值设置为“0x0000”,将该寄生对象的容量字节的取值设置为“0x175”,则上述寄生对象为“01 0000 0175”。
基于本发明的技术方案,当需要在对象堆中删除非寄生对象时,Java卡虚拟机执行的操作,如图10所示,包括以下步骤:
步骤301,Java卡虚拟机将待删除对象从对象表中删除。
具体地,Java卡虚拟机可以将待删除对象的引用值从对象表中删除,该引用值可以为待删除对象的偏移地址。
步骤302,Java卡虚拟机判断对象堆中是否存在位于待删除对象之前的寄生对象,如果是,则将待删除对象的前一个寄生对象作为当前寄生对象,并执行步骤309;否则,执行步骤303。
具体地,Java卡虚拟机可以从系统信息中获取对象堆中的第一个寄生对象的地址,判断对象堆中的第一个寄生对象的地址是否为空,如果为空,则确定对象堆中不存在位于待删除对象之前的寄生对象;如果不为空,则判断待删除对象的地址是否小于对象堆中的第一个寄生对象的地址,如果是,则确定对象堆中不存在位于待删除对象之前的寄生对象;否则,确定对象堆中存在位于待删除对象之前的寄生对象。本实施例中,对象堆是从低地址向高地址使用的,待删除对象的前一个寄生对象是指对象堆中地址比待删除对象的地址小,且地址差值最小的寄生对象。
例如,当待删除对象的地址为“0x2157”时,如果系统信息中存储的对象堆中的第一个寄生对象的地址为“0x0000”或“0x2177”,则Java卡虚拟机确定对象堆中不存在位于待删除对象之前的寄生对象;如果系统信息中存储的对象堆中的第一个寄生对象的地址为“0x2146”,则Java卡虚拟机判断出对象堆中的第一个寄生对象的地址小于待删除对象的地址,进而确定对象堆中存在位于待删除对象之前的寄生对象。
步骤303,Java卡虚拟机从待删除对象的地址开始,创建第三寄生对象。
具体地,Java卡虚拟机可以将第三寄生对象的类型字节的取值设置为第一预设值,将第三寄生对象的容量字节的取值设置为待删除对象所占用的空间的大小,将第三寄生对象的地址字节的取值设置为空。
例如,当第一预设值为“01”,待删除对象的地址为“0x2157”,占用的空间的大小为0x20个字节时,Java卡虚拟机从地址“0x2157”开始,创建的第三寄生对象为“01 0000 0020”。
步骤304,Java卡虚拟机判断对象堆中是否存在位于第三寄生对象之后的寄生对象,如果是,则执行步骤305;否则,执行步骤308。
具体地,Java卡虚拟机可以从系统信息中读取对象堆中的第一个寄生对象的地址,判断对象堆中的第一个寄生对象的地址是否为空,如果为空,则确定对象堆中不存在位于第三寄生对象之后的寄生对象;如果不为空,则确定对象堆中存在位于第三寄生对象之后的寄生对象。
例如,当系统信息中存储的对象堆中的第一个寄生对象的地址为“0x2177”时,Java卡虚拟机判断对象堆中的第一个寄生对象的地址不为空,进而确定对象堆中存在位于第三寄生对象之后的寄生对象。
步骤305,Java卡虚拟机将根据第三寄生对象的后一个寄生对象的地址,对第三寄生对象进行更新。
具体地,Java卡虚拟机可以从系统信息中读取对象堆中的第一个寄生对象的地址,将对象堆中的第一个寄生对象的地址作为第三寄生对象的后一个寄生对象的地址,将第三寄生对象的地址字节的取值设置为第三寄生对象的后一个寄生对象的地址。
例如,当系统信息中存储的对象堆中的第一个寄生对象的地址为“0x2177”,第三寄生对象为“01 0000 0020”时,Java卡虚拟机从系统信息中读取对象堆中的第一个寄生对象的地址“0x2177”,将第三寄生对象更新为“01 2177 0020”。
步骤306,Java卡虚拟机判断第三寄生对象所标记的空闲空间是否与第三寄生对象的后一个寄生对象物理地址相邻,如果是,则执行步骤307;否则,执行步骤308。
具体地,Java卡虚拟机可以获取第三寄生对象的地址与第三寄生对象所标记的空闲空间的大小相加得到的结果,并判断该结果是否与第三寄生对象的后一个寄生对象的地址相同,如果是,则确定第三寄生对象所标记的空闲空间与第三寄生对象的后一个寄生对象物理地址相邻;否则,确定第三寄生对象所标记的空闲空间与第三寄生对象的后一个寄生对象物理地址不相邻。
例如,当第三寄生对象为“01 2177 0020”,其地址为“0x2157”时,Java卡虚拟机获取第三寄生对象的地址“0x2157”与第三寄生对象所标记的空闲空间的大小“0x20”相加得到的结果,即,0x2157+0x20=0x2177,与第三寄生对象的后一个寄生对象的地址相同,Java卡虚拟机确定第三寄生对象所标记的空闲空间与第三寄生对象的后一个寄生对象物理地址相邻。
步骤307,Java卡虚拟机根据第三寄生对象的后一个寄生对象,对第三寄生对象进行更新,并执行步骤308。
具体地,Java卡虚拟机可以将第三寄生对象的地址字节的取值,更新为第三寄生对象的后一个寄生对象的地址字节的取值,读取第三寄生对象的后一个寄生对象的容量字节,将该容量字节的取值与第三寄生对象的容量字节的取值相加,将得到的结果作为更新后的第三寄生对象的容量字节的取值。
例如,当第三寄生对象为“01 2177 0020”,第三寄生对象的后一个寄生对象为“01 2298 0010”时,Java卡虚拟机可以将第三寄生对象的地址字节的取值,更新为第三寄生对象的后一个寄生对象的地址字节的取值“xx2298”,获取第三寄生对象的后一个寄生对象的容量字节的取值“0x10”与第三寄生对象的容量字节的取值“0x20”相加得到的结果,即,0x10+0x20=0x30,将得到的结果作为更新后的第三寄生对象的容量字节的取值,更新后的第三寄生对象为“01 22980030”。
步骤308,Java卡虚拟机将该第三寄生对象的地址作为对象堆中的第一个寄生对象的地址存储到系统信息中,结束流程。
例如,当第三寄生对象的地址为“0x2157”时,Java卡虚拟机将系统信息中存储的对象堆中的第一个寄生对象的地址更新为“0x2157”。
步骤309,Java卡虚拟机判断当前寄生对象所标记的空闲空间是否与待删除对象物理地址相邻,如果是,则执行步骤310;否则,执行步骤313。
具体地,Java卡虚拟机可以读取当前寄生对象的容量字节的取值,将该取值与当前寄生对象的地址相加,判断得到的结果是否与待删除对象的地址相同,如果相同,则确定当前寄生对象所标记的空闲空间与待删除对象物理地址相邻;否则,确定当前寄生对象所标记的空闲空间与待删除对象物理地址不相邻。
例如,当前寄生对象为“01 2177 0011”,其地址为“0x2146”,待删除对象的地址为“0x2157”时,Java卡虚拟机将当前寄生对象的容量字节的取值“0x11”与当前寄生对象的地址“0x2146”相加,得到“0x2157”,与待删除对象的地址相同,确定当前寄生对象所标记的空闲空间与待删除对象物理地址相邻。
步骤310,Java卡虚拟机根据待删除对象所占用的空间的大小,更新当前寄生对象。
具体地,Java卡虚拟机可以将当前寄生对象的容量字节的取值与待删除对象所占用的空间的大小相加,将得到的结果作为更新后的当前寄生对象的容量字节的取值。
例如,当前寄生对象为“01 2177 0011”,待删除对象所占用的空间的大小为0x20个字节时,Java卡虚拟机将当前寄生对象的容量字节的取值“0x11”与待删除对象所占用的空间的大小相加,得到的结果为“0x31”,更新后的当前寄生对象为“01 2177 0031”。
步骤311,Java卡虚拟机判断当前寄生对象所标记的空闲空间是否与当前寄生对象的后一个寄生对象物理地址相邻,如果是,则执行步骤312;否则,结束流程。
具体地,Java卡虚拟机可以读取当前寄生对象的容量字节的取值,将该取值与当前寄生对象的地址相加,判断得到的结果是否与当前寄生对象的后一个寄生对象的地址相同,如果相同,则确定当前寄生对象所标记的空闲空间与当前寄生对象的后一个寄生对象物理地址相邻;否则,确定当前寄生对象所标记的空闲空间与当前寄生对象的后一个寄生对象物理地址不相邻。
例如,当前寄生对象为“01 2177 0031”,其地址为“0x2146”,当前寄生对象的后一个寄生对象的地址为“0x2177”时,Java卡虚拟机将当前寄生对象的容量字节的取值“0x31”与当前寄生对象的地址“0x2146”相加,得到“0x2177”,与当前寄生对象的后一个寄生对象的地址相同,确定当前寄生对象所标记的空闲空间与当前寄生对象的后一个寄生对象物理地址相邻。
步骤312,Java卡虚拟机根据当前寄生对象的后一个寄生对象,更新当前寄生对象,结束流程。
具体地,Java卡虚拟机可以将当前寄生对象的地址字节的取值更新为当前寄生对象的后一个寄生对象的地址字节的取值,将当前寄生对象的容量字节的取值与当前寄生对象的后一个寄生对象的容量字节的取值相加,将得到的结果作为更新后的当前寄生对象的容量字节的取值。
例如,当前寄生对象为“01 2177 0031”,当前寄生对象的后一个寄生对象为“01 2298 0010”时,Java卡虚拟机将当前寄生对象的地址字节的取值更新为当前寄生对象的后一个寄生对象的地址字节的取值“0x2298”,将当前寄生对象的容量字节的取值“0x31”与当前寄生对象的后一个寄生对象的容量字节的取值“0x10”相加,将得到的结果作为更新后的当前寄生对象的容量字节的取值,更新后的当前寄生对象为“01 2298 0041”。
步骤313,Java卡虚拟机从待删除对象的地址开始,创建第四寄生对象。
具体地,Java卡虚拟机可以将第四寄生对象的容量字节的取值设置为待删除对象所占用的空间的大小,将第四寄生对象的类型字节的取值设置为第一预设值,将第四寄生对象的地址字节设置为空。
例如,当第一预设值为“0x01”,待删除对象所占用的空间的大小为0x20个字节,其地址为“0x2157”时,Java卡虚拟机在地址“0x2157”上创建第四寄生对象“01 0000 0020”。
步骤314,Java卡虚拟机判断对象堆中是否存在位于第四寄生对象之后的寄生对象,如果是,则执行步骤316;否则,执行步骤315。
具体地,Java卡虚拟机可以读取当前寄生对象的地址字节,判断该地址字节的取值是否为空,如果是,则确定对象堆中不存在位于第四寄生对象之后的寄生对象;否则,确定对象堆中存在位于第四寄生对象之后的寄生对象。
例如,当前寄生对象为“01 2177 0011”时,Java卡虚拟机读取当前寄生对象的地址字节“xx2177”,判断出该地址字节的取值不为空,进而确定对象堆中存在位于第四寄生对象之后的寄生对象;当前寄生对象为“01 0000 0011”时,Java卡虚拟机读取当前寄生对象的地址字节“0x0000”,判断出该地址字节的取值为空,进而确定对象堆中不存在位于第四寄生对象之后的寄生对象。
步骤315,Java卡虚拟机根据第四寄生对象的地址更新当前寄生对象,结束流程。
具体地,Java卡虚拟机可以将当前寄生对象的地址字节的取值,更新为第四寄生对象的地址。
例如,当第四寄生对象的地址为“0x2157”,当前寄生对象为“01 0000 0011”时,Java卡虚拟机将当前寄生对象更新为“01 2157 0011”。
步骤316,Java卡虚拟机根据第四寄生对象的后一个寄生对象的地址,对第四寄生对象进行更新,并根据第四寄生对象的地址更新当前寄生对象。
具体地,Java卡虚拟机可以读取当前寄生对象的地址字节,将第四寄生对象的地址字节的取值更新为当前寄生对象的地址字节的取值,并将当前寄生对象的地址字节的取值更新为第四寄生对象的地址。
例如,当第四寄生对象为“01 0000 0020”,其地址为“0x2157”,当前寄生对象为“01 2177 0011”时,Java卡虚拟机将第四寄生对象更新为“01 2177 0020”,将当前寄生对象为“01 2157 0011”。
步骤317,Java卡虚拟机判断第四寄生对象所标记的空闲空间是否与第四寄生对象的后一个寄生对象物理地址相邻,如果是,则执行步骤318;否则,结束流程。
具体地,Java卡虚拟机可以读取第四寄生对象的容量字节的取值,将该取值与第四寄生对象的地址相加,并判断得到的结果是否与第四寄生对象的地址字节的取值相同,如果是,则确定第四寄生对象所标记的空闲空间与第四寄生对象的后一个寄生对象物理地址相邻;否则,确定第四寄生对象所标记的空闲空间与第四寄生对象的后一个寄生对象物理地址不相邻。
例如,当第四寄生对象为“01 2177 0020”,其地址为“0x2157”时,Java卡虚拟机将第四寄生对象的容量字节的取值“0x20”与第四寄生对象的地址“0x2157”相加,得到“0x2177”,与第四寄生对象的地址字节的取值相同,确定第四寄生对象所标记的空闲空间与第四寄生对象的后一个寄生对象物理地址相邻。
步骤318,Java卡虚拟机根据第四寄生对象的后一个寄生对象,对第四寄生对象进行更新,结束流程。
具体地,Java卡虚拟机可以将第四寄生对象的地址字节的取值,更新为第四寄生对象的后一个寄生对象的地址字节的取值,读取第四寄生对象的后一个寄生对象的容量字节,将该容量字节的取值与第四寄生对象的容量字节的取值相加,将得到的结果作为更新后的第四寄生对象的容量字节的取值。
例如,第四寄生对象为“01 2177 0020”,第四寄生对象的后一个寄生对象为“01 2298 0010”时,Java卡虚拟机将第四寄生对象的地址字节的取值更新为第四寄生对象的后一个寄生对象的地址字节的取值“0x2298”,将第四寄生对象的容量字节的取值“0x20”与第四寄生对象的后一个寄生对象的容量字节的取值“0x10”相加,将得到的结果作为更新后的第四寄生对象的容量字节的取值,更新后的第四寄生对象为“01 2298 0030”。
本发明实施例的技术方案中,Java卡虚拟机通过使用寄生对象标记对象堆中的空闲空间,并根据寄生对象在对象堆中为待创建对象申请空间,能够有效地管理对象堆中的空闲空间,提高对象堆的空间利用率;Java卡虚拟机在执行完删包或删应用操作后,以及在检测到java卡应用程序调用与垃圾回收对应的预设API后,仅需要执行一个空操作,而不再需要通过移动对象堆中的已创建对象进行垃圾回收,减少了对已创建对象的移动次数以及移动对象带来的时间消耗,提高了Java卡虚拟机的工作效率,并在一定程度上达到磨损平衡。
本发明实施例还提供了一种使用寄生对象管理对象堆的装置,寄生对象用于标记对象堆中的空闲空间,包括地址字节和容量字节,地址字节用于表示寄生对象的后一个寄生对象的地址,容量字节用于表示寄生对象所标记的空闲空间的大小,系统信息中存储有对象堆中的第一个寄生对象的地址。
上述装置的结构,如图11至图14所示,包括:
第一读取模块410,用于在需要在对象堆中创建非寄生对象时,读取对象堆中的第一个寄生对象,将第一个寄生对象作为当前寄生对象,并触发第一判断模块420;
第一判断模块420,用于判断当前寄生对象所标记的空闲空间是否小于待创建对象所占用的空间,并在判断出当前寄生对象所标记的空闲空间小于待创建对象所占用的空间时,触发第二判断模块430;
第二判断模块430,用于判断对象堆中是否存在当前寄生对象的后一个寄生对象,并在判断出对象堆中不存在当前寄生对象的后一个寄生对象时,触发合并模块450;
第一更新模块440,用于在第二判断模块430判断出对象堆中存在当前寄生对象的后一个寄生对象时,将当前寄生对象的后一个寄生对象,作为更新后的当前寄生对象,并触发第二判断模块430;
合并模块450,用于将对象堆中的所有空闲空间进行合并,根据合并后的空闲空间创建对应的寄生对象;
其中,上述合并模块450,如图12所示包括:
第一获取子模块451,用于将对象堆中的第一个非寄生对象作为当前对象,获取当前对象的地址减去对象堆的首地址得到的差值,将空闲空间变量初始化为差值,并触发第七判断子模块452;
第七判断子模块452,用于判断当前对象的地址是否小于对象堆中最后一个非寄生对象的地址;
第八判断子模块453,用于在第七判断子模块452判断出当前对象的地址小于对象堆中最后一个非寄生对象的地址时,判断空闲空间变量的取值是否为零,并在判断出空闲空间变量的取值为零时,触发第二获取子模块455;
第三更新子模块454,用于在第八判断子模块453判断出空闲空间变量的取值不为零时,根据空闲空间变量的取值,将当前对象前移,更新当前对象在对象表中的引用值,并触发第二获取子模块455;
第二获取子模块455,用于获取当前对象的后一个非寄生对象的地址减去当前对象的地址和当前对象占用的空间的大小得到的差值,将空闲空间变量更新为差值,将当前对象的后一个非寄生对象作为更新后的当前对象,并触发第七判断子模块452;
第三处理子模块456,用于在第七判断子模块452判断出当前对象的地址不小于对象堆中最后一个非寄生对象的地址时,根据空闲空间变量的取值,将当前对象前移,更新当前对象在对象表中的引用值;将当前对象的地址与当前对象占用的空间的大小相加,将得到的结果作为地址,创建对应的寄生对象。
第三判断模块460,用于判断合并模块450合并后的空闲空间是否小于待创建对象所占用的空间,并在判断出合并后的空闲空间小于待创建对象所占用的空间时,触发第一处理模块480;
保存模块470,用于在第三判断模块460判断出合并后的空闲空间小于待创建对象所占用的空间时,将创建的寄生对象的地址作为对象堆中的第一个寄生对象的地址保存到系统信息中;
第一处理模块480,用于读取当前寄生对象的地址字节,将读取到的结果作为对象堆中的第一个寄生对象的地址保存到系统信息中;从当前寄生对象的地址开始,为待创建对象申请空间,获取申请空间后的剩余空间;
第四判断模块490,用于判断第一处理模块480获取的剩余空间是否大于寄生对象所占用的空间;
第一创建模块500,用于在第四判断模块490判断出剩余空间大于寄生对象所占用的空间时,从剩余空间的首地址开始,创建第一寄生对象,将第一寄生对象的地址作为对象堆中的第一个寄生对象的地址保存到系统信息中;
第二处理模块510,用于在第一判断模块420判断出当前寄生对象所标记的空闲空间不小于待创建对象所占用的空间时,从当前寄生对象的地址开始,为待创建对象申请空间,并对当前寄生对象的前一个寄生对象,和/或系统信息中存储的对象堆中的第一个寄生对象的地址进行更新。
其中,上述第二处理模块510,如图13所示包括:
第一判断子模块511,用于在第一判断模块420判断出当前寄生对象所标记的空闲空间不小于待创建对象所占用的空间时,判断当前寄生对象是否为对象堆中的第一个寄生对象,并在判断出当前寄生对象为对象堆中的第一个寄生对象时,触发第一处理模块480;
第一处理子模块512,用于在第一判断子模块511判断出当前寄生对象不是对象堆中的第一个寄生对象时,将当前寄生对象的前一个寄生对象的地址字节的取值,更新为当前寄生对象的地址字节的取值;从当前寄生对象的地址开始,为待创建对象申请空间,获取申请空间后的剩余空间;
第二判断子模块513,用于判断第一处理子模块512获取的剩余空间是否大于寄生对象所占用的空间;
第一创建子模块514,用于在第二判断子模块513判断第一处理子模块512获取的剩余空间大于寄生对象所占用的空间时,从剩余空间的首地址开始,创建第二寄生对象,将第二寄生对象的前一个寄生对象的地址字节的取值更新为第二寄生对象的地址。
进一步地,上述装置,还包括:
获取模块520,用于从系统信息中获取对象堆中的第一个寄生对象的地址;
第五判断模块530,用于判断获取模块520获取到的地址是否为空,如果是,则触发合并模块450;否则,触发第一读取模块410。
删除模块540,用于将待删除对象从对象表中删除;
第二更新模块550,用于根据待删除对象的地址和待删除对象所占用的空间的大小,对待删除对象的前一个寄生对象和/或后一个寄生对象进行更新。
其中,上述第二更新模块550如图14所示包括:
第三判断子模块551,用于判断对象堆中是否存在位于待删除对象之前的寄生对象;
具体地,上述第三判断子模块551,具体用于从系统信息中获取对象堆中的第一个寄生对象的地址,判断对象堆中的第一个寄生对象的地址是否为空,如果为空,则确定对象堆中不存在位于待删除对象之前的寄生对象;如果不为空,则判断待删除对象的地址是否小于对象堆中的第一个寄生对象的地址,如果是,则确定对象堆中不存在位于待删除对象之前的寄生对象;否则,确定对象堆中存在位于待删除对象之前的寄生对象;
第二创建子模块552,用于在第三判断子模块551判断出对象堆中不存在位于待删除对象之前的寄生对象时,从待删除对象的地址开始,创建第三寄生对象,并触发第四判断子模块553;
第四判断子模块553,用于判断对象堆中是否存在位于第三寄生对象之后的寄生对象;
具体地,上述第四判断子模块553,具体用于从系统信息中获取对象堆中的第一个寄生对象的地址,判断对象堆中的第一个寄生对象的地址是否为空,如果为空,则确定对象堆中不存在位于第三寄生对象之后的寄生对象;如果不为空,则确定对象堆中存在位于第三寄生对象之后的寄生对象;
第二处理子模块554,用于在第四判断子模块553判断出对象堆中存在位于第三寄生对象之后的寄生对象时,根据第三寄生对象的后一个寄生对象,对第三寄生对象进行更新,并将第三寄生对象的地址作为对象堆中的第一个寄生对象的地址存储到系统信息中;
具体地,上述第二创建子模块552,具体用于在第三判断子模块551判断出对象堆中不存在位于待删除对象之前的寄生对象时,将待删除对象的地址作为第三寄生对象的地址,将第三寄生对象的容量字节的取值设置为待删除对象所占用的空间的大小,将第三寄生对象的地址字节的取值设置为空,并触发第四判断子模块553;
相应地,上述第二处理子模块554,具体用于在第四判断子模块553判断出对象堆中存在位于第三寄生对象之后的寄生对象时,判断第三寄生对象所标记的空闲空间是否与第三寄生对象的后一个寄生对象物理地址相邻;
如果是,则将第三寄生对象的地址字节的取值,更新为第三寄生对象的后一个寄生对象的地址字节的取值;将第三寄生对象的后一个寄生对象的容量字节的取值与第三寄生对象的容量字节的取值相加,将得到的结果作为更新后的第三寄生对象的容量字节的取值,并将第三寄生对象的地址作为对象堆中的第一个寄生对象的地址存储到系统信息中;
否则,将第三寄生对象的地址字节的取值,更新为第三寄生对象的后一个寄生对象的地址,将第三寄生对象的地址作为对象堆中的第一个寄生对象的地址存储到系统信息中。
具体地,上述第二处理子模块554,具体用于在第四判断子模块553判断出对象堆中存在位于第三寄生对象之后的寄生对象时,获取第三寄生对象的地址与第三寄生对象的容量字节的取值相加得到的结果,判断结果是否与第三寄生对象的后一个寄生对象的地址相同;
如果是,则确定第三寄生对象所标记的空闲空间与第三寄生对象的后一个寄生对象物理地址相邻,将第三寄生对象的地址字节的取值,更新为第三寄生对象的后一个寄生对象的地址字节的取值;将第三寄生对象的后一个寄生对象的容量字节的取值与第三寄生对象的容量字节的取值相加,将得到的结果作为更新后的第三寄生对象的容量字节的取值,并将第三寄生对象的地址作为对象堆中的第一个寄生对象的地址存储到系统信息中;
否则,确定第三寄生对象所标记的空闲空间与第三寄生对象的后一个寄生对象物理地址不相邻,将第三寄生对象的地址字节的取值,更新为第三寄生对象的后一个寄生对象的地址,将第三寄生对象的地址作为对象堆中的第一个寄生对象的地址存储到系统信息中。
保存子模块555,用于在第四判断子模块553判断出对象堆中存在位于第三寄生对象之后的寄生对象时,将第三寄生对象的地址作为对象堆中的第一个寄生对象的地址存储到系统信息中;
第五判断子模块556,用于在第三判断子模块551判断出对象堆中存在位于待删除对象之前的寄生对象时,判断待删除对象的前一个寄生对象所标记的空闲空间是否与待删除对象物理地址相邻;
具体地,上述第五判断子模块556,具体用于在第三判断子模块551判断出对象堆中存在位于待删除对象之前的寄生对象时,将待删除对象的前一个寄生对象的容量字节的取值与前一个寄生对象的地址相加,判断得到的结果是否与待删除对象的地址相同,如果相同,则确定待删除对象的前一个寄生对象所标记的空闲空间与待删除对象物理地址相邻;否则,确定待删除对象的前一个寄生对象所标记的空闲空间与待删除对象物理地址不相邻。
第一更新子模块557,用于在第五判断子模块556判断出待删除对象的前一个寄生对象所标记的空闲空间与待删除对象物理地址相邻时,根据待删除对象更新待删除对象的前一个寄生对象;
具体地,上述第一更新子模块557,具体用于在第五判断子模块判断出待删除对象的前一个寄生对象所标记的空闲空间与待删除对象物理地址相邻时,执行以下操作:
C1、判断对象堆中是否存在位于待删除对象之后的寄生对象,如果是,则执行步骤C2;否则,执行步骤C5;
C2、判断待删除对象的后一个寄生对象所标记的空闲空间是否与待删除对象物理地址相邻,如果是,则执行步骤C3;否则,执行步骤C4;
C3、将待删除对象的后一个寄生对象的容量字节的取值、待删除对象的前一个寄生对象的容量字节的取值以及待删除对象所占用的空间的大小相加,将待删除对象的前一个寄生对象的容量字节的取值更新为上述相加得到的结果,将待删除对象的前一个寄生对象的地址字节的取值,更新为待删除对象的后一个寄生对象的地址字节的取值;
C4、将待删除对象的前一个寄生对象的容量字节的取值和待删除对象所占用的空间的大小相加,将待删除对象的前一个寄生对象的容量字节的取值更新为上述相加得到的结果,将待删除对象的前一个寄生对象的地址字节的取值,更新为待删除对象的后一个寄生对象的地址;
C4、将待删除对象的前一个寄生对象的容量字节的取值和待删除对象所占用的空间的大小相加,将待删除对象的前一个寄生对象的容量字节的取值更新为上述相加得到的结果。
其中,上述第一更新子模块557判断对象堆中是否存在位于待删除对象之后的寄生对象,具体为:
第一更新子模块577判断待删除对象的前一个寄生对象的地址字节的取值是否为空,如果是,则确定对象堆中不存在位于待删除对象之后的寄生对象;否则,确定对象堆中存在位于待删除对象之后的寄生对象。
上述第一更新子模块557判断待删除对象的后一个寄生对象所标记的空闲空间是否与待删除对象物理地址相邻,具体为:
第一更新子模块557将待删除对象的地址与待删除对象所占用的空间的大小相加,判断得到的结果是否与待删除对象的地址的后一个寄生对象相同,如果相同,则确定待删除对象的后一个寄生对象所标记的空闲空间与待删除对象物理地址相邻;否则,确定待删除对象的后一个寄生对象所标记的空闲空间与待删除对象物理地址不相邻。
第三创建子模块558,用于在第五判断子模块556判断出待删除对象的前一个寄生对象所标记的空闲空间与待删除对象物理地址不相邻时,从待删除对象的地址开始,创建第四寄生对象,将第四寄生对象的前一个寄生对象的地址字节的取值,更新为第四寄生对象的地址;
具体地,上述第三创建子模块558,具体用于在第五判断子模块556判断出待删除对象的前一个寄生对象所标记的空闲空间与待删除对象物理地址不相邻时,将待删除对象的地址作为第四寄生对象的地址,将第四寄生对象的容量字节的取值设置为待删除对象所占用的空间的大小,将第四寄生对象的地址字节设置为空,将第四寄生对象的前一个寄生对象的地址字节的取值,更新为第四寄生对象的地址;
第六判断子模块559,用于判断对象堆中是否存在位于第三创建子模块558创建的第四寄生对象之后的寄生对象;
具体地,上述第六判断子模块559,具体用于判断待删除对象的前一个寄生对象的地址字节的取值是否为空,如果是,则确定对象堆中不存在位于第四寄生对象之后的寄生对象;否则,确定对象堆中存在位于第四寄生对象之后的寄生对象;
第二更新子模块560,用于在第六判断子模块559判断出对象堆中存在位于第三创建子模块创建的第四寄生对象之后的寄生对象时,根据第四寄生对象的后一个寄生对象,更新第四寄生对象。
具体地,上述第二更新子模块560,具体用于在第六判断子模块559判断出对象堆中存在位于第三创建子模块558创建的第四寄生对象之后的寄生对象时,判断第四寄生对象所标记的空闲空间是否与第四寄生对象的后一个寄生对象物理地址相邻;
如果是,则将第四寄生对象的后一个寄生对象的容量字节的取值与第四寄生对象的容量字节的取值相加,将第四寄生对象的容量字节的取值更新为上述相加得到的结果,将第四寄生对象的地址字节的取值更新为第四寄生对象的后一个寄生对象的地址字节的取值;
否则,将第四寄生对象的地址字节的取值更新为第四寄生对象的后一个寄生对象的地址字节的取值。
本实施例中,上述第二更新子模块560,具体用于在第六判断子模块559判断出对象堆中存在位于第三创建子模块558创建的第四寄生对象之后的寄生对象时,获取第四寄生对象的地址与第四寄生对象的容量字节的取值相加得到的结果,判断结果是否与第四寄生对象的后一个寄生对象的地址相同;
如果是,则确定第四寄生对象所标记的空闲空间与第四寄生对象的后一个寄生对象物理地址相邻,将第四寄生对象的后一个寄生对象的容量字节的取值与第四寄生对象的容量字节的取值相加,将第四寄生对象的容量字节的取值更新为上述相加得到的结果,将第四寄生对象的地址字节的取值更新为第四寄生对象的后一个寄生对象的地址字节的取值;
否则,确定第四寄生对象所标记的空闲空间与第四寄生对象的后一个寄生对象物理地址不相邻,将第四寄生对象的地址字节的取值更新为第四寄生对象的后一个寄生对象的地址字节的取值。
本发明实施例通过使用寄生对象标记对象堆中的空闲空间,并根据寄生对象在对象堆中为待创建对象申请空间,能够有效地管理对象堆中的空闲空间,提高对象堆的空间利用率;在执行完删包或删应用操作后,以及在检测到java卡应用程序调用与垃圾回收对应的预设API后,仅需要执行一个空操作,而不再需要通过移动对象堆中的已创建对象进行垃圾回收,减少了对已创建对象的移动次数以及移动对象带来的时间消耗,提高了Java卡虚拟机的工作效率,并在一定程度上达到磨损平衡。
结合本文中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (28)
1.一种使用寄生对象管理对象堆的方法,其特征在于,所述寄生对象用于标记所述对象堆中的空闲空间,包括地址字节和容量字节,所述地址字节用于表示所述寄生对象的后一个寄生对象的地址,所述容量字节用于表示所述寄生对象所标记的空闲空间的大小,Java卡虚拟机的系统信息中存储有所述对象堆中的第一个寄生对象的地址;
所述Java卡虚拟机需要在所述对象堆中创建非寄生对象时,执行以下操作:
S1、所述Java卡虚拟机读取所述对象堆中的第一个寄生对象,将所述第一个寄生对象作为当前寄生对象;
S2、所述Java卡虚拟机判断当前寄生对象所标记的空闲空间是否小于待创建对象所占用的空间,如果是,则执行步骤S3;否则,执行步骤S10;
S3、所述Java卡虚拟机判断所述对象堆中是否存在当前寄生对象的后一个寄生对象,如果是,则执行步骤S4;否则,执行步骤S5;
S4、所述Java卡虚拟机将当前寄生对象的后一个寄生对象,作为更新后的当前寄生对象,并返回步骤S2;
S5、所述Java卡虚拟机将所述对象堆中的所有空闲空间进行合并,根据合并后的空闲空间创建对应的寄生对象,判断所述合并后的空闲空间是否小于所述待创建对象所占用的空间,如果是,则将创建的寄生对象的地址作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中,结束流程;否则,执行步骤S6;
S6、所述Java卡虚拟机读取当前寄生对象的地址字节,将读取到的结果作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中;
S7、所述Java卡虚拟机从当前寄生对象的地址开始,为所述待创建对象申请空间,获取申请空间后的剩余空间;
S8、所述Java卡虚拟机判断所述剩余空间是否大于寄生对象所占用的空间,如果是,则执行步骤S9;否则,结束流程;
S9、所述Java卡虚拟机从所述剩余空间的首地址开始,创建第一寄生对象,将所述第一寄生对象的地址作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中,结束流程;
S10、所述Java卡虚拟机从当前寄生对象的地址开始,为所述待创建对象申请空间,并对当前寄生对象的前一个寄生对象,和/或所述系统信息中存储的所述对象堆中的第一个寄生对象的地址进行更新。
2.如权利要求1所述的方法,其特征在于,所述步骤S10,具体包括:
A1、所述Java卡虚拟机判断当前寄生对象是否为所述对象堆中的第一个寄生对象,如果是,则返回步骤S6;否则,执行步骤A2;
A2、所述Java卡虚拟机将当前寄生对象的前一个寄生对象的地址字节的取值,更新为当前寄生对象的地址字节的取值;
A3、所述Java卡虚拟机从当前寄生对象的地址开始,为所述待创建对象申请空间,获取申请空间后的剩余空间;
A4、所述Java卡虚拟机判断所述剩余空间是否大于寄生对象所占用的空间,如果是,则执行步骤A5;否则,结束流程;
A5、所述Java卡虚拟机从所述剩余空间的首地址开始,创建第二寄生对象,将所述第二寄生对象的前一个寄生对象的地址字节的取值更新为所述第二寄生对象的地址,结束流程。
3.如权利要求1所述的方法,其特征在于,所述Java卡虚拟机需要从所述对象堆中删除非寄生对象时,执行以下操作:
所述Java卡虚拟机将待删除对象从对象表中删除,根据所述待删除对象的地址和所述待删除对象所占用的空间的大小,对所述待删除对象的前一个寄生对象和/或后一个寄生对象进行更新。
4.如权利要求3所述的方法,其特征在于,所述Java卡虚拟机根据所述待删除对象的地址和所述待删除对象所占用的空间的大小,对所述待删除对象的前一个寄生对象和/或后一个寄生对象进行更新,具体包括:
B1、所述Java卡虚拟机判断所述对象堆中是否存在位于所述待删除对象之前的寄生对象,如果是,则执行步骤B6;否则,执行步骤B2;
B2、所述Java卡虚拟机从所述待删除对象的地址开始,创建第三寄生对象;
B3、所述Java卡虚拟机判断所述对象堆中是否存在位于所述第三寄生对象之后的寄生对象,如果是,则执行步骤B4;否则,执行步骤B5;
B4、所述Java卡虚拟机根据所述第三寄生对象的后一个寄生对象,对所述第三寄生对象进行更新,并将所述第三寄生对象的地址作为所述对象堆中的第一个寄生对象的地址存储到所述系统信息中,结束流程;
B5、所述Java卡虚拟机将所述第三寄生对象的地址作为所述对象堆中的第一个寄生对象的地址存储到所述系统信息中,结束流程;
B6、所述Java卡虚拟机判断所述待删除对象的前一个寄生对象所标记的空闲空间是否与所述待删除对象物理地址相邻,如果是,则执行步骤B7;否则,执行步骤B8;
B7、所述Java卡虚拟机根据所述待删除对象更新所述待删除对象的前一个寄生对象,结束流程;
B8、所述Java卡虚拟机从所述待删除对象的地址开始,创建第四寄生对象,将所述第四寄生对象的前一个寄生对象的地址字节的取值,更新为所述第四寄生对象的地址,并判断所述对象堆中是否存在位于所述第四寄生对象之后的寄生对象,如果是,则执行步骤B9;否则,结束流程;
B9、所述Java卡虚拟机根据所述第四寄生对象的后一个寄生对象,更新所述第四寄生对象,结束流程。
5.如权利要求4所述的方法,其特征在于,所述Java卡虚拟机判断所述待删除对象的前一个寄生对象所标记的空闲空间是否与所述待删除对象物理地址相邻,具体为:
所述Java卡虚拟机将所述待删除对象的前一个寄生对象的容量字节的取值与所述前一个寄生对象的地址相加,判断得到的结果是否与所述待删除对象的地址相同,如果相同,则确定所述待删除对象的前一个寄生对象所标记的空闲空间与所述待删除对象物理地址相邻;否则,确定所述待删除对象的前一个寄生对象所标记的空闲空间与所述待删除对象物理地址不相邻。
6.如权利要求4所述的方法,其特征在于,所述步骤B2,具体为:
所述Java卡虚拟机将所述待删除对象的地址作为所述第三寄生对象的地址,将所述第三寄生对象的容量字节的取值设置为所述待删除对象所占用的空间的大小,将所述第三寄生对象的地址字节的取值设置为空;
所述步骤B4中,所述Java卡虚拟机根据所述第三寄生对象的后一个寄生对象,对所述第三寄生对象进行更新,具体包括:
所述Java卡虚拟机判断所述第三寄生对象所标记的空闲空间是否与所述第三寄生对象的后一个寄生对象物理地址相邻;
如果是,所述Java卡虚拟机将所述第三寄生对象的地址字节的取值,更新为所述第三寄生对象的后一个寄生对象的地址字节的取值;将所述第三寄生对象的后一个寄生对象的容量字节的取值与所述第三寄生对象的容量字节的取值相加,将得到的结果作为更新后的第三寄生对象的容量字节的取值;
否则,所述Java卡虚拟机将所述第三寄生对象的地址字节的取值,更新为所述第三寄生对象的后一个寄生对象的地址。
7.如权利要求6所述的方法,其特征在于,所述Java卡虚拟机判断所述第三寄生对象所标记的空闲空间是否与所述第三寄生对象的后一个寄生对象物理地址相邻,具体为:
所述Java卡虚拟机获取所述第三寄生对象的地址与所述第三寄生对象的容量字节的取值相加得到的结果,判断所述结果是否与所述第三寄生对象的后一个寄生对象的地址相同,如果是,则确定所述第三寄生对象所标记的空闲空间与所述第三寄生对象的后一个寄生对象物理地址相邻;否则,确定所述第三寄生对象所标记的空闲空间与所述第三寄生对象的后一个寄生对象物理地址不相邻。
8.如权利要求4所述的方法,其特征在于,所述步骤B7中,所述Java卡虚拟机根据所述待删除对象更新所述待删除对象的前一个寄生对象,具体包括:
C1、所述Java卡虚拟机判断所述对象堆中是否存在位于所述待删除对象之后的寄生对象,如果是,则执行步骤C2;否则,执行步骤C5;
C2、所述Java卡虚拟机判断所述待删除对象的后一个寄生对象所标记的空闲空间是否与所述待删除对象物理地址相邻,如果是,则执行步骤C3;否则,执行步骤C4;
C3、所述Java卡虚拟机将所述待删除对象的后一个寄生对象的容量字节的取值、所述待删除对象的前一个寄生对象的容量字节的取值以及所述待删除对象所占用的空间的大小相加,得到第一相加结果,将所述待删除对象的前一个寄生对象的容量字节的取值更新为所述第一相加结果,将所述待删除对象的前一个寄生对象的地址字节的取值,更新为所述待删除对象的后一个寄生对象的地址字节的取值;
C4、所述Java卡虚拟机将所述待删除对象的前一个寄生对象的容量字节的取值和所述待删除对象所占用的空间的大小相加,得到第二相加结果,将所述待删除对象的前一个寄生对象的容量字节的取值更新为所述第二相加结果,将所述待删除对象的前一个寄生对象的地址字节的取值,更新为所述待删除对象的后一个寄生对象的地址;
C5、所述Java卡虚拟机将所述待删除对象的前一个寄生对象的容量字节的取值和所述待删除对象所占用的空间的大小相加,得到第三相加结果,将所述待删除对象的前一个寄生对象的容量字节的取值更新为所述第三相加结果。
9.如权利要求8所述的方法,其特征在于,所述步骤B1中,所述Java卡虚拟机判断所述对象堆中是否存在位于所述待删除对象之前的寄生对象,具体为:
所述Java卡虚拟机从所述系统信息中获取所述对象堆中的第一个寄生对象的地址,判断所述对象堆中的第一个寄生对象的地址是否为空,如果为空,则确定所述对象堆中不存在位于所述待删除对象之前的寄生对象;如果不为空,则判断所述待删除对象的地址是否小于所述对象堆中的第一个寄生对象的地址,如果是,则确定所述对象堆中不存在位于所述待删除对象之前的寄生对象;否则,确定所述对象堆中存在位于所述待删除对象之前的寄生对象;
所述步骤B3中,所述Java卡虚拟机判断所述对象堆中是否存在位于所述第三寄生对象之后的寄生对象,具体为:
所述Java卡虚拟机从所述系统信息中获取所述对象堆中的第一个寄生对象的地址,判断所述对象堆中的第一个寄生对象的地址是否为空,如果为空,则确定所述对象堆中不存在位于所述第三寄生对象之后的寄生对象;如果不为空,则确定所述对象堆中存在位于所述第三寄生对象之后的寄生对象;
所述步骤B8中,所述Java卡虚拟机判断所述对象堆中是否存在位于所述第四寄生对象之后的寄生对象,具体为:
所述Java卡虚拟机判断所述待删除对象的前一个寄生对象的地址字节的取值是否为空,如果是,则确定所述对象堆中不存在位于所述第四寄生对象之后的寄生对象;否则,确定所述对象堆中存在位于所述第四寄生对象之后的寄生对象;
所述步骤C1中,所述Java卡虚拟机判断所述对象堆中是否存在位于所述待删除对象之后的寄生对象,具体为:
所述Java卡虚拟机判断所述待删除对象的前一个寄生对象的地址字节的取值是否为空,如果是,则确定所述对象堆中不存在位于所述待删除对象之后的寄生对象;否则,确定所述对象堆中存在位于所述待删除对象之后的寄生对象。
10.如权利要求8所述的方法,其特征在于,所述步骤C2中,所述Java卡虚拟机判断所述待删除对象的后一个寄生对象所标记的空闲空间是否与所述待删除对象物理地址相邻,具体为:
所述Java卡虚拟机将所述待删除对象的地址与所述待删除对象所占用的空间的大小相加,判断得到的结果是否与所述待删除对象的地址的后一个寄生对象相同,如果相同,则确定所述待删除对象的后一个寄生对象所标记的空闲空间与所述待删除对象物理地址相邻;否则,确定所述待删除对象的后一个寄生对象所标记的空闲空间与所述待删除对象物理地址不相邻。
11.如权利要求4所述的方法,其特征在于,所述步骤B8中,所述Java卡虚拟机从所述待删除对象的地址开始,创建第四寄生对象,具体为:
所述Java卡虚拟机将所述待删除对象的地址作为所述第四寄生对象的地址,将所述第四寄生对象的容量字节的取值设置为所述待删除对象所占用的空间的大小,将所述第四寄生对象的地址字节设置为空;
所述步骤B9中,所述Java卡虚拟机根据所述第四寄生对象的后一个寄生对象,更新所述第四寄生对象,具体包括:
所述Java卡虚拟机判断所述第四寄生对象所标记的空闲空间是否与所述第四寄生对象的后一个寄生对象物理地址相邻;
如果是,所述Java卡虚拟机将所述第四寄生对象的后一个寄生对象的容量字节的取值与所述第四寄生对象的容量字节的取值相加,将所述第四寄生对象的容量字节的取值更新为上述相加得到的结果,将所述第四寄生对象的地址字节的取值更新为所述第四寄生对象的后一个寄生对象的地址字节的取值;
否则,所述Java卡虚拟机将所述第四寄生对象的地址字节的取值更新为所述第四寄生对象的后一个寄生对象的地址字节的取值。
12.如权利要求11所述的方法,其特征在于,所述Java卡虚拟机判断所述第四寄生对象所标记的空闲空间是否与所述第四寄生对象的后一个寄生对象物理地址相邻,具体为:
所述Java卡虚拟机获取所述第四寄生对象的地址与所述第四寄生对象的容量字节的取值相加得到的结果,判断所述结果是否与所述第四寄生对象的后一个寄生对象的地址相同,如果是,则确定所述第四寄生对象所标记的空闲空间与所述第四寄生对象的后一个寄生对象物理地址相邻;否则,确定所述第四寄生对象所标记的空闲空间与所述第四寄生对象的后一个寄生对象物理地址不相邻。
13.如权利要求1所述的方法,其特征在于,所述步骤S1之前,还包括:
所述Java卡虚拟机从所述系统信息中获取所述对象堆中的第一个寄生对象的地址,判断所述地址是否为空,如果是,则执行步骤S5;否则,执行步骤S1。
14.如权利要求1所述的方法,其特征在于,所述步骤S5中,所述Java卡虚拟机将所述对象堆中的所有空闲空间进行合并,根据合并后的空闲空间创建对应的寄生对象,具体为:
D1、所述Java卡虚拟机将所述对象堆中的第一个非寄生对象作为当前对象,获取当前对象的地址减去对象堆的首地址得到的差值,将空闲空间变量初始化为所述差值;
D2、所述Java卡虚拟机判断当前对象的地址是否小于所述对象堆中最后一个非寄生对象的地址,如果是,则执行步骤D3;否则,执行步骤D6;
D3、所述Java卡虚拟机判断所述空闲空间变量的取值是否为零,如果是,则执行步骤D5;否则,执行步骤D4;
D4、所述Java卡虚拟机根据所述空闲空间变量的取值,将当前对象前移,更新当前对象在对象表中的引用值,并执行步骤D5;
D5、所述Java卡虚拟机获取当前对象的后一个非寄生对象的地址减去当前对象的地址和当前对象占用的空间的大小得到的差值,将所述空闲空间变量更新为所述差值,将当前对象的后一个非寄生对象作为更新后的当前对象,并返回步骤D2;
D6、所述Java卡虚拟机根据所述空闲空间变量的取值,将当前对象前移,更新当前对象在对象表中的引用值;
D7、所述Java卡虚拟机将当前对象的地址与当前对象占用的空间的大小相加,将得到的结果作为地址,创建对应的寄生对象。
15.一种使用寄生对象管理对象堆的装置,其特征在于,所述寄生对象用于标记所述对象堆中的空闲空间,包括地址字节和容量字节,所述地址字节用于表示所述寄生对象的后一个寄生对象的地址,所述容量字节用于表示所述寄生对象所标记的空闲空间的大小,系统信息中存储有所述对象堆中的第一个寄生对象的地址;
所述装置,包括:
第一读取模块,用于在需要在所述对象堆中创建非寄生对象时,读取所述对象堆中的第一个寄生对象,将所述第一个寄生对象作为当前寄生对象,并触发第一判断模块;
第一判断模块,用于判断当前寄生对象所标记的空闲空间是否小于待创建对象所占用的空间,并在判断出当前寄生对象所标记的空闲空间小于待创建对象所占用的空间时,触发第二判断模块;
第二判断模块,用于在所述第一判断模块判断出当前寄生对象所标记的空闲空间小于待创建对象所占用的空间时,判断所述对象堆中是否存在当前寄生对象的后一个寄生对象,并在判断出所述对象堆中不存在当前寄生对象的后一个寄生对象时,触发合并模块;
第一更新模块,用于在所述第二判断模块判断出所述对象堆中存在当前寄生对象的后一个寄生对象时,将当前寄生对象的后一个寄生对象,作为更新后的当前寄生对象,并触发所述第二判断模块;
合并模块,用于将所述对象堆中的所有空闲空间进行合并,根据合并后的空闲空间创建对应的寄生对象;
第三判断模块,用于判断所述合并模块合并后的空闲空间是否小于所述待创建对象所占用的空间,并在判断出所述合并后的空闲空间小于所述待创建对象所占用的空间时,触发第一处理模块;
保存模块,用于在所述第三判断模块判断出所述合并后的空闲空间小于所述待创建对象所占用的空间时,将创建的寄生对象的地址作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中;
第一处理模块,用于读取当前寄生对象的地址字节,将读取到的结果作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中;从当前寄生对象的地址开始,为所述待创建对象申请空间,获取申请空间后的剩余空间;
第四判断模块,用于判断所述第一处理模块获取的所述剩余空间是否大于寄生对象所占用的空间;
第一创建模块,用于在所述第四判断模块判断出所述剩余空间大于寄生对象所占用的空间时,从所述剩余空间的首地址开始,创建第一寄生对象,将所述第一寄生对象的地址作为所述对象堆中的第一个寄生对象的地址保存到所述系统信息中;
第二处理模块,用于在所述第一判断模块判断出当前寄生对象所标记的空闲空间不小于待创建对象所占用的空间时,从当前寄生对象的地址开始,为所述待创建对象申请空间,并对当前寄生对象的前一个寄生对象,和/或所述系统信息中存储的所述对象堆中的第一个寄生对象的地址进行更新。
16.如权利要求15所述的装置,其特征在于,所述第二处理模块,包括:
第一判断子模块,用于在所述第一判断模块判断出当前寄生对象所标记的空闲空间不小于待创建对象所占用的空间时,判断当前寄生对象是否为所述对象堆中的第一个寄生对象,并在判断出当前寄生对象为所述对象堆中的第一个寄生对象时,触发所述第一处理模块;
第一处理子模块,用于在所述第一判断子模块判断出当前寄生对象不是所述对象堆中的第一个寄生对象时,将当前寄生对象的前一个寄生对象的地址字节的取值,更新为当前寄生对象的地址字节的取值;从当前寄生对象的地址开始,为所述待创建对象申请空间,获取申请空间后的剩余空间;
第二判断子模块,用于判断所述第一处理子模块获取的所述剩余空间是否大于寄生对象所占用的空间;
第一创建子模块,用于在所述第二判断子模块判断所述第一处理子模块获取的所述剩余空间大于寄生对象所占用的空间时,从所述剩余空间的首地址开始,创建第二寄生对象,将所述第二寄生对象的前一个寄生对象的地址字节的取值更新为所述第二寄生对象的地址。
17.如权利要求15所述的装置,其特征在于,还包括:
删除模块,用于将待删除对象从对象表中删除;
第二更新模块,用于根据所述待删除对象的地址和所述待删除对象所占用的空间的大小,对所述待删除对象的前一个寄生对象和/或后一个寄生对象进行更新。
18.如权利要求17所述的装置,其特征在于,所述第二更新模块包括:
第三判断子模块,用于判断所述对象堆中是否存在位于所述待删除对象之前的寄生对象;
第二创建子模块,用于在所述第三判断子模块判断出所述对象堆中不存在位于所述待删除对象之前的寄生对象时,从所述待删除对象的地址开始,创建第三寄生对象,并触发第四判断子模块;
第四判断子模块,用于判断所述对象堆中是否存在位于所述第三寄生对象之后的寄生对象;
第二处理子模块,用于在所述第四判断子模块判断出所述对象堆中存在位于所述第三寄生对象之后的寄生对象时,根据所述第三寄生对象的后一个寄生对象,对所述第三寄生对象进行更新,并将所述第三寄生对象的地址作为所述对象堆中的第一个寄生对象的地址存储到所述系统信息中;
保存子模块,用于在所述第四判断子模块判断出所述对象堆中存在位于所述第三寄生对象之后的寄生对象时,将所述第三寄生对象的地址作为所述对象堆中的第一个寄生对象的地址存储到所述系统信息中;
第五判断子模块,用于在所述第三判断子模块判断出所述对象堆中存在位于所述待删除对象之前的寄生对象时,判断所述待删除对象的前一个寄生对象所标记的空闲空间是否与所述待删除对象物理地址相邻;
第一更新子模块,用于在所述第五判断子模块判断出所述待删除对象的前一个寄生对象所标记的空闲空间与所述待删除对象物理地址相邻时,根据所述待删除对象更新所述待删除对象的前一个寄生对象;
第三创建子模块,用于在所述第五判断子模块判断出所述待删除对象的前一个寄生对象所标记的空闲空间与所述待删除对象物理地址不相邻时,从所述待删除对象的地址开始,创建第四寄生对象,将所述第四寄生对象的前一个寄生对象的地址字节的取值,更新为所述第四寄生对象的地址;
第六判断子模块,用于判断所述对象堆中是否存在位于所述第三创建子模块创建的所述第四寄生对象之后的寄生对象;
第二更新子模块,用于在所述第六判断子模块判断出所述对象堆中存在位于所述第三创建子模块创建的所述第四寄生对象之后的寄生对象时,根据所述第四寄生对象的后一个寄生对象,更新所述第四寄生对象。
19.如权利要求18所述的装置,其特征在于,
所述第五判断子模块,具体用于在所述第三判断子模块判断出所述对象堆中存在位于所述待删除对象之前的寄生对象时,将所述待删除对象的前一个寄生对象的容量字节的取值与所述前一个寄生对象的地址相加,判断得到的结果是否与所述待删除对象的地址相同,如果相同,则确定所述待删除对象的前一个寄生对象所标记的空闲空间与所述待删除对象物理地址相邻;否则,确定所述待删除对象的前一个寄生对象所标记的空闲空间与所述待删除对象物理地址不相邻。
20.如权利要求18所述的装置,其特征在于,
所述第二创建子模块,具体用于在所述第三判断子模块判断出所述对象堆中不存在位于所述待删除对象之前的寄生对象时,将所述待删除对象的地址作为所述第三寄生对象的地址,将所述第三寄生对象的容量字节的取值设置为所述待删除对象所占用的空间的大小,将所述第三寄生对象的地址字节的取值设置为空,并触发第四判断子模块;
所述第二处理子模块,具体用于在所述第四判断子模块判断出所述对象堆中存在位于所述第三寄生对象之后的寄生对象时,判断所述第三寄生对象所标记的空闲空间是否与所述第三寄生对象的后一个寄生对象物理地址相邻;
如果是,则将所述第三寄生对象的地址字节的取值,更新为所述第三寄生对象的后一个寄生对象的地址字节的取值;将所述第三寄生对象的后一个寄生对象的容量字节的取值与所述第三寄生对象的容量字节的取值相加,将得到的结果作为更新后的第三寄生对象的容量字节的取值,并将所述第三寄生对象的地址作为所述对象堆中的第一个寄生对象的地址存储到所述系统信息中;
否则,将所述第三寄生对象的地址字节的取值,更新为所述第三寄生对象的后一个寄生对象的地址,将所述第三寄生对象的地址作为所述对象堆中的第一个寄生对象的地址存储到所述系统信息中。
21.如权利要求20所述的装置,其特征在于,
所述第二处理子模块,具体用于在所述第四判断子模块判断出所述对象堆中存在位于所述第三寄生对象之后的寄生对象时,获取所述第三寄生对象的地址与所述第三寄生对象的容量字节的取值相加得到的结果,判断所述结果是否与所述第三寄生对象的后一个寄生对象的地址相同;
如果是,则确定所述第三寄生对象所标记的空闲空间与所述第三寄生对象的后一个寄生对象物理地址相邻,将所述第三寄生对象的地址字节的取值,更新为所述第三寄生对象的后一个寄生对象的地址字节的取值;将所述第三寄生对象的后一个寄生对象的容量字节的取值与所述第三寄生对象的容量字节的取值相加,将得到的结果作为更新后的第三寄生对象的容量字节的取值,并将所述第三寄生对象的地址作为所述对象堆中的第一个寄生对象的地址存储到所述系统信息中;
否则,确定所述第三寄生对象所标记的空闲空间与所述第三寄生对象的后一个寄生对象物理地址不相邻,将所述第三寄生对象的地址字节的取值,更新为所述第三寄生对象的后一个寄生对象的地址,将所述第三寄生对象的地址作为所述对象堆中的第一个寄生对象的地址存储到所述系统信息中。
22.如权利要求18所述的装置,其特征在于,
所述第一更新子模块,具体用于在所述第五判断子模块判断出所述待删除对象的前一个寄生对象所标记的空闲空间与所述待删除对象物理地址相邻时,执行以下操作:
C1、判断所述对象堆中是否存在位于所述待删除对象之后的寄生对象,如果是,则执行步骤C2;否则,执行步骤C5;
C2、判断所述待删除对象的后一个寄生对象所标记的空闲空间是否与所述待删除对象物理地址相邻,如果是,则执行步骤C3;否则,执行步骤C4;
C3、将所述待删除对象的后一个寄生对象的容量字节的取值、所述待删除对象的前一个寄生对象的容量字节的取值以及所述待删除对象所占用的空间的大小相加,得到第一相加结果,将所述待删除对象的前一个寄生对象的容量字节的取值更新为所述第一相加结果,将所述待删除对象的前一个寄生对象的地址字节的取值,更新为所述待删除对象的后一个寄生对象的地址字节的取值;
C4、将所述待删除对象的前一个寄生对象的容量字节的取值和所述待删除对象所占用的空间的大小相加,得到第二相加结果,将所述待删除对象的前一个寄生对象的容量字节的取值更新为所述第二相加结果,将所述待删除对象的前一个寄生对象的地址字节的取值,更新为所述待删除对象的后一个寄生对象的地址;
C4、将所述待删除对象的前一个寄生对象的容量字节的取值和所述待删除对象所占用的空间的大小相加,得到第三相加结果,将所述待删除对象的前一个寄生对象的容量字节的取值更新为所述第三相加结果。
23.如权利要求22所述的装置,其特征在于,
所述第三判断子模块,具体用于从所述系统信息中获取所述对象堆中的第一个寄生对象的地址,判断所述对象堆中的第一个寄生对象的地址是否为空,如果为空,则确定所述对象堆中不存在位于所述待删除对象之前的寄生对象;如果不为空,则判断所述待删除对象的地址是否小于所述对象堆中的第一个寄生对象的地址,如果是,则确定所述对象堆中不存在位于所述待删除对象之前的寄生对象;否则,确定所述对象堆中存在位于所述待删除对象之前的寄生对象;
所述第四判断子模块,具体用于从所述系统信息中获取所述对象堆中的第一个寄生对象的地址,判断所述对象堆中的第一个寄生对象的地址是否为空,如果为空,则确定所述对象堆中不存在位于所述第三寄生对象之后的寄生对象;如果不为空,则确定所述对象堆中存在位于所述第三寄生对象之后的寄生对象;
所述第六判断子模块,具体用于判断所述待删除对象的前一个寄生对象的地址字节的取值是否为空,如果是,则确定所述对象堆中不存在位于所述第四寄生对象之后的寄生对象;否则,确定所述对象堆中存在位于所述第四寄生对象之后的寄生对象;
所述第一更新子模块判断所述对象堆中是否存在位于所述待删除对象之后的寄生对象,具体为:
所述第一更新子模块判断所述待删除对象的前一个寄生对象的地址字节的取值是否为空,如果是,则确定所述对象堆中不存在位于所述待删除对象之后的寄生对象;否则,确定所述对象堆中存在位于所述待删除对象之后的寄生对象。
24.如权利要求22所述的装置,其特征在于,
所述第一更新子模块判断所述待删除对象的后一个寄生对象所标记的空闲空间是否与所述待删除对象物理地址相邻,具体为:
所述第一更新子模块将所述待删除对象的地址与所述待删除对象所占用的空间的大小相加,判断得到的结果是否与所述待删除对象的地址的后一个寄生对象相同,如果相同,则确定所述待删除对象的后一个寄生对象所标记的空闲空间与所述待删除对象物理地址相邻;否则,确定所述待删除对象的后一个寄生对象所标记的空闲空间与所述待删除对象物理地址不相邻。
25.如权利要求18所述的装置,其特征在于,
所述第三创建子模块,具体用于在所述第五判断子模块判断出所述待删除对象的前一个寄生对象所标记的空闲空间与所述待删除对象物理地址不相邻时,将所述待删除对象的地址作为所述第四寄生对象的地址,将所述第四寄生对象的容量字节的取值设置为所述待删除对象所占用的空间的大小,将所述第四寄生对象的地址字节设置为空,将所述第四寄生对象的前一个寄生对象的地址字节的取值,更新为所述第四寄生对象的地址;
所述第二更新子模块,具体用于在所述第六判断子模块判断出所述对象堆中存在位于所述第三创建子模块创建的所述第四寄生对象之后的寄生对象时,判断所述第四寄生对象所标记的空闲空间是否与所述第四寄生对象的后一个寄生对象物理地址相邻;
如果是,则将所述第四寄生对象的后一个寄生对象的容量字节的取值与所述第四寄生对象的容量字节的取值相加,将所述第四寄生对象的容量字节的取值更新为上述相加得到的结果,将所述第四寄生对象的地址字节的取值更新为所述第四寄生对象的后一个寄生对象的地址字节的取值;
否则,将所述第四寄生对象的地址字节的取值更新为所述第四寄生对象的后一个寄生对象的地址字节的取值。
26.如权利要求25所述的装置,其特征在于,
所述第二更新子模块,具体用于在所述第六判断子模块判断出所述对象堆中存在位于所述第三创建子模块创建的所述第四寄生对象之后的寄生对象时,获取所述第四寄生对象的地址与所述第四寄生对象的容量字节的取值相加得到的结果,判断所述结果是否与所述第四寄生对象的后一个寄生对象的地址相同;
如果是,则确定所述第四寄生对象所标记的空闲空间与所述第四寄生对象的后一个寄生对象物理地址相邻,将所述第四寄生对象的后一个寄生对象的容量字节的取值与所述第四寄生对象的容量字节的取值相加,将所述第四寄生对象的容量字节的取值更新为上述相加得到的结果,将所述第四寄生对象的地址字节的取值更新为所述第四寄生对象的后一个寄生对象的地址字节的取值;
否则,确定所述第四寄生对象所标记的空闲空间与所述第四寄生对象的后一个寄生对象物理地址不相邻,将所述第四寄生对象的地址字节的取值更新为所述第四寄生对象的后一个寄生对象的地址字节的取值。
27.如权利要求15所述的装置,其特征在于,还包括:
获取模块,用于从所述系统信息中获取所述对象堆中的第一个寄生对象的地址;
第五判断模块,用于判断所述获取模块获取到的所述地址是否为空,如果是,则触发所述合并模块;否则,触发所述第一读取模块。
28.如权利要求15所述的装置,其特征在于,所述合并模块,包括:
第一获取子模块,用于将所述对象堆中的第一个非寄生对象作为当前对象,获取当前对象的地址减去对象堆的首地址得到的差值,将空闲空间变量初始化为所述差值,并触发第七判断子模块;
第七判断子模块,用于判断当前对象的地址是否小于所述对象堆中最后一个非寄生对象的地址;
第八判断子模块,用于在所述第七判断子模块判断出当前对象的地址小于所述对象堆中最后一个非寄生对象的地址时,判断所述空闲空间变量的取值是否为零,并在判断出所述空闲空间变量的取值为零时,触发第二获取子模块;
第三更新子模块,用于在所述第八判断子模块判断出所述空闲空间变量的取值不为零时,根据所述空闲空间变量的取值,将当前对象前移,更新当前对象在对象表中的引用值,并触发第二获取子模块;
第二获取子模块,用于获取当前对象的后一个非寄生对象的地址减去当前对象的地址和当前对象占用的空间的大小得到的差值,将所述空闲空间变量更新为所述差值,将当前对象的后一个非寄生对象作为更新后的当前对象,并触发所述第七判断子模块;
第三处理子模块,用于在所述第七判断子模块判断出当前对象的地址不小于所述对象堆中最后一个非寄生对象的地址时,根据所述空闲空间变量的取值,将当前对象前移,更新当前对象在对象表中的引用值;将当前对象的地址与当前对象占用的空间的大小相加,将得到的结果作为地址,创建对应的寄生对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310537587.5A CN103559076B (zh) | 2013-11-04 | 2013-11-04 | 一种使用寄生对象管理对象堆的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310537587.5A CN103559076B (zh) | 2013-11-04 | 2013-11-04 | 一种使用寄生对象管理对象堆的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103559076A CN103559076A (zh) | 2014-02-05 |
CN103559076B true CN103559076B (zh) | 2016-09-28 |
Family
ID=50013329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310537587.5A Expired - Fee Related CN103559076B (zh) | 2013-11-04 | 2013-11-04 | 一种使用寄生对象管理对象堆的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103559076B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463309B (zh) * | 2020-12-11 | 2022-11-29 | 上海交通大学 | 多台Java虚拟机之间的数据传输方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495754A (zh) * | 2011-10-27 | 2012-06-13 | 飞天诚信科技股份有限公司 | 基于缓存的java卡事务处理方法 |
CN102591788A (zh) * | 2011-12-23 | 2012-07-18 | 飞天诚信科技股份有限公司 | 一种Java卡垃圾回收方法 |
CN102722415A (zh) * | 2012-05-22 | 2012-10-10 | 广州晶锐信息技术有限公司 | 基于堆栈体系结构Java SoC系统的垃圾收集方法 |
CN103116518A (zh) * | 2013-01-28 | 2013-05-22 | 飞天诚信科技股份有限公司 | 一种基于java卡虚拟机中对象管理的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8667418B2 (en) * | 2007-06-08 | 2014-03-04 | Apple Inc. | Object stack |
-
2013
- 2013-11-04 CN CN201310537587.5A patent/CN103559076B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495754A (zh) * | 2011-10-27 | 2012-06-13 | 飞天诚信科技股份有限公司 | 基于缓存的java卡事务处理方法 |
CN102591788A (zh) * | 2011-12-23 | 2012-07-18 | 飞天诚信科技股份有限公司 | 一种Java卡垃圾回收方法 |
CN102722415A (zh) * | 2012-05-22 | 2012-10-10 | 广州晶锐信息技术有限公司 | 基于堆栈体系结构Java SoC系统的垃圾收集方法 |
CN103116518A (zh) * | 2013-01-28 | 2013-05-22 | 飞天诚信科技股份有限公司 | 一种基于java卡虚拟机中对象管理的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103559076A (zh) | 2014-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102707966B (zh) | 加速操作系统启动的方法及装置、预取信息生成方法及装置和终端 | |
CN102567427B (zh) | 一种对象数据处理方法及装置 | |
CN104503710A (zh) | 一种提高闪存写入速度的方法和装置 | |
TWI309005B (en) | Stack caching systems and methods | |
CN106776375A (zh) | 一种磁盘内部的数据缓存方法及装置 | |
CN103218312A (zh) | 文件访问方法及系统 | |
CN107577436A (zh) | 一种数据存储方法及装置 | |
CN106445832A (zh) | 闪存存储系统的地址映射方法及装置 | |
CN107609199A (zh) | 一种处理和恢复页面的方法、设备及存储介质 | |
CN108021449A (zh) | 一种协程实现方法、终端设备及存储介质 | |
CN106649146A (zh) | 一种内存释放方法及装置 | |
CN1845093A (zh) | 一种属性可扩展的对象文件系统 | |
CN106406748A (zh) | 存储器中心数据库架构 | |
CN104574275B (zh) | 一种在模型绘制过程中合并贴图的方法 | |
CN106776908A (zh) | 数据清理方法、装置及终端 | |
CN101246440A (zh) | Java卡系统垃圾回收方法 | |
CN104050014A (zh) | 基于虚拟化平台的高效存储管理方法 | |
CN103559076B (zh) | 一种使用寄生对象管理对象堆的方法和装置 | |
US9208080B2 (en) | Persistent memory garbage collection | |
CN103246426B (zh) | 一种实现对多个图标进行处理的方法及装置 | |
CN105095106B (zh) | 数据块存储方法及装置 | |
CN103210389B (zh) | 一种元数据的处理方法和装置 | |
TW201113886A (en) | Method for enhancing performance of accessing a flash memory, and associated memory device and controller thereof | |
CN101339490A (zh) | 闪存的驱动装置及方法 | |
CN105138294B (zh) | 一种硬盘设备及信息处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for 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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160928 |