一种可进行高效对象管理的方法及装置制造方法

xiaoxiao2020-7-22  11

一种可进行高效对象管理的方法及装置制造方法
【专利摘要】本发明公开一种可进行高效对象管理的方法和装置,包括:S1:java卡虚拟机接收来自当前应用程序的指令,若是创建对象指令则执行S2,若是修改对象指令则执行S5;S2:根据创建对象指令获取当前应用实例、对象大小、对象类型和对象地址位置;S3:从系统信息中获取对象堆的剩余空间的起始偏移地址;S4:按照对象大小和对象类型创建对象,更新对象堆的剩余空间的起始偏移地址,将创建的对象的偏移地址存入当前应用实例中,返回S1;S5:根据修改对象指令获取对象偏移地址、修改位置和修改内容;S6:将对象偏移地址上的对象的所述修改位置上的数据修改为所述修改内容,返回S1。
【专利说明】一种可进行高效对象管理的方法及装置
【技术领域】
[0001]本发明涉及java卡【技术领域】,尤其涉及一种可进行高效对象管理的方法及装置。【背景技术】
[0002]java卡中使用对象来保存一些数据,对象包括对象头和数据域,对象头和数据域可以分开存储,也可以连续存储。永久性对象的对象头和数据域顺序排列的存储在EEPROM中;临时对象的对象头和数据域是分开存储的,其中对象头存储在EEPROM中,而数据域存储在RAM中。永久性对象和临时对象的对象头在EEPROM中按创建的先后顺序排列。java卡运行时需要创建新对象,然后对这些对象进行管理。
[0003]目前,java卡虚拟机中基于对象表的对象管理方法中,java卡虚拟机中包括子对象表和主对象表,其中子对象表的表项中存储对象的偏移地址,主对象表的表项中存储子对象表的偏移地址,在对对象进行操作时,首先根据对象的主对象表索引值在主对象表中查找对应的子对象表的偏移地址,再根据对象的子对象表索弓I值在子对象表中查找对象的偏移地址,根据查找到的对象的偏移地址计算对象的绝对地址,之后再对象进行操作;在垃圾回收过程中,也需要根据被回收对象的主对象表索引值在主对象表中查找对应的子对象表的偏移地址,再根据被回收对象的子对象表索弓I值在子对象表中查找被回收对象的偏移地址,将查找到的偏移地址清空。因此,java卡虚拟机中基于对象表的对象管理方法中,java卡虚拟机需要进行两次查表操作,操作流程复杂,效率低,耗时多。

【发明内容】

[0004]本发明的目的是为了克服现有技术的不足,提供一种可进行高效对象管理的方法及装置,在对对象进行操作时不需查找子对象表和主对象表,简化了 java卡虚拟机的操作流程,提高java卡虚拟机工作效率。
[0005]本发明提供的一种可进行高效对象管理的方法,包括:
[0006]步骤SI: java卡虚拟机接收来自当前应用程序的指令,判断所述指令的类型,若是创建对象指令则执行步骤S2,若是修改对象指令则执行步骤S5 ;
[0007]步骤S2:所述java卡虚拟机根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述创建对象指令获取对象大小、对象类型和对象地址位置;
[0008]步骤S3:所述java卡虚拟机从系统信息中获取对象堆的剩余空间的起始偏移地址;
[0009]步骤S4:所述java卡虚拟机将所述对象堆的剩余空间的起始偏移地址作为创建的对象的偏移地址,按照所述对象大小和所述对象类型创建对象,根据所述对象大小更新所述系统信息中的所述对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将所述创建的对象的偏移地址存入到当前应用实例中与所述对象地址位置对应的位置中,返回步骤SI ;[0010]步骤S5:所述java卡虚拟机根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述修改对象指令获取修改位置和修改内容;
[0011]步骤S6:所述java卡虚拟机根据所述对象偏移地址和所述修改位置,将所述对象偏移地址上的对象中所述修改位置上的数据修改为所述修改内容,返回步骤SI。
[0012]所述步骤SI之前还包括:所述java卡虚拟机接收用户发送的选择应用指令,根据所述选择应用指令获取应用ID,根据所述应用ID查找对应的应用程序,并判断是否查找到与所述应用ID对应的应用程序,是则将查找到的所述应用程序作为当前应用程序,执行步骤SI,否则提示错误,结束。
[0013]所述步骤S2具体为:所述java卡虚拟机对所述创建对象指令进行编译,得到第一编译指令,根据所述第一编译指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述第一编译指令获取对象大小、对象类型和对象地址位置。
[0014]所述步骤S2中根据所述创建对象指令获取对象大小为:所述java卡虚拟机从所述创建对象指令中获取所述对象大小。
[0015]所述步骤S2中根据所述创建对象指令获取对象大小为:所述java卡虚拟机从所述创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述对象大小。
[0016]所述步骤S3与步骤S4之间包括:所述java卡虚拟机从所述系统信息中获取对象堆大小,根据所述对象堆大小和所述对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大小,判断所述对象堆的剩余空间大小是否大于所述对象大小,是则执行步骤S4,否则提示错误,返回步骤SI。
[0017]所述步骤S5具体为:所述java卡虚拟机对所述修改对象指令进行编译,得到第二编译指令,根据所述第二编译指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述第二编译指令获取修改位置和修改内容。
[0018]所述步骤S5中根据所述修改对象指令获取修改内容为:所述java卡虚拟机从所述修改对象指令中获取所述修改内容。
[0019]所述步骤S5中根据所述修改对象指令获取修改内容为:所述java卡虚拟机从所述修改对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述修改内容。
[0020]所述步骤SI中判断所述指令的类型,还包括,若是删包指令则执行步骤S7 ;
[0021]步骤S7:所述java卡虚拟机扫描包堆,根据所述包堆中的组件的偏移地址计算出包堆碎片,对所述包堆碎片进行合并,执行步骤S8 ;
[0022]步骤S8:所述java卡虚拟机扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中,返回步骤SI。
[0023]所述步骤S7具体为:[0024]步骤S7-1:所述java卡虚拟机获取所述包堆的最高偏移地址,并将其作为当前偏移地址;
[0025]步骤S7-2:所述java卡虚拟机判断所述当前偏移地址是否大于包堆剩余空间的起始偏移地址,是则执行步骤S7-3 ;否则执行步骤S7-8 ;
[0026]步骤S7-3:所述java卡虚拟机在所述包堆中查找偏移地址小于当前偏移地址的组件,判断是否查找到偏移地址小于当前偏移地址的组件,是则执行步骤S7-4,否则执行步骤 S7-7 ;
[0027]步骤S7-4:所述java卡虚拟机在查找到的所述组件中获取偏移地址最大的组件作为当前组件的相邻组件,根据当前偏移地址与所述相邻组件的偏移地址之间的碎片大小更新包堆碎片大小,执行步骤S7-5 ;
[0028]步骤S7-5:所述java卡虚拟机根据所述相邻组件的偏移地址更新当前偏移地址,根据当前偏移地址更新当前组件,判断所述包堆碎片大小是否为0,是则返回步骤S7-2,否则执行步骤S7-6 ;
[0029]步骤S7-6:所述java卡虚拟机根据所述包堆碎片大小,将当前组件向高地址方向移动,返回步骤S7-2 ;
[0030]步骤S7-7:所述java卡虚拟机根据当前偏移地址与所述包堆剩余空间的起始偏移地址之间的碎片大小更新所述包堆碎片大小,执行步骤S7-8 ;
[0031]步骤S7-8:所述java卡虚拟机判断所述包堆碎片大小是否为0,是则执行步骤S8,否则根据所述包堆碎片大小更新所述包堆剩余空间的起始偏移地址,执行步骤S8。
[0032]所述步骤S8具体为:
[0033]步骤S8-1:所述java卡虚拟机初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址;
[0034]步骤S8-2:所述java卡虚拟机判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址,是则执行步骤S8-3,否则执行步骤S8-8 ;
[0035]步骤S8-3:所述java卡虚拟机记录所述对象偏移地址的初值的位置上的对象的大小,判断所述对象偏移地址的初值的位置上的对象是否需要回收,是则执行步骤S8-4,否则执行步骤S8-5 ;
[0036]步骤S8-4:所述java卡虚拟机根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大小,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空,执行步骤S8-7 ;
[0037]步骤S8-5:所述java卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤
S8-7,否则执行步骤S8-6 ;
[0038]步骤S8-6:所述java卡虚拟机根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上,将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值,执行步骤S8-7 ;
[0039]步骤S8-7:所述java卡虚拟机根据记录的所述对象的大小更新所述记录的对象偏移地址的初值,返回步骤S8-2 ;
[0040]步骤S8-8:所述java卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤58-10,否则执行步骤S8-9;
[0041]步骤S8-9:所述java卡虚拟机根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址,执行步骤S8-10 ;
[0042]步骤S8-10:所述java卡虚拟机清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,返回步骤Si。
[0043]所述步骤S5与步骤S6之间包括:所述java卡虚拟机判断获取到的所述对象偏移地址是否为空,是则提示错误,返回步骤SI,否则执行步骤S6。
[0044]所述步骤SI中判断所述指令的类型,还包括,若是垃圾回收指令则执行步骤S9 ;
[0045]步骤S9:所述java卡虚拟机扫描对象堆,将所述对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中,返回步骤Si。
[0046]所述步骤S9具体为:
[0047]步骤S9-1:所述java卡虚拟机初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址;
[0048]步骤S9-2:所述java卡虚拟机判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址,是则执行步骤S9-3,否则执行步骤S9-8 ;
[0049]步骤S9-3:所述java卡虚拟机记录所述对象偏移地址的初值的位置上的对象的大小,判断所述对象偏移地址的初值的位置上的对象是否需要回收,是则执行步骤S9-4,否则执行步骤S9-5 ;
[0050]步骤S9-4:所述java卡虚拟机根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大小,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空,执行步骤S9-7 ;
[0051]步骤S9-5:所述java卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤
59-7,否则执行步骤S9-6;
[0052]步骤S9-6:所述java卡虚拟机根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值,执行步骤S9-7 ;
[0053]步骤S9-7:所述java卡虚拟机根据记录的所述对象的大小更新所述记录的对象偏移地址的初值,返回步骤S9-2 ;
[0054]步骤S9-8:所述java卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤
S9-10,否则执行步骤S9-9 ;
[0055]步骤S9-9:所述java卡虚拟机根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址,执行步骤S9-10 ;
[0056]步骤S9-10:所述java卡虚拟机清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,返回步骤SI。
[0057]所述步骤S5与步骤S6之间包括:所述java卡虚拟机判断获取到的所述对象偏移地址是否为空,是则提示错误,返回步骤SI,否则执行步骤S6。
[0058]所述步骤SI之前包括:[0059]步骤SO:所述java卡虚拟机根据系统信息中在对象堆碎片进行合并过程中记录的所述对象堆碎片大小判断是否需要进行掉电恢复,是则执行步骤S10,否则执行步骤SI ;
[0060]步骤SlO:所述java卡虚拟机根据系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值进行掉电恢复后,执行步骤Si。
[0061]所述步骤SlO包括:
[0062]步骤S10-1:所述java卡虚拟机获取所述系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值;
[0063]步骤S10-2:所述java卡虚拟机扫描对象堆,将所述对象堆中使用的所述对象偏移地址的初值更新为记录的所述对象偏移地址的终值,获取所述对象堆的尾地址;
[0064]步骤S10-3:所述java卡虚拟机根据所述记录的对象偏移地址的终值的位置上的对象的大小更新记录的对象偏移地址的初值,判断所述记录的对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址,是则执行步骤S10-4,否则执行步骤S10-6 ;
[0065]步骤S10-4:所述java卡虚拟机根据所述记录的对象偏移地址的初值和所述对象堆碎片大小更新所述记录的对象偏移地址的终值,将所述记录的对象偏移地址的初值的位置上的对象移动到所述记录的对象偏移地址的终值的位置上;
[0066]步骤S10-5:所述java卡虚拟机将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值,返回步骤S10-3 ;
[0067]步骤S10-6:所述java卡虚拟机根据所述对象堆碎片大小更新所述系统信息中的所述对象堆剩余空间的起始偏移地址,清空所述系统信息中记录的对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,执行步骤Si。
[0068]一种可进行高效对象管理的装置,包括:接收模块、第一判断模块、第一获取模块、第二获取模块、创建模块、第三获取模块和修改模块;
[0069]所述接收模块,用于接收来自当前应用程序的指令;
[0070]所述第一判断模块,用于判断所述接收模块接收到的所述指令的类型;
[0071]所述第一获取模块,用于在所述第一判断模块判断所述指令的类型为创建对象指令时,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述创建对象指令获取对象大小、对象类型和对象地址位置;
[0072]所述第二获取模块,用于从系统信息中获取对象堆的剩余空间的起始偏移地址;
[0073]所述创建模块,用于将所述第二获取模块获取到的所述对象堆的剩余空间的起始偏移地址作为创建的对象的偏移地址,按照所述第一获取模块获取到的所述对象大小和所述对象类型创建对象,根据所述对象大小更新所述系统信息中的所述对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将所述创建的对象的偏移地址存入到当前应用实例中与所述对象地址位置对应的位置中;
[0074]所述第三获取模块,用于在所述第一判断模块判断所述指令的类型为修改对象指令时,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述修改对象指令获取修改位置和修改内容;
[0075]所述修改模块,用于根据所述第三获取模块获取到的所述对象偏移地址和所述修改位置,将所述对象偏移地址上的对象中所述修改位置上的数据修改为所述第三获取模块获取到的所述修改内容。
[0076]所述接收模块还用于接收用户发送的选择应用指令;
[0077]所述装置还包括查找模块和提示模块;
[0078]所述查找模块,用于根据所述接收模块接收到的所述选择应用指令获取应用ID,根据所述应用ID查找对应的应用程序,并判断是否查找到与所述应用ID对应的应用程序,是则将查找到的所述应用程序作为当前应用程序;
[0079]所述提示模块,用于在所述查找模块未查找到与所述应用ID对应的应用程序时,提示错误;
[0080]所述接收模块还用于在所述查找模块查找到与所述应用ID对应的应用程序时,进行工作。
[0081]所述第一获取模块包括:第一编译单元和第一获取单元;
[0082]所述第一编译单元,用于对所述创建对象指令进行编译,得到第一编译指令;
[0083]所述第一获取单元,用于根据所述第一编译单元编译得到的所述第一编译指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述第一编译单元编译得到的所述第一编译指令获取对象大小、对象类型和对象地址位置。
[0084]所述第一获取模块具体用于在所述第一判断模块判断所述指令的类型为创建对象指令时,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,从所述创建对象指令中获取所述对象大小,根据所述创建对象指令获取对象类型和对象地址位置。
[0085]所述第一获取模块具体用于在所述第一判断模块判断所述指令的类型为创建对象指令时,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,从所述创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述对象大小,根据所述创建对象指令获取对象类型和对象地址位置。
[0086]所述装置还包括第四获取模块、第二判断模块和提示模块;
[0087]所述第四获取模块,用于从所述系统信息中获取对象堆大小,根据所述对象堆大小和所述对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大小;
[0088]所述第二判断模块,用于判断所述对象堆的剩余空间大小是否大于所述对象大小;
[0089]所述提示模块,用于在所述第二判断模块判断为否时,提示错误;
[0090]所述创建模块还用于在所述第二判断模块判断为是时,进行工作。
[0091]所述第三获取模块包括:第二编译单元和第二获取单元;
[0092]所述第二编译单元,用于对所述修改对象指令进行编译,得到第二编译指令;
[0093]所述第二获取单元,用于根据所述第二编译单元编译得到的所述第二编译指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述第二编译指令获取修改位置和修改内容。
[0094]所述第三获取模块具体用于在所述第一判断模块判断所述指令的类型为修改对象指令时,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,从所述修改对象指令中获取所述修改内容,根据所述修改对象指令获取修改位置。
[0095]所述第三获取模块具体用于在所述第一判断模块判断所述指令的类型为修改对象指令时,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,从所述修改对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述修改内容,根据所述修改对象指令获取修改位置。
[0096]所述装置还包括第一合并模块和第二合并模块;
[0097]所述第一合并模块,用于在所述第一判断模块判断所述指令的类型为删包指令时,扫描包堆,根据所述包堆中的组件的偏移地址计算出包堆碎片,对所述包堆碎片进行合并;
[0098]所述第二合并模块,用于在所述第一合并模块对所述包堆碎片进行合并后,扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。
[0099]所述第一合并模块包括:第三获取单元、第一判断单元、查找单元、第四获取单元、第一更新单元、第二判断单元、第一移动单元、第二更新单元和第三更新单元;
[0100]所述第三获取单元,用于在所述第一判断模块判断所述指令的类型为删包指令时,获取所述包堆的最高偏移地址,并将其作为当前偏移地址;
[0101]所述第一判断单元,用于判断所述当前偏移地址是否大于包堆剩余空间的起始偏移地址;
[0102]所述查找单元,用于当所述第一判断单元判断当前偏移地址大于包堆剩余空间的起始偏移地址时,在所述包堆中查找偏移地址小于当前偏移地址的组件,判断是否查找到偏移地址小于当前偏移地址的组件;
[0103]所述第四获取单元,用于当所述查找单元查找到偏移地址小于当前偏移地址的组件时,在查找到的所述组件中获取偏移地址最大的组件作为当前组件的相邻组件,根据当前偏移地址与所述相邻组件的偏移地址之间的碎片大小更新包堆碎片大小;
[0104]所述第一更新单元,用于根据所述第四获取单元获取到的所述相邻组件的偏移地址更新当前偏移地址,根据当前偏移地址更新当前组件;
[0105]所述第二判断单元,用于判断所述包堆碎片大小是否为O ;
[0106]所述第一移动单元,用于当所述第二判断单元判断为否时,根据所述包堆碎片大小,将当前组件向高地址方向移动;
[0107]所述第二更新单元,用于当所述查找单元查找不到偏移地址小于当前偏移地址的组件时,根据当前偏移地址与所述包堆剩余空间的起始偏移地址之间的碎片大小更新所述包堆碎片大小;
[0108]所述第三更新单元,用于根据所述包堆碎片大小更新所述包堆剩余空间的起始偏移地址。
[0109]所述第二合并模块包括:第五获取单元、第三判断单元、第一记录单元、第四判断单元、第四更新单元、第一设置单元、第五判断单元、第五更新单元、第二移动单元、第六更新单元、第七更新单元、第八更新单元和第一清除单元;
[0110]所述第五获取单元,用于初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址;
[0111]所述第三判断单元,用于判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址;
[0112]所述第一记录单元,用于当所述第三判断单元判断为是时,记录所述对象偏移地址的初值的位置上的对象的大小;
[0113]所述第四判断单元,用于判断所述对象偏移地址的初值的位置上的对象是否需要回收;
[0114]所述第四更新单元,用于当所述第四判断单元判断为是时,根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大小;
[0115]所述第一设置单元,用于当所述第四判断单元判断为是时,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空;
[0116]所述第五判断单元,用于判断所述对象堆碎片大小是否为O ;
[0117]所述第五更新单元,用于当所述第五判断单元判断为否时,根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值;
[0118]所述第二移动单元,用于当第五更新单元更新所述对象偏移地址的终值后,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上;
[0119]所述第六更新单元,用于当所述第二移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值;
[0120]所述第七更新单元,用于当所述第五判断单元判断为否时,或当所述第一设置模块将所述对象堆中使用所述对象偏移地址的初值的位置设置为空后,或当所述第六更新单元将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值后,根据记录的所述对象的大小更新所述系统信息中的所述对象偏移地址的初值;
[0121]所述第八更新单元,用于根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址;
[0122]所述第一清除单元,用于清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。
[0123]所述装置还包括:第三判断模块和提示模块;
[0124]所述第三判断模块,用于在所述第三获取模块获取到所述对象偏移地址后,判断获取到的所述对象偏移地址是否为空;
[0125]所述提示模块,用于在所述第三判断模块判断为是时,提示错误;
[0126]所述修改模块还用于在所述第三判断模块判断为否时,进行工作。
[0127]所述装置还包括第三合并模块;
[0128]所述第三合并模块,用于在所述第一判断模块判断所述指令的类型为垃圾回收时,扫描对象堆,将所述对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初 值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。
[0129]所述第三合并模块包括:第六获取单元、第六判断单元、第二记录单元、第七判断单元、第九更新单元、第二设置单元、第八判断单元、第十更新单元、第三移动单元、第十一更新单元、第十二更新单元、第十三更新单元和第二清除单元;
[0130]所述第六获取单元,用于初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址;
[0131]所述第六判断单元,用于判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址;
[0132]所述第二记录单元,用于当所述第六判断单元判断为是时,记录所述对象偏移地址的初值的位置上的对象的大小;
[0133]所述第七判断单元,用于判断所述对象偏移地址的初值的位置上的对象是否需要回收;
[0134]所述第九更新单元,用于当所述第七判断单元判断为是时,根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大小;
[0135]所述第二设置单元,用于当所述第七判断单元判断为是时,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空;
[0136]所述第八判断单元,用于判断所述对象堆碎片大小是否为O ;
[0137]所述第十更新单元,用于当所述第八判断单元判断为否时,根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值;
[0138]所述第三移动单元,用于当第十更新单元更新所述对象偏移地址的终值后,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上;
[0139]所述第十一更新单元,用于当所述第三移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值;
[0140]所述第十二更新单元,用于当所述第八判断单元判断为否时,或当所述第二设置模块将所述对象堆中使用所述对象偏移地址的初值的位置设置为空后,或当所述第十一更新单元将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值后,根据记录的所述对象的大小更新所述系统信息中的所述对象偏移地址的初值;
[0141]所述第十三更新单元,用于根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址;
[0142]所述第二清除单元,用于清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。
[0143]所述装置还包括:第四判断模块和提示模块;
[0144]所述第四判断模块,用于在所述第三获取模块获取到所述对象偏移地址后,判断获取到的所述对象偏移地址是否为空;
[0145]所述提示模块,用于在所述第四判断模块判断为是时,提示错误;
[0146]所述修改模块还用于在所述第四判断模块判断为否时,进行工作。
[0147]所述装置还包括第五判断模块和掉电恢复模块;
[0148]所述第五判断模块,用于根据系统信息中在对象堆碎片进行合并过程中记录的所述对象堆碎片大小判断是否需要进行掉电恢复;
[0149]所述掉电恢复模块,用于在所述第五判断模块判断为是时,根据系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值进行掉电恢复;[0150]所述接收模块还用于在所述第六判断模块判断为否时,或所述掉电恢复模块进行掉电恢复后,进行工作。
[0151]所述掉电恢复模块包括:第七获取单元、第十四更新单元、第八获取单元、第十五更新单元、第九判断单元、第十六更新单元、第四移动单元、第十七更新单元和第十八更新单元;
[0152]所述第七获取单元,用于获取所述系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值;
[0153]所述第十四更新单元,用于在所述第七获取单元获取到所述对象偏移地址的初值和所述对象偏移地址的终值后,扫描对象堆,将所述对象堆中使用的所述对象偏移地址的初值更新为记录的所述对象偏移地址的终值;
[0154]所述第八获取单元,用于在所述第七获取单元获取到所述对象偏移地址的初值和所述对象偏移地址的终值后,获取所述对象堆的尾地址;
[0155]所述第十五更新单元,用于根据所述记录的对象偏移地址的终值的位置上的对象的大小更新记录的对象偏移地址的初值;
[0156]所述第九判断单元,用于在所述第十五更新单元更新所述记录的对象偏移地址的初值后,判断所述记录的对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址;
[0157]所述第十六更新单元,用于在所述第十三判断单元判断为是时,根据所述记录的对象偏移地址的初值和所述对象堆碎片大小更新所述记录的对象偏移地址的终值;
[0158]所述第四移动单元,用于在所述第十六更新单元更新所述记录的对象偏移地址的终值后,将所述记录的对象偏移地址的初值的位置上的对象移动到所述记录的对象偏移地址的终值的位置上;
[0159]所述第十七更新单元,用于在所述第四移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值;
[0160]所述第十八更新单元,用于在所述第十三判断单元判断为否时,根据所述对象堆碎片大小更新所述系统信息中的所述对象堆剩余空间的起始偏移地址,清空系统信息中记录的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。
[0161]本发明与现有技术相比,具有以下优点:
[0162]本专利提出一种可进行高效对象管理的方法及装置,在对对象进行操作时不需查找子对象表和主对象表,简化了 java卡虚拟机的操作流程,提高java卡虚拟机工作效率。
【专利附图】

【附图说明】
[0163]图1为本发明实施例一提供的一种可进行高效对象管理的方法的流程图;
[0164]图2为本发明实施例二提供的一种可进行高效对象管理的方法的流程图;
[0165]图3为本发明实施例二提供的NewObj应用实例的示意图;
[0166]图4为本发明实施例三提供的扫描包堆,根据包堆中的组件的偏移地址计算出包堆碎片,对包堆碎片进行合并的方法的流程图;
[0167]图5为本发明实施例四提供的扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象第一偏移地址的初值、对象第二偏移地址的终值和对象堆碎片大小记录到系统信息中的方法的流程图;
[0168]图6、图7和图8为本发明实施例四提供的对象堆的示意图。
[0169]图9为本发明实施例五提供的根据系统信息中在对象堆碎片进行合并过程中记录的对象偏移地址的初值和对象偏移地址的终值进行掉电恢复的方法的流程图;
[0170]图10和图11为本发明实施例五提供的对象堆的示意图;
[0171]图12为本发明实施例六提供的一种可进行高效对象管理的装置的模块图。
【具体实施方式】
[0172]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0173]java卡应用的开发过程为:开发者写一个或多个java类,用java编译器编译源码,产生一个或多个class文件;java卡虚拟机指令是以操作码与操作数的形式描述的;每一个操作码都有一个助记符作为它的名字;在java卡虚拟机指令执行时,通过隐式地从操作数栈中取指令的操作数,即操作数在运行时被计算,操作数由操作栈提供;
[0174]java卡应用程序准备被下载到java卡虚拟机上时,使用java卡Converter将包含了 java 卡应用的 class 文件转换成 CAP (converted applet)文件;java 卡 Converted是对组成一个包的所有java API类文件进行预处理的软件,它将一个包转换成CAP文件;CAP文件包含将被安装在java卡虚拟机上的一个包的类的二进制表达,用于在java卡虚拟机上执行包的类;CAP文件由12个组件组成,具体为:头组件、目录组件、应用组件、导入组件、常量池组件、类组件、方法组件、静态域组件、位置引用组件、导出组件、描述符组件、调试组件;其中,常量池组件由条目组成,条目为被该CAP文件的方法组件中的元素引用的每一个类、方法以及域的引用;在java卡虚拟机中,java卡应用程序以字节码的形式被执行;
[0175]例如,NewObj应用程序中有数组对象objl和4个方法,4个方法分别是install、register> selectingApplet 和 process,则生成的常量池为:
[0176]
【权利要求】
1.一种可进行高效对象管理的方法,其特征在于,所述方法包括: 步骤SI:java卡虚拟机接收来自当前应用程序的指令,判断所述指令的类型,若是创建对象指令则执行步骤S2,若是修改对象指令则执行步骤S5 ; 步骤S2:所述java卡虚拟机根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述创建对象指令获取对象大小、对象类型和对象地址位置; 步骤S3:所述java卡虚拟机从系统信息中获取对象堆的剩余空间的起始偏移地址; 步骤S4:所述java卡虚拟机将所述对象堆的剩余空间的起始偏移地址作为创建的对象的偏移地址,按照所述对象大小和所述对象类型创建对象,根据所述对象大小更新所述系统信息中的所述对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将所述创建的对象的偏移地址存入到当前应用实例中与所述对象地址位置对应的位置中,返回步骤SI ; 步骤S5:所述java卡虚拟机根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述修改对象指令获取修改位置和修改内容; 步骤S6:所述java卡虚拟机根据所述对象偏移地址和所述修改位置,将所述对象偏移地址上的对象中所述修改位置上的数据修改为所述修改内容,返回步骤SI。
2.根据权利要求1所述的方法,其特征在于,所述步骤SI之前还包括:所述java卡虚拟机接收用户发送的选择应用指令,根据所述选择应用指令获取应用ID,根据所述应用ID查找对应的应用程序,并判断是否查找到与所述应用ID对应的应用程序,是则将查找到的所述应用程序作为当前应用程序,执行步骤SI,否则提示错误,结束。
3.根据权利要求1所述的方法,其特征在于,所述步骤S2具体为:所述java卡虚拟机对所述创建对象指令进行编译,得到第一编译指令,根据所述第一编译指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述第一编译指令获取对象大小、对象类型和对象地址位置。
4.根据权利要求1所述的方法,其特征在于,所述步骤S2中根据所述创建对象指令获取对象大小为:所述java卡虚拟机从所述创建对象指令中获取所述对象大小。
5.根据权利要求1所述的方法,其特征在于,所述步骤S2中根据所述创建对象指令获取对象大小为:所述java卡虚拟机从所述创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述对象大小。
6.根据权利要求1所述的方法,其特征在于,所述步骤S3与步骤S4之间包括:所述java卡虚拟机从所述系统信息中获取对象堆大小,根据所述对象堆大小和所述对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大小,判断所述对象堆的剩余空间大小是否大于所述对象大小,是则执行步骤S4,否则提示错误,返回步骤SI。
7.根据权利要求1所述的方法,其特征在于,所述步骤S5具体为:所述java卡虚拟机对所述修改对象指令进行编译,得到第二编译指令,根据所述第二编译指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述第二编译指令获取修改位置和修改内容。
8.根据权利要求1所述的方法,其特征在于,所述步骤S5中根据所述修改对象指令获取修改内容为:所述java卡虚拟机从所述修改对象指令中获取所述修改内容。
9.根据权利要求1所述的方法,其特征在于,所述步骤S5中根据所述修改对象指令获取修改内容为:所述java卡虚拟机从所述修改对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述修改内容。
10.根据权利要求1所述的方法,其特征在于,所述步骤SI中判断所述指令的类型,还包括,若是删包指令则执行步骤S7 ; 步骤S7:所述java卡虚拟机扫描包堆,根据所述包堆中的组件的偏移地址计算出包堆碎片,对所述包堆碎片进行合并,执行步骤S8 ; 步骤S8:所述java卡虚拟机扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中,返回步骤SI。
11.根据权利要求10所述的方法,其特征在于,所述步骤S7具体为: 步骤S7-1:所述jav a卡虚拟机获取所述包堆的最高偏移地址,并将其作为当前偏移地址; 步骤S7-2:所述java卡虚拟机判断所述当前偏移地址是否大于包堆剩余空间的起始偏移地址,是则执行步骤S7-3 ;否则执行步骤S7-8 ; 步骤S7-3:所述java卡虚拟机在所述包堆中查找偏移地址小于当前偏移地址的组件,判断是否查找到偏移地址小于当前偏移地址的组件,是则执行步骤S7-4,否则执行步骤S7-7 ; 步骤S7-4:所述java卡虚拟机在查找到的所述组件中获取偏移地址最大的组件作为当前组件的相邻组件,根据当前偏移地址与所述相邻组件的偏移地址之间的碎片大小更新包堆碎片大小,执行步骤S7-5 ; 步骤S7-5:所述java卡虚拟机根据所述相邻组件的偏移地址更新当前偏移地址,根据当前偏移地址更新当前组件,判断所述包堆碎片大小是否为0,是则返回步骤S7-2,否则执行步骤S7-6 ; 步骤S7-6:所述java卡虚拟机根据所述包堆碎片大小,将当前组件向高地址方向移动,返回步骤S7-2 ; 步骤S7-7:所述java卡虚拟机根据当前偏移地址与所述包堆剩余空间的起始偏移地址之间的碎片大小更新所述包堆碎片大小,执行步骤S7-8 ; 步骤S7-8:所述java卡虚拟机判断所述包堆碎片大小是否为0,是则执行步骤S8,否则根据所述包堆碎片大小更新所述包堆剩余空间的起始偏移地址,执行步骤S8。
12.根据权利要求10所述的方法,其特征在于,所述步骤S8具体为: 步骤S8-1:所述java卡虚拟机初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址; 步骤S8-2:所述java卡虚拟机判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址,是则执行步骤S8-3,否则执行步骤S8-8 ; 步骤S8-3:所述java卡虚拟机记录所述对象偏移地址的初值的位置上的对象的大小,判断所述对象偏移地址的初值的位置上的对象是否需要回收,是则执行步骤S8-4,否则执行步骤S8-5 ; 步骤S8-4:所述java卡虚拟机根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大小,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空,执行步骤S8-7 ; 步骤S8-5:所述java卡虚拟机判断所述对象堆碎片大小是否为O,是则执行步骤S8-7,否则执行步骤S8-6 ; 步骤S8-6:所述java卡虚拟机根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上,将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值,执行步骤S8-7 ; 步骤S8-7:所述java卡虚拟机根据记录的所述对象的大小更新所述记录的对象偏移地址的初值,返回步骤S8-2 ; 步骤S8-8:所述java卡虚拟机判断所述对象堆碎片大小是否为O,是则执行步骤S8-10,否则执行步骤S8-9 ; 步骤S8-9:所述java卡虚拟机根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址,执行步 骤S8-10 ; 步骤S8-10:所述java卡虚拟机清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,返回步骤SI。
13.根据权利要求12所述的方法,其特征在于,所述步骤S5与步骤S6之间包括:所述java卡虚拟机判断获取到的所述对象偏移地址是否为空,是则提示错误,返回步骤SI,否则执行步骤S6。
14.根据权利要求1所述的方法,其特征在于,所述步骤SI中判断所述指令的类型,还包括,若是垃圾回收指令则执行步骤S9 ; 步骤S9:所述java卡虚拟机扫描对象堆,将所述对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中,返回步骤SI。
15.根据权利要求14所述的方法,其特征在于,所述步骤S9具体为: 步骤S9-1:所述java卡虚拟机初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址; 步骤S9-2:所述java卡虚拟机判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址,是则执行步骤S9-3,否则执行步骤S9-8 ; 步骤S9-3:所述java卡虚拟机记录所述对象偏移地址的初值的位置上的对象的大小,判断所述对象偏移地址的初值的位置上的对象是否需要回收,是则执行步骤S9-4,否则执行步骤S9-5 ; 步骤S9-4:所述java卡虚拟机根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大小,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空,执行步骤S9-7 ; 步骤S9-5:所述java卡虚拟机判断所述对象堆碎片大小是否为O,是则执行步骤S9-7,否则执行步骤S9-6 ; 步骤S9-6:所述java卡虚拟机根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值,执行步骤S9-7 ; 步骤S9-7:所述java卡虚拟机根据记录的所述对象的大小更新所述记录的对象偏移地址的初值,返回步骤S9-2 ; 步骤S9-8:所述java卡虚拟机判断所述对象堆碎片大小是否为O,是则执行步骤S9-10,否则执行步骤S9-9 ; 步骤S9-9:所述java卡虚拟机根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址,执行步骤S9-10 ; 步骤S9-10:所述java卡虚拟机清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,返回步骤SI。
16.根据权利要求15所述的方法,其特征在于,所述步骤S5与步骤S6之间包括:所述java卡虚拟机判断获取到的所述对象偏移地址是否为空,是则提示错误,返回步骤SI,否则执行步骤S6。
17.根据权利要求10或14所述的方法,其特征在于,所述步骤SI之前包括: 步骤SO:所述java卡虚拟机根据系统信息中在对象堆碎片进行合并过程中记录的所述对象堆碎片大小判断是否需要进行掉电恢复,是则执行步骤S10,否则执行步骤SI ; 步骤SlO:所述java卡虚拟机根据系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值进行掉电恢复后,执行步骤SI。
18.根据权利要求17所述的方法,其特征在于,所述步骤SlO包括: 步骤S10-1:所述java卡虚拟机获取所述系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值; 步骤S10-2:所述java卡虚拟机扫描对象堆,将所述对象堆中使用的所述对象偏移地址的初值更新为记录的所述对象偏移地址的终值,获取所述对象堆的尾地址; 步骤S10-3:所述java卡虚拟机根据所述记录的对象偏移地址的终值的位置上的对象的大小更新记录的对象偏移地址的初值,判断所述记录的对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址,是则执行步骤S10-4,否则执行步骤S10-6 ; 步骤S10-4:所述java卡虚拟机根据所述记录的对象偏移地址的初值和所述对象堆碎片大小更新所述记录的对象偏移地址的终值,将所述记录的对象偏移地址的初值的位置上的对象移动到所述记录的对象偏移地址的终值的位置上; 步骤S10-5:所述java卡虚拟机将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值,返回步骤S10-3 ; 步骤S10-6:所述java卡虚拟机根据所述对象堆碎片大小更新所述系统信息中的所述对象堆剩余空间的起始偏移地址,清空所述系统信息中记录的对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,执行步骤SI。
19.一种可进行高效对象管理的装置,其特征在于,所述装置包括:接收模块、第一判断模块、第一获取模块、第二获取模块、创建模块、第三获取模块和修改模块;所述接收模块,用于接收来自当前应用程序的指令; 所述第一判断模块,用于判断所述接收模块接收到的所述指令的类型; 所述第一获取模块,用于在所述第一判断模块判断所述指令的类型为创建对象指令时,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述创建对象指令获取对象大小、对象类型和对象地址位置; 所述第二获取模块,用于从系统信息中获取对象堆的剩余空间的起始偏移地址;所述创建模块,用于将所述第二获取模块获取到的所述对象堆的剩余空间的起始偏移地址作为创建的对象的偏移地址,按照所述第一获取模块获取到的所述对象大小和所述对象类型创建对象,根据所述对象大小更新所述系统信息中的所述对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将所述创建的对象的偏移地址存入到当前应用实例中与所述对象地址位置对应的位置中; 所述第三获取模块,用于在所述第一判断模块判断所述指令的类型为修改对象指令时,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述修改对象指令获取修改位置和修改内容; 所述修改模块,用于根据所述第三获取模块获取到的所述对象偏移地址和所述修改位置,将所述对象偏移地址上的对象中所述修改位置上的数据修改为所述第三获取模块获取到的所述修改内容。
20.根据权利 要求19所述的装置,其特征在于,所述接收模块还用于接收用户发送的选择应用指令; 所述装置还包括查找模块和提示模块; 所述查找模块,用于根据所述接收模块接收到的所述选择应用指令获取应用ID,根据所述应用ID查找对应的应用程序,并判断是否查找到与所述应用ID对应的应用程序,是则将查找到的所述应用程序作为当前应用程序; 所述提示模块,用于在所述查找模块未查找到与所述应用ID对应的应用程序时,提示错误; 所述接收模块还用于在所述查找模块查找到与所述应用ID对应的应用程序时,进行工作。
21.根据权利要求19所述的装置,其特征在于,所述第一获取模块包括:第一编译单元和第一获取单元; 所述第一编译单元,用于对所述创建对象指令进行编译,得到第一编译指令; 所述第一获取单元,用于根据所述第一编译单元编译得到的所述第一编译指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述第一编译单元编译得到的所述第一编译指令获取对象大小、对象类型和对象地址位置。
22.根据权利要求19所述的装置,其特征在于,所述第一获取模块具体用于在所述第一判断模块判断所述指令的类型为创建对象指令时,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,从所述创建对象指令中获取所述对象大小,根据所述创建对象指令获取对象类型和对象地址位置。
23.根据权利要求19所述的装置,其特征在于,所述第一获取模块具体用于在所述第一判断模块判断所述指令的类型为创建对象指令时,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,从所述创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述对象大小,根据所述创建对象指令获取对象类型和对象地址位置。
24.根据权利要求19所述的装置,其特征在于,所述装置还包括第四获取模块、第二判断丰旲块和提旲块; 所述第四获取模块,用于从所述系统信息中获取对象堆大小,根据所述对象堆大小和所述对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大小; 所述第二判断模块,用于判断所述对象堆的剩余空间大小是否大于所述对象大小; 所述提示模块,用于在所述第二判断模块判断为否时,提示错误; 所述创建模块还用于在所述第二判断模块判断为是时,进行工作。
25.根据权利要求19所述的装置,其特征在于,所述第三获取模块包括:第二编译单元和第二获取单元; 所述第二编译单元,用于对所述修改对象指令进行编译,得到第二编译指令; 所述第二获取单元,用于根据所述第二编译单元编译得到的所述第二编译指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述第二编译指令获取修改位置和修改内容。
26.根据权利要求19所述的装置,其特征在于,所述第三获取模块具体用于在所述第一判断模块判断所述指令的类型为修改对象指令时,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,从所述修改对象指令中获取所述修改内容,根据所述修改对象指令获取修改位置。
27.根据权利要求19所述的装置,其特征在于,所述第三获取模块具体用于在所述第一判断模块判断所述指令的类型为修改对象指令时,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,从所述修改对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述修改内容,根据所述修改对象指令获取修改位置。
28.根据权利要求19所述的装置,其特征在于,所述装置还包括第一合并模块和第二合并模块; 所述第一合并模块,用于在所述第一判断模块判断所述指令的类型为删包指令时,扫描包堆,根据所述包堆中的组件的偏移地址计算出包堆碎片,对所述包堆碎片进行合并; 所述第二合并模块,用于在所述第一合并模块对所述包堆碎片进行合并后,扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。
29.根据权利要求28所述的装置,其特征在于,所述第一合并模块包括:第三获取单元、第一判断单元、查找单元、第四获取单元、第一更新单元、第二判断单元、第一移动单元、第二更新单元和第三更新单元; 所述第三获取单元,用于在所述第一判断模块判断所述指令的类型为删包指令时,获取所述包堆的最高偏移地址,并将其作为当前偏移地址; 所述第一判断单元,用于判断所述当前偏移地址是否大于包堆剩余空间的起始偏移地址; 所述查找单元,用于当所述第一判断单元判断当前偏移地址大于包堆剩余空间的起始偏移地址时,在所述包堆中查找偏移地址小于当前偏移地址的组件,判断是否查找到偏移地址小于当前偏移地址的组件; 所述第四获取单元,用于当所述查找单元查找到偏移地址小于当前偏移地址的组件时,在查找到的所述组件中获取偏移地址最大的组件作为当前组件的相邻组件,根据当前偏移地址与所述相邻组件的偏移地址之间的碎片大小更新包堆碎片大小; 所述第一更新单元,用于根据所述第四获取单元获取到的所述相邻组件的偏移地址更新当前偏移地址,根据当前偏移地址更新当前组件; 所述第二判断单元,用于判断所述包堆碎片大小是否为O ; 所述第一移动单元,用于当所述第二判断单元判断为否时,根据所述包堆碎片大小,将当前组件向高地址方向移动; 所述第二更新单元,用于当所述查找单元查找不到偏移地址小于当前偏移地址的组件时,根据当前偏移地址与所述包堆剩余空间的起始偏移地址之间的碎片大小更新所述包堆碎片大小; 所述第三更新单元,用于根据所述包堆碎片大小更新所述包堆剩余空间的起始偏移地址。
30.根据权利要求28所述的装置,其特征在于,所述第二合并模块包括:第五获取单元、第三判断单元、第一记录单元、第四判断单元、第四更新单元、第一设置单元、第五判断单元、第五更新单元、第二移动单元、第六更新单元、第七更新单元、第八更新单元和第一清除单元; 所述第五获取单元,用于初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址; 所述第三判断单元,用于判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址; 所述第一记录单元,用于当所述第三判断单元判断为是时,记录所述对象偏移地址的初值的位置上的对象的大小; 所述第四判断单元,用于判断所述对象偏移地址的初值的位置上的对象是否需要回收; 所述第四更新单元,用于当所述第四判断单元判断为是时,根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大小; 所述第一设置单元,用于当所述第四判断单元判断为是时,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空; 所述第五判断单元,用于判断所述对象堆碎片大小是否为O ; 所述第五更新单元,用于当所述第五判断单元判断为否时,根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值; 所述第二移动单元,用于当第五更新单元更新所述对象偏移地址的终值后,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上; 所述第六更新单元,用于当所述第二移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值; 所述第七更新单元,用于当所述第五判断单元判断为否时,或当所述第一设置模块将所述对象堆中使用所述对象偏移地址的初值的位置设置为空后,或当所述第六更新单元将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值后,根据记录的所述对象的大小更新所述系统信息中的所述对象偏移地址的初值; 所述第八更新单元,用于根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址; 所述第一清除单元,用于清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。
31.根据权利要求30所述的装置,其特征在于,所述装置还包括:第三判断模块和提示模块; 所述第三判断模块,用于在所述第三获取模块获取到所述对象偏移地址后,判断获取到的所述对象偏移地 址是否为空; 所述提示模块,用于在所述第三判断模块判断为是时,提示错误; 所述修改模块还用于在所述第三判断模块判断为否时,进行工作。
32.根据权利要求19所述的装置,其特征在于,所述装置还包括第三合并模块; 所述第三合并模块,用于在所述第一判断模块判断所述指令的类型为垃圾回收时,扫描对象堆,将所述对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。
33.根据权利要求32所述的装置,其特征在于,所述第三合并模块包括:第六获取单元、第六判断单元、第二记录单元、第七判断单元、第九更新单元、第二设置单元、第八判断单元、第十更新单元、第三移动单元、第十一更新单元、第十二更新单元、第十三更新单元和第二清除单元; 所述第六获取单元,用于初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址; 所述第六判断单元,用于判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址; 所述第二记录单元,用于当所述第六判断单元判断为是时,记录所述对象偏移地址的初值的位置上的对象的大小; 所述第七判断单元,用于判断所述对象偏移地址的初值的位置上的对象是否需要回收; 所述第九更新单元,用于当所述第七判断单元判断为是时,根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大小; 所述第二设置单元,用于当所述第七判断单元判断为是时,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空;所述第八判断单元,用于判断所述对象堆碎片大小是否为O ; 所述第十更新单元,用于当所述第八判断单元判断为否时,根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值; 所述第三移动单元,用于当第十更新单元更新所述对象偏移地址的终值后,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上; 所述第十一更新单元,用于当所述第三移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值; 所述第十二更新单元,用于当所述第八判断单元判断为否时,或当所述第二设置模块将所述对象堆中使用所述对象偏移地址的初值的位置设置为空后,或当所述第十一更新单元将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值后,根据记录的所述对象的大小更新所述系统信息中的所述对象偏移地址的初值; 所述第十三更新单 元,用于根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址; 所述第二清除单元,用于清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。
34.根据权利要求33所述的装置,其特征在于,所述装置还包括:第四判断模块和提示模块; 所述第四判断模块,用于在所述第三获取模块获取到所述对象偏移地址后,判断获取到的所述对象偏移地址是否为空; 所述提示模块,用于在所述第四判断模块判断为是时,提示错误; 所述修改模块还用于在所述第四判断模块判断为否时,进行工作。
35.根据权利要求28或32所述的装置,其特征在于,所述装置还包括第五判断模块和掉电恢复模块; 所述第五判断模块,用于根据系统信息中在对象堆碎片进行合并过程中记录的所述对象堆碎片大小判断是否需要进行掉电恢复; 所述掉电恢复模块,用于在所述第五判断模块判断为是时,根据系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值进行掉电恢复; 所述接收模块还用于在所述第六判断模块判断为否时,或所述掉电恢复模块进行掉电恢复后,进行工作。
36.根据权利要求35所述的装置,其特征在于,所述掉电恢复模块包括:第七获取单元、第十四更新单元、第八获取单元、第十五更新单元、第九判断单元、第十六更新单元、第四移动单元、第十七更新单元和第十八更新单元; 所述第七获取单元,用于获取所述系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值; 所述第十四更新单元,用于在所述第七获取单元获取到所述对象偏移地址的初值和所述对象偏移地址的终值后,扫描对象堆,将所述对象堆中使用的所述对象偏移地址的初值更新为记录的所述对象偏移地址的终值; 所述第八获取单元,用于在所述第七获取单元获取到所述对象偏移地址的初值和所述对象偏移地址的终值后,获取所述对象堆的尾地址; 所述第十五更新单元,用于根据所述记录的对象偏移地址的终值的位置上的对象的大小更新记录的对象偏移地址的初值; 所述第九判断单元,用于在所述第十五更新单元更新所述记录的对象偏移地址的初值后,判断所述记录的对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址;所述第十六更新单元,用于在所述第十三判断单元判断为是时,根据所述记录的对象偏移地址的初值和所述对象堆碎片大小更新所述记录的对象偏移地址的终值; 所述第四移动单元,用于在所述第十六更新单元更新所述记录的对象偏移地址的终值后,将所述记录的对象偏移地址的初值的位置上的对象移动到所述记录的对象偏移地址的终值的位置上; 所述第十七更新单元,用于在所述第四移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值;所述第十八更新单元,用于在所述第十三判断单元判断为否时,根据所述对象堆碎片大小更新所述系统信息中的所述对象堆剩余空间的起始偏移地址,清空系统信息中记录的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。
【文档编号】G06F9/455GK103955395SQ201410174222
【公开日】2014年7月30日 申请日期:2014年4月28日 优先权日:2014年4月28日
【发明者】陆舟, 于华章 申请人:飞天诚信科技股份有限公司

最新回复(0)