• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 44
    • 下载费用:30 金币  

    重庆时时彩怎么追豹子: 一种可进行高效对象管理的方法及装置.pdf

    关 键 词:
    一种 进行 高效 对象 管理 方法 装置
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201410174222.5

    申请日:

    2014.04.28

    公开号:

    CN103955395A

    公开日:

    2014.07.30

    当前法律状态:

    授权

    有效性:

    有权

    法律详情: 授权|||实质审查的生效IPC(主分类):G06F 9/455申请日:20140428|||公开
    IPC分类号: G06F9/455 主分类号: G06F9/455
    申请人: 飞天诚信科技股份有限公司
    发明人: 陆舟; 于华章
    地址: 100085 北京市海淀区学清路9号汇智大厦B楼17层
    优先权:
    专利代理机构: 代理人:
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201410174222.5

    授权公告号:

    ||||||

    法律状态公告日:

    2017.02.22|||2014.08.27|||2014.07.30

    法律状态类型:

    授权|||实质审查的生效|||公开

    摘要

    本发明公开一种可进行高效对象管理的方法和装置,包括:S1:java卡虚拟机接收来自当前应用程序的指令,若是创建对象指令则执行S2,若是修改对象指令则执行S5;S2:根据创建对象指令获取当前应用实例、对象大小、对象类型和对象地址位置;S3:从系统信息中获取对象堆的剩余空间的起始偏移地址;S4:按照对象大小和对象类型创建对象,更新对象堆的剩余空间的起始偏移地址,将创建的对象的偏移地址存入当前应用实例中,返回S1;S5:根据修改对象指令获取对象偏移地址、修改位置和修改内容;S6:将对象偏移地址上的对象的所述修改位置上的数据修改为所述修改内容,返回S1。

    权利要求书

    权利要求书
    1.  一种可进行高效对象管理的方法,其特征在于,所述方法包括:
    步骤S1:java卡虚拟机接收来自当前应用程序的指令,判断所述指令的类型,若是创建对象指令则执行步骤S2,若是修改对象指令则执行步骤S5;
    步骤S2:所述java卡虚拟机根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述创建对象指令获取对象大小、对象类型和对象地址位置;
    步骤S3:所述java卡虚拟机从系统信息中获取对象堆的剩余空间的起始偏移地址;
    步骤S4:所述java卡虚拟机将所述对象堆的剩余空间的起始偏移地址作为创建的对象的偏移地址,按照所述对象大小和所述对象类型创建对象,根据所述对象大小更新所述系统信息中的所述对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将所述创建的对象的偏移地址存入到当前应用实例中与所述对象地址位置对应的位置中,返回步骤S1;
    步骤S5:所述java卡虚拟机根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述修改对象指令获取修改位置和修改内容;
    步骤S6:所述java卡虚拟机根据所述对象偏移地址和所述修改位置,将所述对象偏移地址上的对象中所述修改位置上的数据修改为所述修改内容,返回步骤S1。

    2.  根据权利要求1所述的方法,其特征在于,所述步骤S1之前还包括:所述java卡虚拟机接收用户发送的选择应用指令,根据所述选择应用指令获取应用ID,根据所述应用ID查找对应的应用程序,并判断是否查找到与所述应用 ID对应的应用程序,是则将查找到的所述应用程序作为当前应用程序,执行步骤S1,否则提示错误,结束。

    3.  根据权利要求1所述的方法,其特征在于,所述步骤S2具体为:所述java卡虚拟机对所述创建对象指令进行编译,得到第一编译指令,根据所述第一编译指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述第一编译指令获取对象大小、对象类型和对象地址位置。

    4.  根据权利要求1所述的方法,其特征在于,所述步骤S2中根据所述创建对象指令获取对象大小为:所述java卡虚拟机从所述创建对象指令中获取所述对象大小。

    5.  根据权利要求1所述的方法,其特征在于,所述步骤S2中根据所述创建对象指令获取对象大小为:所述java卡虚拟机从所述创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述对象大小。

    6.  根据权利要求1所述的方法,其特征在于,所述步骤S3与步骤S4之间包括:所述java卡虚拟机从所述系统信息中获取对象堆大小,根据所述对象堆大小和所述对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大小,判断所述对象堆的剩余空间大小是否大于所述对象大小,是则执行步骤S4,否则提示错误,返回步骤S1。

    7.  根据权利要求1所述的方法,其特征在于,所述步骤S5具体为:所述java卡虚拟机对所述修改对象指令进行编译,得到第二编译指令,根据所述第二编译指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述第二编译指令获取修改位置和修改内容。

    8.  根据权利要求1所述的方法,其特征在于,所述步骤S5中根据所述修改对象指令获取修改内容为:所述java卡虚拟机从所述修改对象指令中获取所述修改内容。

    9.  根据权利要求1所述的方法,其特征在于,所述步骤S5中根据所述修改对象指令获取修改内容为:所述java卡虚拟机从所述修改对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述修改内容。

    10.  根据权利要求1所述的方法,其特征在于,所述步骤S1中判断所述指令的类型,还包括,若是删包指令则执行步骤S7;
    步骤S7:所述java卡虚拟机扫描包堆,根据所述包堆中的组件的偏移地址计算出包堆碎片,对所述包堆碎片进行合并,执行步骤S8;
    步骤S8:所述java卡虚拟机扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中,返回步骤S1。

    11.  根据权利要求10所述的方法,其特征在于,所述步骤S7具体为:
    步骤S7-1:所述java卡虚拟机获取所述包堆的最高偏移地址,并将其作为当前偏移地址;
    步骤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卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤S8-7,否则执行步骤S8-6;
    步骤S8-6:所述java卡虚拟机根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上,将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值,执行步骤S8-7;
    步骤S8-7:所述java卡虚拟机根据记录的所述对象的大小更新所述记录的对象偏移地址的初值,返回步骤S8-2;
    步骤S8-8:所述java卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤S8-10,否则执行步骤S8-9;
    步骤S8-9:所述java卡虚拟机根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址,执行步骤S8-10;
    步骤S8-10:所述java卡虚拟机清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,返回步骤S1。

    13.  根据权利要求12所述的方法,其特征在于,所述步骤S5与步骤S6之间包括:所述java卡虚拟机判断获取到的所述对象偏移地址是否为空,是则提示错误,返回步骤S1,否则执行步骤S6。

    14.  根据权利要求1所述的方法,其特征在于,所述步骤S1中判断所述指令的类型,还包括,若是垃圾回收指令则执行步骤S9;
    步骤S9:所述java卡虚拟机扫描对象堆,将所述对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中,返回步骤S1。

    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卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤S9-7,否则执行步骤S9-6;
    步骤S9-6:所述java卡虚拟机根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值,执行步骤S9-7;
    步骤S9-7:所述java卡虚拟机根据记录的所述对象的大小更新所述记录的对象偏移地址的初值,返回步骤S9-2;
    步骤S9-8:所述java卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤S9-10,否则执行步骤S9-9;
    步骤S9-9:所述java卡虚拟机根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址,执行步骤S9-10;
    步骤S9-10:所述java卡虚拟机清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,返回步骤S1。

    16.  根据权利要求15所述的方法,其特征在于,所述步骤S5与步骤S6之间包括:所述java卡虚拟机判断获取到的所述对象偏移地址是否为空,是则提示错误,返回步骤S1,否则执行步骤S6。

    17.  根据权利要求10或14所述的方法,其特征在于,所述步骤S1之前包括:
    步骤S0:所述java卡虚拟机根据系统信息中在对象堆碎片进行合并过程中记录的所述对象堆碎片大小判断是否需要进行掉电恢复,是则执行步骤S10,否则执行步骤S1;
    步骤S10:所述java卡虚拟机根据系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值进行掉电恢复后,执行步骤S1。

    18.  根据权利要求17所述的方法,其特征在于,所述步骤S10包括:
    步骤S10-1:所述java卡虚拟机获取所述系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值;
    步骤S10-2:所述java卡虚拟机扫描对象堆,将所述对象堆中使用的所述对象偏移地址的初值更新为记录的所述对象偏移地址的终值,获取所述对象堆的尾地址;
    步骤S10-3:所述java卡虚拟机根据所述记录的对象偏移地址的终值的位置上的对象的大小更新记录的对象偏移地址的初值,判断所述记录的对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址,是则执行步骤S10-4,否则执行步骤S10-6;
    步骤S10-4:所述java卡虚拟机根据所述记录的对象偏移地址的初值和所述对象堆碎片大小更新所述记录的对象偏移地址的终值,将所述记录的对象偏移地址的初值的位置上的对象移动到所述记录的对象偏移地址的终值的位置上;
    步骤S10-5:所述java卡虚拟机将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值,返回步骤S10-3;
    步骤S10-6:所述java卡虚拟机根据所述对象堆碎片大小更新所述系统信息中的所述对象堆剩余空间的起始偏移地址,清空所述系统信息中记录的对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,执行步骤S1。

    19.  一种可进行高效对象管理的装置,其特征在于,所述装置包括:接收???、第一判断???、第一获取???、第二获取???、创建???、第三获取??楹托薷哪??;
    所述接收???,用于接收来自当前应用程序的指令;
    所述第一判断???,用于判断所述接收??榻邮盏降乃鲋噶畹睦嘈?;
    所述第一获取???,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀唇ǘ韵笾噶钍?,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述创建对象指令获取对象大小、对象类型和对象地址位置;
    所述第二获取???,用于从系统信息中获取对象堆的剩余空间的起始偏移地址;
    所述创建???,用于将所述第二获取??榛袢〉降乃龆韵蠖训氖S嗫占涞钠鹗计频刂纷魑唇ǖ亩韵蟮钠频刂?,按照所述第一获取??榛袢〉降乃龆韵蟠笮『退龆韵罄嘈痛唇ǘ韵?,根据所述对象大小更新所述系统信息中的所述对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将所述创建的对象的偏移地址存入到当前应用实例中与所述对象地址位置对应的位置中;
    所述第三获取???,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀薷亩韵笾噶钍?,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述修改对象指令获取修改位置和修改内容;
    所述修改???,用于根据所述第三获取??榛袢〉降乃龆韵笃频刂泛退鲂薷奈恢?,将所述对象偏移地址上的对象中所述修改位置上的数据修改为所述第三获取??榛袢〉降乃鲂薷哪谌?。

    20.  根据权利要求19所述的装置,其特征在于,所述接收??榛褂糜诮邮沼没Х⑺偷难≡裼τ弥噶?;
    所述装置还包括查找??楹吞崾灸??;
    所述查找???,用于根据所述接收??榻邮盏降乃鲅≡裼τ弥噶罨袢∮τ肐D,根据所述应用ID查找对应的应用程序,并判断是否查找到与所述应用ID对应的应用程序,是则将查找到的所述应用程序作为当前应用程序;
    所述提示???,用于在所述查找??槲床檎业接胨鲇τ肐D对应的应用程序时,提示错误;
    所述接收??榛褂糜谠谒霾檎夷?椴檎业接胨鲇τ肐D对应的应用程序时,进行工作。

    21.  根据权利要求19所述的装置,其特征在于,所述第一获取??榘ǎ旱谝槐嘁氲ピ偷谝换袢〉ピ?;
    所述第一编译单元,用于对所述创建对象指令进行编译,得到第一编译指令;
    所述第一获取单元,用于根据所述第一编译单元编译得到的所述第一编译指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述第一编译单元编译得到的所述第一编译指令获取对象大小、对象类型和对象地址位置。

    22.  根据权利要求19所述的装置,其特征在于,所述第一获取??榫咛逵糜谠谒龅谝慌卸夏?榕卸纤鲋噶畹睦嘈臀唇ǘ韵笾噶钍?,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,从所述创建对象指令中获取所述对象大小,根据所述创建对象指令获取对象类型和对象地址位置。

    23.  根据权利要求19所述的装置,其特征在于,所述第一获取??榫咛逵糜谠谒龅谝慌卸夏?榕卸纤鲋噶畹睦嘈臀唇ǘ韵笾噶钍?,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,从所述创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述对象大小,根据所述创建对象指令获取对象类型和对象地址位置。

    24.  根据权利要求19所述的装置,其特征在于,所述装置还包括第四获取???、第二判断??楹吞崾灸??;
    所述第四获取???,用于从所述系统信息中获取对象堆大小,根据所述对象堆大小和所述对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大??;
    所述第二判断???,用于判断所述对象堆的剩余空间大小是否大于所述对象大??;
    所述提示???,用于在所述第二判断??榕卸衔袷?,提示错误;
    所述创建??榛褂糜谠谒龅诙卸夏?榕卸衔鞘?,进行工作。

    25.  根据权利要求19所述的装置,其特征在于,所述第三获取??榘ǎ旱诙嘁氲ピ偷诙袢〉ピ?;
    所述第二编译单元,用于对所述修改对象指令进行编译,得到第二编译指令;
    所述第二获取单元,用于根据所述第二编译单元编译得到的所述第二编译指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述第二编译指令获取修改位置和修改内容。

    26.  根据权利要求19所述的装置,其特征在于,所述第三获取??榫咛逵糜谠谒龅谝慌卸夏?榕卸纤鲋噶畹睦嘈臀薷亩韵笾噶钍?,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,从所述修改对象指令中获取所述修改内容,根据所述修改对象指令获取修改位置。

    27.  根据权利要求19所述的装置,其特征在于,所述第三获取??榫咛逵糜谠谒龅谝慌卸夏?榕卸纤鲋噶畹睦嘈臀薷亩韵笾噶钍?,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,从所述修改对象指令中获取存储区的偏移地址和数据在存储区中 的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述修改内容,根据所述修改对象指令获取修改位置。

    28.  根据权利要求19所述的装置,其特征在于,所述装置还包括第一合并??楹偷诙喜⒛??;
    所述第一合并???,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀景噶钍?,扫描包堆,根据所述包堆中的组件的偏移地址计算出包堆碎片,对所述包堆碎片进行合并;
    所述第二合并???,用于在所述第一合并??槎运霭阉槠泻喜⒑?,扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。

    29.  根据权利要求28所述的装置,其特征在于,所述第一合并??榘ǎ旱谌袢〉ピ?、第一判断单元、查找单元、第四获取单元、第一更新单元、第二判断单元、第一移动单元、第二更新单元和第三更新单元;
    所述第三获取单元,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀景噶钍?,获取所述包堆的最高偏移地址,并将其作为当前偏移地址;
    所述第一判断单元,用于判断所述当前偏移地址是否大于包堆剩余空间的起始偏移地址;
    所述查找单元,用于当所述第一判断单元判断当前偏移地址大于包堆剩余空间的起始偏移地址时,在所述包堆中查找偏移地址小于当前偏移地址的组件, 判断是否查找到偏移地址小于当前偏移地址的组件;
    所述第四获取单元,用于当所述查找单元查找到偏移地址小于当前偏移地址的组件时,在查找到的所述组件中获取偏移地址最大的组件作为当前组件的相邻组件,根据当前偏移地址与所述相邻组件的偏移地址之间的碎片大小更新包堆碎片大??;
    所述第一更新单元,用于根据所述第四获取单元获取到的所述相邻组件的偏移地址更新当前偏移地址,根据当前偏移地址更新当前组件;
    所述第二判断单元,用于判断所述包堆碎片大小是否为0;
    所述第一移动单元,用于当所述第二判断单元判断为否时,根据所述包堆碎片大小,将当前组件向高地址方向移动;
    所述第二更新单元,用于当所述查找单元查找不到偏移地址小于当前偏移地址的组件时,根据当前偏移地址与所述包堆剩余空间的起始偏移地址之间的碎片大小更新所述包堆碎片大??;
    所述第三更新单元,用于根据所述包堆碎片大小更新所述包堆剩余空间的起始偏移地址。

    30.  根据权利要求28所述的装置,其特征在于,所述第二合并??榘ǎ旱谖寤袢〉ピ?、第三判断单元、第一记录单元、第四判断单元、第四更新单元、第一设置单元、第五判断单元、第五更新单元、第二移动单元、第六更新单元、第七更新单元、第八更新单元和第一清除单元;
    所述第五获取单元,用于初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址;
    所述第三判断单元,用于判断所述对象偏移地址的初值是否小于所述对象 堆剩余空间的起始偏移地址;
    所述第一记录单元,用于当所述第三判断单元判断为是时,记录所述对象偏移地址的初值的位置上的对象的大??;
    所述第四判断单元,用于判断所述对象偏移地址的初值的位置上的对象是否需要回收;
    所述第四更新单元,用于当所述第四判断单元判断为是时,根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大??;
    所述第一设置单元,用于当所述第四判断单元判断为是时,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空;
    所述第五判断单元,用于判断所述对象堆碎片大小是否为0;
    所述第五更新单元,用于当所述第五判断单元判断为否时,根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值;
    所述第二移动单元,用于当第五更新单元更新所述对象偏移地址的终值后,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上;
    所述第六更新单元,用于当所述第二移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值;
    所述第七更新单元,用于当所述第五判断单元判断为否时,或当所述第一设置??榻龆韵蠖阎惺褂盟龆韵笃频刂返某踔档奈恢蒙柚梦蘸?,或当所述第六更新单元将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值后,根据记录的所述对象的大小更新所述系统信息中的所述对象偏移地址的初值;
    所述第八更新单元,用于根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址;
    所述第一清除单元,用于清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。

    31.  根据权利要求30所述的装置,其特征在于,所述装置还包括:第三判断??楹吞崾灸??;
    所述第三判断???,用于在所述第三获取??榛袢〉剿龆韵笃频刂泛?,判断获取到的所述对象偏移地址是否为空;
    所述提示???,用于在所述第三判断??榕卸衔鞘?,提示错误;
    所述修改??榛褂糜谠谒龅谌卸夏?榕卸衔袷?,进行工作。

    32.  根据权利要求19所述的装置,其特征在于,所述装置还包括第三合并???;
    所述第三合并???,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀厥帐?,扫描对象堆,将所述对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。

    33.  根据权利要求32所述的装置,其特征在于,所述第三合并??榘ǎ旱诹袢〉ピ?、第六判断单元、第二记录单元、第七判断单元、第九更新单元、第二设置单元、第八判断单元、第十更新单元、第三移动单元、第十一更新单元、第十二更新单元、第十三更新单元和第二清除单元;
    所述第六获取单元,用于初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址;
    所述第六判断单元,用于判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址;
    所述第二记录单元,用于当所述第六判断单元判断为是时,记录所述对象偏移地址的初值的位置上的对象的大??;
    所述第七判断单元,用于判断所述对象偏移地址的初值的位置上的对象是否需要回收;
    所述第九更新单元,用于当所述第七判断单元判断为是时,根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大??;
    所述第二设置单元,用于当所述第七判断单元判断为是时,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空;
    所述第八判断单元,用于判断所述对象堆碎片大小是否为0;
    所述第十更新单元,用于当所述第八判断单元判断为否时,根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值;
    所述第三移动单元,用于当第十更新单元更新所述对象偏移地址的终值后,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上;
    所述第十一更新单元,用于当所述第三移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值;
    所述第十二更新单元,用于当所述第八判断单元判断为否时,或当所述第二设置??榻龆韵蠖阎惺褂盟龆韵笃频刂返某踔档奈恢蒙柚梦蘸?, 或当所述第十一更新单元将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值后,根据记录的所述对象的大小更新所述系统信息中的所述对象偏移地址的初值;
    所述第十三更新单元,用于根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址;
    所述第二清除单元,用于清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。

    34.  根据权利要求33所述的装置,其特征在于,所述装置还包括:第四判断??楹吞崾灸??;
    所述第四判断???,用于在所述第三获取??榛袢〉剿龆韵笃频刂泛?,判断获取到的所述对象偏移地址是否为空;
    所述提示???,用于在所述第四判断??榕卸衔鞘?,提示错误;
    所述修改??榛褂糜谠谒龅谒呐卸夏?榕卸衔袷?,进行工作。

    35.  根据权利要求28或32所述的装置,其特征在于,所述装置还包括第五判断??楹偷舻缁指茨??;
    所述第五判断???,用于根据系统信息中在对象堆碎片进行合并过程中记录的所述对象堆碎片大小判断是否需要进行掉电恢复;
    所述掉电恢复???,用于在所述第五判断??榕卸衔鞘?,根据系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值进行掉电恢复;
    所述接收??榛褂糜谠谒龅诹卸夏?榕卸衔袷?,或所述掉电恢复??榻械舻缁指春?,进行工作。

    36.  根据权利要求35所述的装置,其特征在于,所述掉电恢复??榘ǎ旱谄呋袢〉ピ?、第十四更新单元、第八获取单元、第十五更新单元、第九判断单元、第十六更新单元、第四移动单元、第十七更新单元和第十八更新单元;
    所述第七获取单元,用于获取所述系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值;
    所述第十四更新单元,用于在所述第七获取单元获取到所述对象偏移地址的初值和所述对象偏移地址的终值后,扫描对象堆,将所述对象堆中使用的所述对象偏移地址的初值更新为记录的所述对象偏移地址的终值;
    所述第八获取单元,用于在所述第七获取单元获取到所述对象偏移地址的初值和所述对象偏移地址的终值后,获取所述对象堆的尾地址;
    所述第十五更新单元,用于根据所述记录的对象偏移地址的终值的位置上的对象的大小更新记录的对象偏移地址的初值;
    所述第九判断单元,用于在所述第十五更新单元更新所述记录的对象偏移地址的初值后,判断所述记录的对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址;
    所述第十六更新单元,用于在所述第十三判断单元判断为是时,根据所述记录的对象偏移地址的初值和所述对象堆碎片大小更新所述记录的对象偏移地址的终值;
    所述第四移动单元,用于在所述第十六更新单元更新所述记录的对象偏移地址的终值后,将所述记录的对象偏移地址的初值的位置上的对象移动到所述 记录的对象偏移地址的终值的位置上;
    所述第十七更新单元,用于在所述第四移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值;所述第十八更新单元,用于在所述第十三判断单元判断为否时,根据所述对象堆碎片大小更新所述系统信息中的所述对象堆剩余空间的起始偏移地址,清空系统信息中记录的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。

    说明书

    说明书一种可进行高效对象管理的方法及装置
    技术领域
    本发明涉及java卡技术领域,尤其涉及一种可进行高效对象管理的方法及装置。 
    背景技术
    java卡中使用对象来保存一些数据,对象包括对象头和数据域,对象头和数据域可以分开存储,也可以连续存储。永久性对象的对象头和数据域顺序排列的存储在EEPROM中;临时对象的对象头和数据域是分开存储的,其中对象头存储在EEPROM中,而数据域存储在RAM中。永久性对象和临时对象的对象头在EEPROM中按创建的先后顺序排列。java卡运行时需要创建新对象,然后对这些对象进行管理。 
    目前,java卡虚拟机中基于对象表的对象管理方法中,java卡虚拟机中包括子对象表和主对象表,其中子对象表的表项中存储对象的偏移地址,主对象表的表项中存储子对象表的偏移地址,在对对象进行操作时,首先根据对象的主对象表索引值在主对象表中查找对应的子对象表的偏移地址,再根据对象的子对象表索引值在子对象表中查找对象的偏移地址,根据查找到的对象的偏移地址计算对象的绝对地址,之后再对象进行操作;在垃圾回收过程中,也需要根据被回收对象的主对象表索引值在主对象表中查找对应的子对象表的偏移地址,再根据被回收对象的子对象表索引值在子对象表中查找被回收对象的偏移地址,将查找到的偏移地址清空。因此,java卡虚拟机中基于对象表的对象管理方法中,java卡虚拟机需要进行两次查表操作,操作流程复杂,效率低,耗时多。 
    发明内容
    本发明的目的是为了克服现有技术的不足,提供一种可进行高效对象管理的方法及装置,在对对象进行操作时不需查找子对象表和主对象表,简化了java卡虚拟机的操作流程,提高java卡虚拟机工作效率。 
    本发明提供的一种可进行高效对象管理的方法,包括: 
    步骤S1:java卡虚拟机接收来自当前应用程序的指令,判断所述指令的类型,若是创建对象指令则执行步骤S2,若是修改对象指令则执行步骤S5; 
    步骤S2:所述java卡虚拟机根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述创建对象指令获取对象大小、对象类型和对象地址位置; 
    步骤S3:所述java卡虚拟机从系统信息中获取对象堆的剩余空间的起始偏移地址; 
    步骤S4:所述java卡虚拟机将所述对象堆的剩余空间的起始偏移地址作为创建的对象的偏移地址,按照所述对象大小和所述对象类型创建对象,根据所述对象大小更新所述系统信息中的所述对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将所述创建的对象的偏移地址存入到当前应用实例中与所述对象地址位置对应的位置中,返回步骤S1; 
    步骤S5:所述java卡虚拟机根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述修改对象指令获取修改位置和修改内容; 
    步骤S6:所述java卡虚拟机根据所述对象偏移地址和所述修改位置,将所述对象偏移地址上的对象中所述修改位置上的数据修改为所述修改内容,返回步骤S1。 
    所述步骤S1之前还包括:所述java卡虚拟机接收用户发送的选择应用指令,根据所述选择应用指令获取应用ID,根据所述应用ID查找对应的应用程序,并判断是否查找到与所述应用ID对应的应用程序,是则将查找到的所述应用程序作为当前应用程序,执行步骤S1,否则提示错误,结束。 
    所述步骤S2具体为:所述java卡虚拟机对所述创建对象指令进行编译,得到第一编译指令,根据所述第一编译指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述第一编译指令获取对象大小、对象类型和对象地址位置。 
    所述步骤S2中根据所述创建对象指令获取对象大小为:所述java卡虚拟机从所述创建对象指令中获取所述对象大小。 
    所述步骤S2中根据所述创建对象指令获取对象大小为:所述java卡虚拟机从所述创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述对象大小。 
    所述步骤S3与步骤S4之间包括:所述java卡虚拟机从所述系统信息中获取对象堆大小,根据所述对象堆大小和所述对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大小,判断所述对象堆的剩余空间大小是否大于所述对象大小,是则执行步骤S4,否则提示错误,返回步骤S1。 
    所述步骤S5具体为:所述java卡虚拟机对所述修改对象指令进行编译,得到第二编译指令,根据所述第二编译指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述第二编译指令获取修改位置和修改内容。 
    所述步骤S5中根据所述修改对象指令获取修改内容为:所述java卡虚拟机从所述修改对象指令中获取所述修改内容。 
    所述步骤S5中根据所述修改对象指令获取修改内容为:所述java卡虚拟机从所述修改对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述修改内容。 
    所述步骤S1中判断所述指令的类型,还包括,若是删包指令则执行步骤S7; 
    步骤S7:所述java卡虚拟机扫描包堆,根据所述包堆中的组件的偏移地址计算出包堆碎片,对所述包堆碎片进行合并,执行步骤S8; 
    步骤S8:所述java卡虚拟机扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中,返回步骤S1。 
    所述步骤S7具体为: 
    步骤S7-1:所述java卡虚拟机获取所述包堆的最高偏移地址,并将其作为 当前偏移地址; 
    步骤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。 
    所述步骤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卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤S8-7,否则执行步骤S8-6; 
    步骤S8-6:所述java卡虚拟机根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上,将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值,执行步骤S8-7; 
    步骤S8-7:所述java卡虚拟机根据记录的所述对象的大小更新所述记录的对象偏移地址的初值,返回步骤S8-2; 
    步骤S8-8:所述java卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤S8-10,否则执行步骤S8-9; 
    步骤S8-9:所述java卡虚拟机根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址,执行步骤S8-10; 
    步骤S8-10:所述java卡虚拟机清空所述系统信息中的所述对象偏移地址 的初值、所述对象偏移地址的终值和所述对象堆碎片大小,返回步骤S1。 
    所述步骤S5与步骤S6之间包括:所述java卡虚拟机判断获取到的所述对象偏移地址是否为空,是则提示错误,返回步骤S1,否则执行步骤S6。 
    所述步骤S1中判断所述指令的类型,还包括,若是垃圾回收指令则执行步骤S9; 
    步骤S9:所述java卡虚拟机扫描对象堆,将所述对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中,返回步骤S1。 
    所述步骤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卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤S9-7,否则执行步骤S9-6; 
    步骤S9-6:所述java卡虚拟机根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值,执行步骤S9-7; 
    步骤S9-7:所述java卡虚拟机根据记录的所述对象的大小更新所述记录的对象偏移地址的初值,返回步骤S9-2; 
    步骤S9-8:所述java卡虚拟机判断所述对象堆碎片大小是否为0,是则执行步骤S9-10,否则执行步骤S9-9; 
    步骤S9-9:所述java卡虚拟机根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址,执行步骤S9-10; 
    步骤S9-10:所述java卡虚拟机清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,返回步骤S1。 
    所述步骤S5与步骤S6之间包括:所述java卡虚拟机判断获取到的所述对象偏移地址是否为空,是则提示错误,返回步骤S1,否则执行步骤S6。 
    所述步骤S1之前包括: 
    步骤S0:所述java卡虚拟机根据系统信息中在对象堆碎片进行合并过程中记录的所述对象堆碎片大小判断是否需要进行掉电恢复,是则执行步骤S10,否则执行步骤S1; 
    步骤S10:所述java卡虚拟机根据系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值进行掉电恢复后,执行步骤S1。 
    所述步骤S10包括: 
    步骤S10-1:所述java卡虚拟机获取所述系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值; 
    步骤S10-2:所述java卡虚拟机扫描对象堆,将所述对象堆中使用的所述对象偏移地址的初值更新为记录的所述对象偏移地址的终值,获取所述对象堆的尾地址; 
    步骤S10-3:所述java卡虚拟机根据所述记录的对象偏移地址的终值的位置上的对象的大小更新记录的对象偏移地址的初值,判断所述记录的对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址,是则执行步骤S10-4,否则执行步骤S10-6; 
    步骤S10-4:所述java卡虚拟机根据所述记录的对象偏移地址的初值和所述对象堆碎片大小更新所述记录的对象偏移地址的终值,将所述记录的对象偏移地址的初值的位置上的对象移动到所述记录的对象偏移地址的终值的位置上; 
    步骤S10-5:所述java卡虚拟机将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值,返回步骤S10-3; 
    步骤S10-6:所述java卡虚拟机根据所述对象堆碎片大小更新所述系统信息中的所述对象堆剩余空间的起始偏移地址,清空所述系统信息中记录的对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小,执行步骤 S1。 
    一种可进行高效对象管理的装置,包括:接收???、第一判断???、第一获取???、第二获取???、创建???、第三获取??楹托薷哪??; 
    所述接收???,用于接收来自当前应用程序的指令; 
    所述第一判断???,用于判断所述接收??榻邮盏降乃鲋噶畹睦嘈?; 
    所述第一获取???,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀唇ǘ韵笾噶钍?,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述创建对象指令获取对象大小、对象类型和对象地址位置; 
    所述第二获取???,用于从系统信息中获取对象堆的剩余空间的起始偏移地址; 
    所述创建???,用于将所述第二获取??榛袢〉降乃龆韵蠖训氖S嗫占涞钠鹗计频刂纷魑唇ǖ亩韵蟮钠频刂?,按照所述第一获取??榛袢〉降乃龆韵蟠笮『退龆韵罄嘈痛唇ǘ韵?,根据所述对象大小更新所述系统信息中的所述对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将所述创建的对象的偏移地址存入到当前应用实例中与所述对象地址位置对应的位置中; 
    所述第三获取???,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀薷亩韵笾噶钍?,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述修改对象指令获取修改位置和修改内容; 
    所述修改???,用于根据所述第三获取??榛袢〉降乃龆韵笃频刂泛?nbsp;所述修改位置,将所述对象偏移地址上的对象中所述修改位置上的数据修改为所述第三获取??榛袢〉降乃鲂薷哪谌?。 
    所述接收??榛褂糜诮邮沼没Х⑺偷难≡裼τ弥噶?; 
    所述装置还包括查找??楹吞崾灸??; 
    所述查找???,用于根据所述接收??榻邮盏降乃鲅≡裼τ弥噶罨袢∮τ肐D,根据所述应用ID查找对应的应用程序,并判断是否查找到与所述应用ID对应的应用程序,是则将查找到的所述应用程序作为当前应用程序; 
    所述提示???,用于在所述查找??槲床檎业接胨鲇τ肐D对应的应用程序时,提示错误; 
    所述接收??榛褂糜谠谒霾檎夷?椴檎业接胨鲇τ肐D对应的应用程序时,进行工作。 
    所述第一获取??榘ǎ旱谝槐嘁氲ピ偷谝换袢〉ピ?; 
    所述第一编译单元,用于对所述创建对象指令进行编译,得到第一编译指令; 
    所述第一获取单元,用于根据所述第一编译单元编译得到的所述第一编译指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,根据所述第一编译单元编译得到的所述第一编译指令获取对象大小、对象类型和对象地址位置。 
    所述第一获取??榫咛逵糜谠谒龅谝慌卸夏?榕卸纤鲋噶畹睦嘈臀唇ǘ韵笾噶钍?,根据所述创建对象指令获取与所述当前应用程序对应的应用实 例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,从所述创建对象指令中获取所述对象大小,根据所述创建对象指令获取对象类型和对象地址位置。 
    所述第一获取??榫咛逵糜谠谒龅谝慌卸夏?榕卸纤鲋噶畹睦嘈臀唇ǘ韵笾噶钍?,根据所述创建对象指令获取与所述当前应用程序对应的应用实例的偏移地址,将所述偏移地址上的应用实例作为当前应用实例,从所述创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述对象大小,根据所述创建对象指令获取对象类型和对象地址位置。 
    所述装置还包括第四获取???、第二判断??楹吞崾灸??; 
    所述第四获取???,用于从所述系统信息中获取对象堆大小,根据所述对象堆大小和所述对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大??; 
    所述第二判断???,用于判断所述对象堆的剩余空间大小是否大于所述对象大??; 
    所述提示???,用于在所述第二判断??榕卸衔袷?,提示错误; 
    所述创建??榛褂糜谠谒龅诙卸夏?榕卸衔鞘?,进行工作。 
    所述第三获取??榘ǎ旱诙嘁氲ピ偷诙袢〉ピ?; 
    所述第二编译单元,用于对所述修改对象指令进行编译,得到第二编译指 令; 
    所述第二获取单元,用于根据所述第二编译单元编译得到的所述第二编译指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,根据所述第二编译指令获取修改位置和修改内容。 
    所述第三获取??榫咛逵糜谠谒龅谝慌卸夏?榕卸纤鲋噶畹睦嘈臀薷亩韵笾噶钍?,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,从所述修改对象指令中获取所述修改内容,根据所述修改对象指令获取修改位置。 
    所述第三获取??榫咛逵糜谠谒龅谝慌卸夏?榕卸纤鲋噶畹睦嘈臀薷亩韵笾噶钍?,根据所述修改对象指令获取对象地址位置,根据所述对象地址位置从当前应用实例中获取对象偏移地址,从所述修改对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据所述存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为所述修改内容,根据所述修改对象指令获取修改位置。 
    所述装置还包括第一合并??楹偷诙喜⒛??; 
    所述第一合并???,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀景噶钍?,扫描包堆,根据所述包堆中的组件的偏移地址计算出包堆碎片,对所述包堆碎片进行合并; 
    所述第二合并???,用于在所述第一合并??槎运霭阉槠泻喜⒑?,扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合 并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。 
    所述第一合并??榘ǎ旱谌袢〉ピ?、第一判断单元、查找单元、第四获取单元、第一更新单元、第二判断单元、第一移动单元、第二更新单元和第三更新单元; 
    所述第三获取单元,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀景噶钍?,获取所述包堆的最高偏移地址,并将其作为当前偏移地址; 
    所述第一判断单元,用于判断所述当前偏移地址是否大于包堆剩余空间的起始偏移地址; 
    所述查找单元,用于当所述第一判断单元判断当前偏移地址大于包堆剩余空间的起始偏移地址时,在所述包堆中查找偏移地址小于当前偏移地址的组件,判断是否查找到偏移地址小于当前偏移地址的组件; 
    所述第四获取单元,用于当所述查找单元查找到偏移地址小于当前偏移地址的组件时,在查找到的所述组件中获取偏移地址最大的组件作为当前组件的相邻组件,根据当前偏移地址与所述相邻组件的偏移地址之间的碎片大小更新包堆碎片大??; 
    所述第一更新单元,用于根据所述第四获取单元获取到的所述相邻组件的偏移地址更新当前偏移地址,根据当前偏移地址更新当前组件; 
    所述第二判断单元,用于判断所述包堆碎片大小是否为0; 
    所述第一移动单元,用于当所述第二判断单元判断为否时,根据所述包堆碎片大小,将当前组件向高地址方向移动; 
    所述第二更新单元,用于当所述查找单元查找不到偏移地址小于当前偏移 地址的组件时,根据当前偏移地址与所述包堆剩余空间的起始偏移地址之间的碎片大小更新所述包堆碎片大??; 
    所述第三更新单元,用于根据所述包堆碎片大小更新所述包堆剩余空间的起始偏移地址。 
    所述第二合并??榘ǎ旱谖寤袢〉ピ?、第三判断单元、第一记录单元、第四判断单元、第四更新单元、第一设置单元、第五判断单元、第五更新单元、第二移动单元、第六更新单元、第七更新单元、第八更新单元和第一清除单元; 
    所述第五获取单元,用于初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址; 
    所述第三判断单元,用于判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址; 
    所述第一记录单元,用于当所述第三判断单元判断为是时,记录所述对象偏移地址的初值的位置上的对象的大??; 
    所述第四判断单元,用于判断所述对象偏移地址的初值的位置上的对象是否需要回收; 
    所述第四更新单元,用于当所述第四判断单元判断为是时,根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大??; 
    所述第一设置单元,用于当所述第四判断单元判断为是时,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空; 
    所述第五判断单元,用于判断所述对象堆碎片大小是否为0; 
    所述第五更新单元,用于当所述第五判断单元判断为否时,根据所述对象偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地 址的终值; 
    所述第二移动单元,用于当第五更新单元更新所述对象偏移地址的终值后,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上; 
    所述第六更新单元,用于当所述第二移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值; 
    所述第七更新单元,用于当所述第五判断单元判断为否时,或当所述第一设置??榻龆韵蠖阎惺褂盟龆韵笃频刂返某踔档奈恢蒙柚梦蘸?,或当所述第六更新单元将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值后,根据记录的所述对象的大小更新所述系统信息中的所述对象偏移地址的初值; 
    所述第八更新单元,用于根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址; 
    所述第一清除单元,用于清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。 
    所述装置还包括:第三判断??楹吞崾灸??; 
    所述第三判断???,用于在所述第三获取??榛袢〉剿龆韵笃频刂泛?,判断获取到的所述对象偏移地址是否为空; 
    所述提示???,用于在所述第三判断??榕卸衔鞘?,提示错误; 
    所述修改??榛褂糜谠谒龅谌卸夏?榕卸衔袷?,进行工作。 
    所述装置还包括第三合并???; 
    所述第三合并???,用于在所述第一判断??榕卸纤鲋噶畹睦嘈臀厥帐?,扫描对象堆,将所述对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。 
    所述第三合并??榘ǎ旱诹袢〉ピ?、第六判断单元、第二记录单元、第七判断单元、第九更新单元、第二设置单元、第八判断单元、第十更新单元、第三移动单元、第十一更新单元、第十二更新单元、第十三更新单元和第二清除单元; 
    所述第六获取单元,用于初始化所述系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址; 
    所述第六判断单元,用于判断所述对象偏移地址的初值是否小于所述对象堆剩余空间的起始偏移地址; 
    所述第二记录单元,用于当所述第六判断单元判断为是时,记录所述对象偏移地址的初值的位置上的对象的大??; 
    所述第七判断单元,用于判断所述对象偏移地址的初值的位置上的对象是否需要回收; 
    所述第九更新单元,用于当所述第七判断单元判断为是时,根据记录的所述对象的大小更新所述系统信息中的所述对象堆碎片大??; 
    所述第二设置单元,用于当所述第七判断单元判断为是时,将所述对象堆中使用所述对象偏移地址的初值的位置设置为空; 
    所述第八判断单元,用于判断所述对象堆碎片大小是否为0; 
    所述第十更新单元,用于当所述第八判断单元判断为否时,根据所述对象 偏移地址的初值和所述对象堆碎片大小更新所述系统信息中的所述对象偏移地址的终值; 
    所述第三移动单元,用于当第十更新单元更新所述对象偏移地址的终值后,将所述对象偏移地址的初值的位置上的对象移动到所述对象偏移地址的终值的位置上; 
    所述第十一更新单元,用于当所述第三移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值; 
    所述第十二更新单元,用于当所述第八判断单元判断为否时,或当所述第二设置??榻龆韵蠖阎惺褂盟龆韵笃频刂返某踔档奈恢蒙柚梦蘸?,或当所述第十一更新单元将所述对象堆中使用的所述对象偏移地址的初值更新为所述对象偏移地址的终值后,根据记录的所述对象的大小更新所述系统信息中的所述对象偏移地址的初值; 
    所述第十三更新单元,用于根据所述对象堆碎片大小更新所述对象堆剩余空间的起始偏移地址; 
    所述第二清除单元,用于清空所述系统信息中的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。 
    所述装置还包括:第四判断??楹吞崾灸??; 
    所述第四判断???,用于在所述第三获取??榛袢〉剿龆韵笃频刂泛?,判断获取到的所述对象偏移地址是否为空; 
    所述提示???,用于在所述第四判断??榕卸衔鞘?,提示错误; 
    所述修改??榛褂糜谠谒龅谒呐卸夏?榕卸衔袷?,进行工作。 
    所述装置还包括第五判断??楹偷舻缁指茨??; 
    所述第五判断???,用于根据系统信息中在对象堆碎片进行合并过程中记录的所述对象堆碎片大小判断是否需要进行掉电恢复; 
    所述掉电恢复???,用于在所述第五判断??榕卸衔鞘?,根据系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值进行掉电恢复; 
    所述接收??榛褂糜谠谒龅诹卸夏?榕卸衔袷?,或所述掉电恢复??榻械舻缁指春?,进行工作。 
    所述掉电恢复??榘ǎ旱谄呋袢〉ピ?、第十四更新单元、第八获取单元、第十五更新单元、第九判断单元、第十六更新单元、第四移动单元、第十七更新单元和第十八更新单元; 
    所述第七获取单元,用于获取所述系统信息中在对象堆碎片进行合并过程中记录的所述对象偏移地址的初值和所述对象偏移地址的终值; 
    所述第十四更新单元,用于在所述第七获取单元获取到所述对象偏移地址的初值和所述对象偏移地址的终值后,扫描对象堆,将所述对象堆中使用的所述对象偏移地址的初值更新为记录的所述对象偏移地址的终值; 
    所述第八获取单元,用于在所述第七获取单元获取到所述对象偏移地址的初值和所述对象偏移地址的终值后,获取所述对象堆的尾地址; 
    所述第十五更新单元,用于根据所述记录的对象偏移地址的终值的位置上的对象的大小更新记录的对象偏移地址的初值; 
    所述第九判断单元,用于在所述第十五更新单元更新所述记录的对象偏移地址的初值后,判断所述记录的对象偏移地址的初值是否小于所述对象堆剩余 空间的起始偏移地址; 
    所述第十六更新单元,用于在所述第十三判断单元判断为是时,根据所述记录的对象偏移地址的初值和所述对象堆碎片大小更新所述记录的对象偏移地址的终值; 
    所述第四移动单元,用于在所述第十六更新单元更新所述记录的对象偏移地址的终值后,将所述记录的对象偏移地址的初值的位置上的对象移动到所述记录的对象偏移地址的终值的位置上; 
    所述第十七更新单元,用于在所述第四移动单元移动对象后,将所述对象堆中使用的所述对象偏移地址的初值更新为所述记录的对象偏移地址的终值; 
    所述第十八更新单元,用于在所述第十三判断单元判断为否时,根据所述对象堆碎片大小更新所述系统信息中的所述对象堆剩余空间的起始偏移地址,清空系统信息中记录的所述对象偏移地址的初值、所述对象偏移地址的终值和所述对象堆碎片大小。 
    本发明与现有技术相比,具有以下优点: 
    本专利提出一种可进行高效对象管理的方法及装置,在对对象进行操作时不需查找子对象表和主对象表,简化了java卡虚拟机的操作流程,提高java卡虚拟机工作效率。 
    附图说明
    图1为本发明实施例一提供的一种可进行高效对象管理的方法的流程图; 
    图2为本发明实施例二提供的一种可进行高效对象管理的方法的流程图; 
    图3为本发明实施例二提供的NewObj应用实例的示意图; 
    图4为本发明实施例三提供的扫描包堆,根据包堆中的组件的偏移地址计 算出包堆碎片,对包堆碎片进行合并的方法的流程图; 
    图5为本发明实施例四提供的扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象第一偏移地址的初值、对象第二偏移地址的终值和对象堆碎片大小记录到系统信息中的方法的流程图; 
    图6、图7和图8为本发明实施例四提供的对象堆的示意图。 
    图9为本发明实施例五提供的根据系统信息中在对象堆碎片进行合并过程中记录的对象偏移地址的初值和对象偏移地址的终值进行掉电恢复的方法的流程图; 
    图10和图11为本发明实施例五提供的对象堆的示意图; 
    图12为本发明实施例六提供的一种可进行高效对象管理的装置的??橥?。 
    具体实施方式
    下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例?;诒痉⒚髦械氖凳├?,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明?;さ姆段?。 
    java卡应用的开发过程为:开发者写一个或多个java类,用java编译器编译源码,产生一个或多个class文件;java卡虚拟机指令是以操作码与操作数的形式描述的;每一个操作码都有一个助记符作为它的名字;在java卡虚拟机指令执行时,通过隐式地从操作数栈中取指令的操作数,即操作数在运行时被计算,操作数由操作栈提供; 
    java卡应用程序准备被下载到java卡虚拟机上时,使用java卡Converter将包含了java卡应用的class文件转换成CAP(converted applet)文件;java卡Converted是对组成一个包的所有java API类文件进行预处理的软件,它将 一个包转换成CAP文件;CAP文件包含将被安装在java卡虚拟机上的一个包的类的二进制表达,用于在java卡虚拟机上执行包的类;CAP文件由12个组件组成,具体为:头组件、目录组件、应用组件、导入组件、常量池组件、类组件、方法组件、静态域组件、位置引用组件、导出组件、描述符组件、调试组件;其中,常量池组件由条目组成,条目为被该CAP文件的方法组件中的元素引用的每一个类、方法以及域的引用;在java卡虚拟机中,java卡应用程序以字节码的形式被执行; 
    例如,NewObj应用程序中有数组对象obj1和4个方法,4个方法分别是install、register、selectingApplet和process,则生成的常量池为: 


    第0个位置为NewObj应用程序的数组对象obj1的条目,第1个位置为NewObj应用程序的数组对象obj2的条目,第2个位置为NewObj应用程序引用的包的静态初始化方法条目,第7个位置为NewObj应用实例的条目,第3、4、5、6个位置为NewObj应用程序调用到的方法的条目。 
    实施例1 
    本发明的实施例1提供一种可进行高效对象管理的方法,如图1所示,该方法包括: 
    步骤S1:java卡虚拟机接收来自当前应用程序的指令,判断指令的类型,若是创建对象指令则执行步骤S2,若是修改对象指令则执行步骤S5; 
    步骤S2:java卡虚拟机根据创建对象指令获取与当前应用程序对应的应用实例的偏移地址,将偏移地址上的应用实例作为当前应用实例,根据创建对象指令获取对象大小、对象类型和对象地址位置; 
    步骤S3:java卡虚拟机从系统信息中获取对象堆的剩余空间的起始偏移地址; 
    步骤S4:java卡虚拟机将对象堆的剩余空间的起始偏移地址作为创建的对象的偏移地址,按照对象大小和对象类型创建对象,根据对象大小更新系统信息中的对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将创建的对象的偏移地址存入到当前应用实例中与对象地址位置对应的位置中,返 回步骤S1; 
    步骤S5:java卡虚拟机根据修改对象指令获取对象地址位置,根据对象地址位置从当前应用实例中获取对象偏移地址,根据修改对象指令获取修改位置和修改内容; 
    步骤S6:java卡虚拟机根据对象偏移地址和修改位置,将对象偏移地址上的对象中修改位置上的数据修改为修改内容,返回步骤S1。 
    实施例2 
    本发明的实施例2提供一种可进行高效对象管理的方法,如图2所示,该方法包括: 
    步骤101:java卡虚拟机接收来自当前应用程序的指令,判断指令的类型,若是创建对象指令则执行步骤102,若是修改对象指令则执行步骤106,若是删包指令则执行步骤109,若是垃圾回收指令则执行步骤110; 
    具体地,该步骤之前还包括:java卡虚拟机接收用户发送的选择应用指令,根据选择应用指令获取应用ID,根据应用ID查找对应的应用程序,并判断是否查找到与应用ID对应的应用程序,是则将查找到的应用程序作为当前应用程序,执行步骤101,否则提示错误,结束; 
    步骤102:java卡虚拟机根据创建对象指令获取与当前应用程序对应的应用实例的偏移地址,将该偏移地址上的应用实例作为当前应用实例,根据创建对象指令获取对象大小、对象类型和对象地址位置; 
    具体地,java卡虚拟机对创建对象指令进行编译,得到第一编译指令,根据第一编译指令获取与当前应用程序对应的应用实例的偏移地址,将该偏移地址上的应用实例作为当前应用实例,根据第一编译指令获取对象大小、对象类 型和对象地址位置; 
    优选地,根据创建对象指令获取对象大小为:java卡虚拟机从创建对象指令中直接获取对象大??;除此之外,还可以为:java卡虚拟机从创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据存储区的偏移地址,在存储区中根据数据存储区中的位置获取数据,将获取到的数据作为对象大??; 
    步骤103:java卡虚拟机从系统信息中获取对象堆大小和对象堆的剩余空间的起始偏移地址,根据对象堆大小和对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大??; 
    步骤104:java卡虚拟机判断对象堆的剩余空间大小是否大于对象大小,是则执行步骤105,否则提示错误,返回步骤101; 
    具体地,本实施例中,对象堆是指java卡虚拟机中的一块EEPROM,专门用来存储对象,并且从低地址向高地址使用对象堆; 
    例如,java卡虚拟机创建大小为0x40的对象,若java卡虚拟机根据对象堆大小和对象堆的剩余空间的起始偏移地址得到的对象堆的剩余空间大小为0x30,0x30小于0x40,则对象堆剩余空间不足以存放创建的对象,创建对象失败,提示错误,返回步骤101;若java卡虚拟机根据对象堆大小和对象堆的剩余空间的起始偏移地址得到的对象堆的剩余空间为0x80,0x80大于0x40,则对象堆剩余空间可以存放创建的对象,则执行步骤105; 
    步骤105:java卡虚拟机将对象堆的剩余空间的起始偏移地址作为创建的对象的偏移地址,按照获取的对象大小和对象类型创建对象,根据对象大小更新系统信息中的对象堆的剩余空间的起始偏移地址,根据当前应用实例的偏移地址将创建的对象的偏移地址存入到当前应用实例中与对象地址位置对应的位置中,返回步骤101; 
    具体地,本实施例中,java卡虚拟机中记录对象堆的起始地址、对象堆的剩余空间的起始偏移地址及对象堆大??;由于对象堆是从低地址向高地址使用,所以对象堆剩余空间的起始偏移地址是对象堆剩余空间的最低地址;该步骤中,java卡虚拟机在对象堆中的最后一个对象之后,即对象堆的剩余空间的起始位置处,创建对象;java卡虚拟机根据对象大小更新系统信息中的对象堆的剩余空间的起始偏移地址具体为将对象堆剩余空间的起始偏移地址加上对象大??;对象地址位置为对象的偏移地址在当前应用实例的数据域中的位置; 
    例如,java卡虚拟机的系统信息中存储的对象堆的起始地址为“0x1111”,对象堆剩余空间的起始偏移地址为“0x0100”,对象堆的大小为“0x400”;对象大小为“0x0A”,则在对象堆的起始地址“0x1111”加上对象堆剩余空间的起始偏移地址“0x0100”,即“0x1211”处创建新对象;创建的对象的绝对地址为“0x1211”,创建的对象的偏移地址为“0x0100”,将对象堆剩余空间的起始偏移地址更新为“0x0100”加上对象大小为“0x0A”,即“0x010A”; 
    在java卡虚拟机中,当应用程序被安装后,会产生对应的应用实例,应用实例即该应用程序的对象,在创建对象后,java卡虚拟机把创建的对象的偏移地址放入应用实例中; 
    例如,本实施例中,对象堆中存在应用实例NewObj,包括对象头和数据域,对象头保存了NewObj应用实例的基本信息,数据域中的内容为对象的偏移地址,NewObj应用实例如图3所示,NewObj应用实例需要创建2个对象,分别是对象obj1和对象obj2;对象obj1的偏移地址在NewObj应用实例的数据域的第0个位置,对象obj2的偏移地址在NewObj应用实例的数据域的第1个位置;对象obj1在应用程序安装时被创建,其偏移地址为“0x0011”,则NewObj应用实例的数据域的第0个位置存储“0x0011”,此时,未创建对象obj2,则对象obj2 的偏移地址为“0x0000”,在NewObj应用实例的数据域的第1个位置存储“0x0000”;当java卡虚拟机接收到创建对象指令obj2=new byte[4]时,在对象堆中创建对象obj2,对象obj2的偏移地址为“0x0100”,则将obj2的偏移地址“0x0100”存入NewObj应用实例的数据域的第1个位置; 
    例如,创建对象指令为“obj1[]=new byte[18];”,则java卡虚拟机对创建对象指令“obj1[]=new byte[18];”进行编译,得到第一编译指令,即字节码为: 
    aload_0; 
    bspush18; 
    newarray11; 
    putfield_a0;//reference newObj/NewObj.obj1 
    java卡虚拟机首先执行“aload_0”,获取NewObj应用实例的偏移地址,将NewObj应用实例的偏移地址放入java卡虚拟机的操作栈中,然后执行“bspush18”,获取对象大小“18”,将byte型数据18放到java卡虚拟机的操作栈中,此时,java卡虚拟机的操作栈为“18NewObj应用实例的偏移地址”,再执行“newarray11”,获取对象类型“11”,11代表byte型,将对象大小“18”从操作栈中取出,java卡虚拟机创建一个byte型数组对象,其中将创建的数组对象的偏移地址放入java卡虚拟机的操作栈中,此时,java卡虚拟机的操作栈为“创建的数组对象的偏移地址NewObj应用实例的偏移地址”,最后执行“putfield_a0”,获取对象地址位置“0”,将创建的数组对象的偏移地址和NewObj应用实例的偏移地址从操作栈中取出,将创建的数组对象的偏移地址写入NewObj应用实例的数据域的第0个位置,完成创建对象; 
    再如,创建对象指令为“obj2=new byte[(short)(buf[5])];”,存储区 buf存储用户发来的数组,则java卡虚拟机对创建对象指令“obj2=newbyte[(short)(buf[5])];”进行编译,得到第一编译指令,即字节码为: 
    aload_0; 
    aload_2; 
    sconst_5; 
    baload; 
    newarray11; 
    putfield_a1;//reference newObj/NewObj.obj2 
    java卡虚拟机首先执行“aload_0”,获取NewObj应用实例的偏移地址,将NewObj应用实例的偏移地址放入java卡虚拟机的操作栈中,然后执行“aload_2”,获取存储区buf的偏移地址,将存储区buf的偏移地址放入java卡虚拟机的操作栈中,执行“sconst_5”,获取存储区中的位置“5”,将short型常数5放入java卡虚拟机的操作栈中,执行“baload”,将存储区buf的偏移地址和常数5从操作栈中弹出,获取存储区buf的第5个元素作为对象大小放入操作栈中,再执行“newarray11”,获取对象类型“11”,11代表byte型,将操作栈中的对象大小从操作栈中取出,java卡虚拟机创建一个byte型数组对象,将创建的数组对象的偏移地址放入java卡虚拟机的操作栈中,此时,java卡虚拟机的操作栈为“创建的数组对象的偏移地址NewObj应用实例的偏移地址”,最后执行“putfield_a1”,获取对象地址位置“1”,将创建的数组对象的偏移地址和NewObj应用实例的偏移地址从操作栈中取出,将创建的数组对象的偏移地址写入NewObj应用实例的数据域的第1个位置,完成创建对象; 
    步骤106:java卡虚拟机根据修改对象指令获取对象地址位置,根据对象地址位置从当前应用实例中获取对象偏移地址,根据修改对象指令获取修改位 置和修改内容; 
    具体地,java卡虚拟机对修改对象指令进行编译,得到第二编译指令,根据第二编译指令获取对象地址位置,根据对象地址位置从当前应用实例中获取对象偏移地址,根据第二编译指令获取修改位置和修改内容; 
    优选地,根据修改对象指令获取修改内容为:java卡虚拟机从修改对象指令中直接获取修改内容;除此之外,还可以为:java卡虚拟机从修改对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据存储区的偏移地址,在存储区中根据数据在存储区中的位置获取数据,将获取到的数据作为修改内容; 
    步骤107:java卡虚拟机判断获取到的对象偏移地址是否为空,是则提示错误,返回步骤101,否则执行步骤108; 
    步骤108:java卡虚拟机根据对象偏移地址和修改位置,将对象偏移地址上的对象中修改位置上的数据修改为修改内容,返回步骤101; 
    例如,修改对象指令为“obj1[(short)0]=(byte)0xAA;”,则java卡虚拟机对修改对象指令“obj1[(short)0]=(byte)0xAA;”进行编译,得到第二编译指令,即字节码为: 
    getfield_a_this0;//reference newObj/NewObj.obj1 
    sconst_0; 
    bspush-86; 
    bastore; 
    java卡虚拟机首先执行“getfield_a_this0”,获取对象地址位置“0”,将NewObj应用实例的数据域的第0个位置的值取出,即取出obj1的偏移地址,然后执行“sconst_0”,获取修改位置“0”,将short类型变量0压入操作栈中, 再执行“bspush-86”,获取修改内容“-86”,将byte类型变量0xAA(即-86)压入操作栈中,此时操作栈为“0xAA0obj1的偏移地址”;最后执行“bastore”,将“0xAA、0、obj1的偏移地址”都从操作栈中取出,将0xAA存入对象obj1的数据域的第0个位置,完成赋值; 
    又如,修改对象指令为“obj2[(short)0]=buf[5];”,存储区buf存储用户发来的数组,则java卡虚拟机对修改对象指令“obj2[(short)0]=buf[5];”进行编译,得到第二编译指令,即字节码为: 
    getfield_a_this1;//reference newObj/NewObj.obj2 
    sconst_0; 
    aload_2; 
    sconst_5; 
    baload; 
    bastore; 
    java卡虚拟机首先执行“getfield_a_this1”,获取对象地址位置“1”,将NewObj应用实例的数据域的第1个位置的值取出,即取出obj2的偏移地址,然后执行“sconst_0”,获取修改位置“0”,将short类型变量0压入操作栈中,再执行“aload_2”,获取存储区的偏移地址“2”,将存储区buf的偏移地址压入操作栈中,执行“sconst_5”,获取存储区中的位置“5”,将常数5放入操作栈中,执行“baload”,将存储区buf的地址和常数5从栈中弹出,获取存储区buf的第5个元素作为修改内容放入操作栈中,最后执行“bastore”,将操作栈中的“修改内容、0、obj1的偏移地址”都从操作栈中取出,将修改内容存入对象obj2的数据域的第0个位置,完成赋值; 
    步骤109:java卡虚拟机扫描包堆,根据包堆中的组件的偏移地址计算出 包堆碎片,对包堆碎片进行合并,执行步骤110; 
    具体地,本实施例中,包是指下载到java卡虚拟机中的cap文件;java卡虚拟机将下载的cap文件进行安装后,才能运行相应的java应用;包堆是指java卡虚拟机中的一块EEPROM,专门用来存储包,并且从高地址向低地址使用包堆;碎片存在于包堆和对象堆中,在包堆中,包堆碎片是由于移动包引起的包堆中的存储空间; 
    步骤110:java卡虚拟机扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中,返回步骤101; 
    具体地,java卡虚拟机扫描对象堆,通过移动对象堆中的对象使对象堆中已创建的对象连续排列,将对象堆中需要被回收的对象作为对象堆碎片进行合并,将不同对象之间的对象堆碎片集合成一个连续的存储空间; 
    本实施例中,下载到java卡虚拟机中的CAP文件存储在包堆中;包堆由包组成;碎片存在于包堆和对象堆中,在对象堆中,碎片是需要删除的对象,或者是由于移动对象引起的对象堆中的存储空间;在包堆中,碎片是由于移动包引起的包堆中的存储空间; 
    本实施例中,步骤101之前还包括: 
    步骤100:java卡虚拟机上电,根据系统信息中在对象堆碎片进行合并过程中记录的对象堆碎片大小判断是否需要进行掉电恢复,是则执行步骤111,否则执行步骤101; 
    具体地,java卡虚拟机判断对象堆碎片大小是否为0,是则表示垃圾回收操作中没有发生过掉电,不需要进行掉电恢复,否则表示垃圾回收操作中发生 过掉电,需要进行掉电恢复; 
    步骤111:java卡虚拟机根据系统信息中在对象堆碎片进行合并过程中记录的对象偏移地址的初值和对象偏移地址的终值进行掉电恢复后,执行步骤101; 
    本发明实施例2提供的一种可进行高效对象管理的方法,在对对象进行操作时不需查找子对象表和主对象表,简化了java卡虚拟机的操作流程,提高java卡虚拟机工作效率。 
    实施例3 
    本发明的实施例3在实施例2的基础上提供一种扫描包堆,根据包堆中的组件的偏移地址计算出包堆碎片,对包堆碎片进行合并的方法,如图4所示,该方法包括: 
    步骤109-1:java卡虚拟机获取包堆的最高偏移地址,并将其作为当前偏移地址; 
    本实施例中,包堆中的组件为包,包堆从高地址向低地址使用;当前偏移地址上的组件为当前组件,当前偏移地址减去当前组件的大小为当前组件的偏移首地址; 
    步骤109-2:java卡虚拟机判断当前偏移地址是否大于包堆剩余空间的起始偏移地址,是则执行步骤109-3;否则执行步骤109-8; 
    本实施例中的包堆剩余空间的起始偏移地址为系统信息中记录的最后一个组件的偏移地址或者java卡上电后初始化的组件的偏移地址;由于包堆是从高地址向低地址使用,所以包堆的剩余空间是从高地址到低地址,剩余空间的起始偏移地址为剩余空间的最高地址; 
    步骤109-3:java卡虚拟机在包堆中查找偏移地址小于当前偏移地址的组件,判断是否查找到偏移地址小于当前偏移地址的组件,是则执行步骤109-4,否则执行步骤109-7; 
    步骤109-4:java卡虚拟机在查找到的组件中获取偏移地址最大的组件作为当前组件的相邻组件,根据当前偏移地址与相邻组件的偏移地址之间的碎片大小更新包堆碎片大小,执行步骤109-5; 
    本实施例中的包堆碎片大小初始值为0; 
    具体地,根据当前偏移地址与相邻组件的偏移地址之间的碎片大小更新包堆碎片大小具体为:包堆碎片大小+[当前组件的偏移首地址-(相邻组件的偏移首地址+相邻组件的大小)]; 
    步骤109-5:java卡虚拟机更新当前偏移地址和当前组件,判断包堆碎片大小是否为0,是则返回步骤109-2,否则执行步骤109-6; 
    具体地,java卡虚拟机将当前偏移地址更新为相邻组件的偏移地址,则当前组件更新为当前偏移地址上的组件; 
    步骤109-6:java卡虚拟机将当前组件向高地址方向移动,返回步骤109-2; 
    具体地,当前组件移动的长度为包堆碎片大??; 
    步骤109-7:java卡虚拟机根据当前偏移地址与包堆剩余空间的起始偏移地址之间的碎片大小更新包堆碎片大小,执行步骤109-8; 
    本实施例中的包堆碎片大小初始值为0; 
    具体地,根据当前偏移地址与包堆剩余空间的起始偏移地址之间的碎片大小更新包堆碎片大小具体为:包堆碎片大小+(当前组件的偏移首地址-包堆剩余空间的起始偏移地址); 
    步骤109-8:java卡虚拟机判断包堆碎片大小是否为0,是则执行步骤110, 否则更新包堆剩余空间的起始偏移地址,执行步骤110; 
    具体地,将包堆剩余空间的起始偏移地址更新为包堆剩余空间的起始偏移地址加上包堆碎片大小。 
    实施例4 
    本发明的实施例4在实施例2的基础上提供一种扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象第一偏移地址的初值、对象第二偏移地址的终值和对象堆碎片大小记录到系统信息中的方法,如图5所示,对象堆中包括与应用程序对应的应用实例和应用程序创建的对象,本实施例中,与应用程序对应的应用实例和应用程序创建的对象均属于对象堆中的对象,该方法包括: 
    步骤110-1:java卡虚拟机初始化系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址; 
    具体地,java卡虚拟机将系统信息中的对象偏移地址的初值初始化为对象堆中第一个对象的偏移地址,即为0,将系统信息中的对象偏移地址的终值和对象堆碎片大小初始化为0; 
    例如,java卡虚拟机中对象堆的起始地址为“0x1111”,对象堆剩余空间的起始偏移地址为“0x010A”,对象偏移地址的初值和对象偏移地址的终值初始化为“0x0000”,对象堆碎片大小为0,如图6所示; 
    步骤110-2:java卡虚拟机判断对象偏移地址的初值是否小于对象堆剩余空间的起始偏移地址,是则执行步骤110-3,否则执行步骤110-8; 
    步骤110-3:java卡虚拟机记录对象偏移地址的初值的位置上的对象的大小,判断对象偏移地址的初值的位置上的对象是否需要回收,是则执行步骤 110-4,否则执行步骤110-5; 
    例如,对象偏移地址的初值是“0x0000”,对象偏移地址的初值的位置上的对象为对象obj1,对象obj1被标记,不需要删除; 
    例如,对象偏移地址的初值是“0x0014”,对象偏移地址的初值的位置上的对象为对象obj2,对象obj2没有被标记,需要删除; 
    步骤110-4:java卡虚拟机根据记录的对象的大小更新系统信息中的对象堆碎片大小,将对象堆中使用对象偏移地址的初值的位置设置为空,执行步骤110-7; 
    具体地,该步骤中,java卡虚拟机将系统信息中的对象堆碎片大小更新为对象堆碎片大小加上记录的对象的大??;对象堆中使用对象偏移地址的初值的位置存在于对象堆中的应用实例和对象中; 
    例如,如图7所示,若对象偏移地址的初值是“0x0014”,即对象偏移地址的初值的位置上的对象为对象obj2,对象obj2的大小是100,对象堆碎片大小加上100,即java卡虚拟机系统信息中记录的对象堆碎片大小更新为100;由于对象obj2被对象obj1引用,则将对象obj1的数据域中存储的对象偏移地址的初值“0x0014”的位置设置为空“0x0000”; 
    步骤110-5:java卡虚拟机判断对象堆碎片大小是否为0,是则执行步骤110-7,否则执行步骤110-6; 
    步骤110-6:java卡虚拟机根据对象偏移地址的初值和对象堆碎片大小更新系统信息中的对象偏移地址的终值,将对象偏移地址的初值的位置上的对象移动到对象偏移地址的终值的位置上,将对象堆中使用的对象偏移地址的初值更新为记录的对象偏移地址的终值,执行步骤110-7; 
    具体地,该步骤中,java卡虚拟机将系统信息中的对象偏移地址的终值更 新为对象偏移地址的初值减去对象堆碎片大??;对象堆中使用对象偏移地址的初值的位置存在于对象堆中的应用实例和对象中; 
    例如,如图7所示,若对象偏移地址的初值为“0x00DC”,即对象偏移地址的初值上的对象为对象obj4,对象堆碎片大小是200,则对象obj4需要向低地址方向移动200个字节,则系统信息中的对象偏移地址的终值更新为对象偏移地址的初值“0x00DC”减去对象堆碎片大小200,即系统信息中记录的对象偏移地址的终值更新为“0x0014”,对象obj1引用了对象obj4,将对象obj1的数据域中存储的对象偏移地址的初值“0x00DC”修改为对象偏移地址的终值“0x0014”;移动后的对象obj4如图8所示; 
    步骤110-7:java卡虚拟机根据记录的对象的大小更新记录的对象偏移地址的初值,返回步骤110-2; 
    具体地,java卡虚拟机将记录的对象偏移地址的初值更新为对象偏移地址的初值加上记录的对象的大??; 
    例如,对象偏移地址的初值是“0x00DC”,记录的对象的大小为对象obj4的大小30,则记录的对象偏移地址的初值更新为“0x00DC”加上30,即为“0x00FA”; 
    步骤110-8:java卡虚拟机判断对象堆碎片大小是否为0,是则执行步骤110-10,否则执行步骤110-9; 
    步骤110-9:java卡虚拟机根据对象堆碎片大小更新对象堆剩余空间的起始偏移地址,执行步骤110-10; 
    具体地,java卡虚拟机将对象堆剩余空间的起始偏移地址更新为对象堆剩余空间的起始偏移地址减去对象堆碎片大小的差; 
    步骤110-10:java卡虚拟机清空系统信息中的对象偏移地址的初值、对象 偏移地址的终值和对象堆碎片大小,垃圾回收结束,返回步骤101; 
    优选地,java卡虚拟机将系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小设置为0。 
    实施例5 
    本发明的实施例5在实施例2的基础上提供一种根据系统信息中的在对象堆碎片进行合并过程中所记录的对象偏移地址的初值和对象偏移地址的终值进行掉电恢复的方法,如图9所示,该方法包括: 
    步骤111-1:java卡虚拟机获取系统信息中在对象堆碎片进行合并过程中记录的对象偏移地址的初值和对象偏移地址的终值; 
    例如,java卡虚拟机的系统信息中在对象堆碎片进行合并过程中记录的对象偏移地址的初值为“0x00DC”,对象偏移地址的终值为“0x0014”,对象堆碎片大小为200; 
    步骤111-2:java卡虚拟机扫描对象堆,将对象堆中使用的对象偏移地址的初值更新为记录的对象偏移地址的终值,获取对象堆的尾地址; 
    例如,如图10和图11所示,若java卡虚拟机的系统信息中存储的对象偏移地址的初值为0x00DC,对象偏移地址的终值为0x0014,对象堆碎片大小为200;对象堆的起始地址为0x1111,对象堆剩余空间的起始偏移地址为“0x010A”;对象堆中从低地址向高地址分别是偏移地址为0x0000的对象obj1,对象obj1的大小为20,偏移地址为0x0014的对象obj3-2,对象obj3-2的大小为30,偏移地址为0x032的对象堆碎片,对象堆碎片大小为200,对象堆碎片中包含偏移地址为0x00DC的对象obj3-1,对象obj3-1的大小为30,偏移地址为0x00FA的对象obj4,对象obj4的大小为16;其中对象obj3-1和对象obj3-2是同一个 对象,对象obj3-2是对象obj3-1移动之后的对象,对象obj1是一个应用实例,引用了对象obj3-1;在上一次垃圾回收操作中,将对象obj3-1移动至对象obj3-2的位置后,发生掉电,出现对象obj3-1被移动,但是引用了该对象的对象还没有被修改的情况,本次上电时,需要进行掉电恢复;java卡虚拟机扫描对象堆,将对象堆中使用的对象obj3-1的偏移地址,即对象偏移地址的初值0x00DC,更新为对象obj3-2的偏移地址,即对象偏移地址的终值0x0014(参见图11); 
    步骤111-3:java卡虚拟机更新记录的对象偏移地址的初值,判断记录的对象偏移地址的初值是否小于对象堆剩余空间的起始偏移地址,是则执行步骤111-4,否则执行步骤111-6; 
    本实施例中,java卡虚拟机将记录的对象偏移地址的初值更新为对象偏移地址的初值与对象偏移地址的终值上的对象的大小之和;例如,对象偏移地址的初值为0x00DC,对象偏移地址的终值上的对象为对象obj3-2,对象obj3-2的大小为30,则记录的对象偏移地址的初值更新为对象偏移地址的初值0x00DC加上对象obj3-2的大小0x001E,即为0x00FA; 
    步骤111-4:java卡虚拟机根据记录的对象偏移地址的初值和对象堆碎片大小更新记录的对象偏移地址的终值,将记录的对象偏移地址的初值的位置上的对象移动到记录的对象偏移地址的终值的位置上; 
    具体地,java卡虚拟机将记录的对象偏移地址的终值更新为记录的对象偏移地址的初值减去对象堆碎片大??; 
    例如,对象偏移地址的初值是0x00FA,对象堆碎片大小是200,则记录的对象偏移地址的终值更新为对象偏移地址的初值0x00FA减去碎片大小200,即为0x0032; 
    步骤111-5:java卡虚拟机将对象堆中使用的对象偏移地址的初值更新为记录的对象偏移地址的终值,返回步骤111-3; 
    步骤111-6:java卡虚拟机根据对象堆碎片大小更新系统信息中的对象堆剩余空间的起始偏移地址,清空系统信息中记录的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,掉电恢复结束,执行步骤101; 
    具体地,java卡虚拟机将系统信息中记录的对象堆剩余空间的起始偏移地址更新为对象堆剩余空间的起始偏移地址减去对象堆碎片大小的值。 
    实施例6 
    本发明的实施例6提供一种可进行高效对象管理的装置,如图12所示,该装置包括:接收???01、第一判断???02、第一获取???03、第二获取???04、创建???05、第三获取???06和修改???07; 
    接收???01,用于接收来自当前应用程序的指令; 
    第一判断???02,用于判断接收???01接收到的指令的类型; 
    第一获取???03,用于在第一判断???02判断指令的类型为创建对象指令时,根据创建对象指令获取与当前应用程序对应的应用实例的偏移地址,将偏移地址上的应用实例作为当前应用实例,根据创建对象指令获取对象大小、对象类型和对象地址位置; 
    第二获取???04,用于从系统信息中获取对象堆的剩余空间的起始偏移地址; 
    创建???05,用于将第二获取???04获取到的对象堆的剩余空间的起始偏移地址作为创建的对象的偏移地址,按照第一获取???03获取到的对象大小和对象类型创建对象,根据对象大小更新系统信息中的对象堆的剩余空间的 起始偏移地址,根据当前应用实例的偏移地址将创建的对象的偏移地址存入到当前应用实例中与对象地址位置对应的位置中; 
    第三获取???06,用于在第一判断???02判断指令的类型为修改对象指令时,根据修改对象指令获取对象地址位置,根据对象地址位置从当前应用实例中获取对象偏移地址,根据修改对象指令获取修改位置和修改内容; 
    修改???07,用于根据第三获取???06获取到的对象偏移地址和修改位置,将对象偏移地址上的对象中修改位置上的数据修改为第三获取???06获取到的修改内容。 
    接收???01还用于接收用户发送的选择应用指令; 
    装置还包括查找??楹吞崾灸??; 
    查找???,用于根据接收???01接收到的选择应用指令获取应用ID,根据应用ID查找对应的应用程序,并判断是否查找到与应用ID对应的应用程序,是则将查找到的应用程序作为当前应用程序; 
    提示???,用于在查找??槲床檎业接胗τ肐D对应的应用程序时,提示错误; 
    接收???01还用于在查找??椴檎业接胗τ肐D对应的应用程序时,进行工作。 
    第一获取???03包括:第一编译单元和第一获取单元; 
    第一编译单元,用于对创建对象指令进行编译,得到第一编译指令; 
    第一获取单元,用于根据第一编译单元编译得到的第一编译指令获取与当前应用程序对应的应用实例的偏移地址,将偏移地址上的应用实例作为当前应 用实例,根据第一编译单元编译得到的第一编译指令获取对象大小、对象类型和对象地址位置。 
    第一获取???03具体用于在第一判断???02判断指令的类型为创建对象指令时,根据创建对象指令获取与当前应用程序对应的应用实例的偏移地址,将偏移地址上的应用实例作为当前应用实例,从创建对象指令中获取对象大小,根据创建对象指令获取对象类型和对象地址位置。 
    第一获取???03具体用于在第一判断???02判断指令的类型为创建对象指令时,根据创建对象指令获取与当前应用程序对应的应用实例的偏移地址,将偏移地址上的应用实例作为当前应用实例,从创建对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据存储区的偏移地址,在存储区中根据数据在存储区中的位置获取数据,将获取到的数据作为对象大小,根据创建对象指令获取对象类型和对象地址位置。 
    装置还包括第四获取???、第二判断??楹吞崾灸??; 
    第四获取???,用于从系统信息中获取对象堆大小,根据对象堆大小和对象堆的剩余空间的起始偏移地址得到对象堆的剩余空间大??; 
    第二判断???,用于判断对象堆的剩余空间大小是否大于对象大??; 
    提示???,用于在第二判断??榕卸衔袷?,提示错误; 
    创建???05还用于在第二判断??榕卸衔鞘?,进行工作。 
    第三获取???06包括:第二编译单元和第二获取单元; 
    第二编译单元,用于对修改对象指令进行编译,得到第二编译指令; 
    第二获取单元,用于根据第二编译单元编译得到的第二编译指令获取对象地址位置,根据对象地址位置从当前应用实例中获取对象偏移地址,根据第二编译指令获取修改位置和修改内容。 
    第三获取???06具体用于在第一判断???02判断指令的类型为修改对象指令时,根据修改对象指令获取对象地址位置,根据对象地址位置从当前应用实例中获取对象偏移地址,从修改对象指令中获取修改内容,根据修改对象指令获取修改位置。 
    第三获取???06具体用于在第一判断???02判断指令的类型为修改对象指令时,根据修改对象指令获取对象地址位置,根据对象地址位置从当前应用实例中获取对象偏移地址,从修改对象指令中获取存储区的偏移地址和数据在存储区中的位置,根据存储区的偏移地址,在存储区中根据所述数据在存储区中的位置获取数据,将获取到的数据作为修改内容。 
    装置还包括第一合并??楹偷诙喜⒛??; 
    第一合并???,用于在第一判断??榕卸现噶畹睦嘈臀景噶钍?,扫描包堆,根据包堆中的组件的偏移地址计算出包堆碎片,对包堆碎片进行合并; 
    第二合并???,用于在第一合并??槎园阉槠泻喜⒑?,扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。 
    第一合并??榘ǎ旱谌袢〉ピ?、第一判断单元、查找单元、第四获取单元、第一更新单元、第二判断单元、第一移动单元、第二更新单元和第三更新单元; 
    第三获取单元,用于在第一判断??榕卸现噶畹睦嘈臀景噶钍?,获取包堆的最高偏移地址,并将其作为当前偏移地址; 
    第一判断单元,用于判断当前偏移地址是否大于包堆剩余空间的起始偏移地址; 
    查找单元,用于当第一判断单元判断当前偏移地址大于包堆剩余空间的起始偏移地址时,在包堆中查找偏移地址小于当前偏移地址的组件,判断是否查找到偏移地址小于当前偏移地址的组件; 
    第四获取单元,用于当查找单元查找到偏移地址小于当前偏移地址的组件时,在查找到的组件中获取偏移地址最大的组件作为当前组件的相邻组件,根据当前偏移地址与相邻组件的偏移地址之间的碎片大小更新包堆碎片大??; 
    第一更新单元,用于根据第四获取单元获取到的相邻组件的偏移地址更新当前偏移地址,根据当前偏移地址更新当前组件; 
    第二判断单元,用于判断包堆碎片大小是否为0; 
    第一移动单元,用于当第二判断单元判断为否时,根据包堆碎片大小,将当前组件向高地址方向移动; 
    第二更新单元,用于当查找单元查找不到偏移地址小于当前偏移地址的组件时,根据当前偏移地址与包堆剩余空间的起始偏移地址之间的碎片大小更新包堆碎片大??; 
    第三更新单元,用于根据包堆碎片大小更新包堆剩余空间的起始偏移地址。 
    第二合并??榘ǎ旱谖寤袢〉ピ?、第三判断单元、第一记录单元、第四判断单元、第四更新单元、第一设置单元、第五判断单元、第五更新单元、第二移动单元、第六更新单元、第七更新单元、第八判断单元和第一清除单元; 
    第五获取单元,用于初始化系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址; 
    第三判断单元,用于判断对象偏移地址的初值是否小于对象堆剩余空间的起始偏移地址; 
    第一记录单元,用于当第三判断单元判断为是时,记录对象偏移地址的初值的位置上的对象的大??; 
    第四判断单元,用于判断对象偏移地址的初值的位置上的对象是否需要回收; 
    第四更新单元,用于当第四判断单元判断为是时,根据记录的对象的大小更新系统信息中的对象堆碎片大??; 
    第一设置单元,用于当第四判断单元判断为是时,将对象堆中使用对象偏移地址的初值的位置设置为空; 
    第五判断单元,用于判断对象堆碎片大小是否为0; 
    第五更新单元,用于当第五判断单元判断为否时,根据对象偏移地址的初值和对象堆碎片大小更新系统信息中的对象偏移地址的终值; 
    第二移动单元,用于当第五更新单元更新对象偏移地址的终值后,将对象偏移地址的初值的位置上的对象移动到对象偏移地址的终值的位置上; 
    第六更新单元,用于当第二移动单元移动对象后,将对象堆中使用的对象偏移地址的初值更新为对象偏移地址的终值; 
    第七更新单元,用于当第五判断单元判断为否时,或当第一设置??榻?nbsp;象堆中使用对象偏移地址的初值的位置设置为空后,或当第六更新单元将对象堆中使用的对象偏移地址的初值更新为对象偏移地址的终值后,根据记录的对象的大小更新系统信息中的对象偏移地址的初值; 
    第八更新单元,用于根据对象堆碎片大小更新对象堆剩余空间的起始偏移地址; 
    第一清除单元,用于清空系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小。 
    装置还包括:第三判断??楹吞崾灸??; 
    第三判断???,用于在第三获取??榛袢〉蕉韵笃频刂泛?,判断获取到的对象偏移地址是否为空; 
    提示???,用于在第三判断??榕卸衔鞘?,提示错误; 
    修改???07还用于在第三判断??榕卸衔袷?,进行工作。 
    装置还包括第三合并???; 
    第三合并???,用于在第一判断??榕卸现噶畹睦嘈臀厥帐?,扫描对象堆,将对象堆中需要被回收的对象作为对象堆碎片进行合并,并将合并过程中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小记录到系统信息中。 
    第三合并??榘ǎ旱诹袢〉ピ?、第六判断单元、第二记录单元、第七判断单元、第九更新单元、第二设置单元、第八判断单元、第十更新单元、第三移动单元、第十一更新单元、第十二更新单元、第十三更新单元和第二清除 单元; 
    第六获取单元,用于初始化系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小,获取对象堆剩余空间的起始偏移地址; 
    第六判断单元,用于判断对象偏移地址的初值是否小于对象堆剩余空间的起始偏移地址; 
    第二记录单元,用于当第六判断单元判断为是时,记录对象偏移地址的初值的位置上的对象的大??; 
    第七判断单元,用于判断对象偏移地址的初值的位置上的对象是否需要回收; 
    第九更新单元,用于当第七判断单元判断为是时,根据记录的对象的大小更新系统信息中的对象堆碎片大??; 
    第二设置单元,用于当第七判断单元判断为是时,将对象堆中使用对象偏移地址的初值的位置设置为空; 
    第八判断单元,用于判断对象堆碎片大小是否为0; 
    第十更新单元,用于当第八判断单元判断为否时,根据对象偏移地址的初值和对象堆碎片大小更新系统信息中的对象偏移地址的终值; 
    第三移动单元,用于当第十更新单元更新对象偏移地址的终值后,将对象偏移地址的初值的位置上的对象移动到对象偏移地址的终值的位置上; 
    第十一更新单元,用于当第三移动单元移动对象后,将对象堆中使用的对象偏移地址的初值更新为对象偏移地址的终值; 
    第十二更新单元,用于当第八判断单元判断为否时,或当第二设置??榻韵蠖阎惺褂枚韵笃频刂返某踔档奈恢蒙柚梦蘸?,或当第十一更新单元将对象堆中使用的对象偏移地址的初值更新为对象偏移地址的终值后,根据记录 的对象的大小更新系统信息中的对象偏移地址的初值; 
    第十三更新单元,用于根据对象堆碎片大小更新对象堆剩余空间的起始偏移地址; 
    第二清除单元,用于清空系统信息中的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小。 
    装置还包括:第四判断??楹吞崾灸??; 
    第四判断???,用于在第三获取??榛袢〉蕉韵笃频刂泛?,判断获取到的对象偏移地址是否为空; 
    提示???,用于在第四判断??榕卸衔鞘?,提示错误; 
    修改???07还用于在第四判断??榕卸衔袷?,进行工作。 
    装置还包括第五判断??楹偷舻缁指茨??; 
    第五判断???,用于根据系统信息中在对象堆碎片进行合并过程中记录的对象堆碎片大小判断是否需要进行掉电恢复; 
    掉电恢复???,用于在第五判断??榕卸衔鞘?,根据系统信息中在对象堆碎片进行合并过程中记录的对象偏移地址的初值和对象偏移地址的终值进行掉电恢复; 
    接收???01还用于在第五判断??榕卸衔袷?,或掉电恢复??榻械舻缁指春?,进行工作。 
    掉电恢复??榘ǎ旱谄呋袢〉ピ?、第十四更新单元、第八获取单元、第十五更新单元、第九判断单元、第十六更新单元、第四移动单元、第十七更新 单元和第十八更新单元; 
    第七获取单元,用于获取系统信息中在对象堆碎片进行合并过程中记录的对象偏移地址的初值和对象偏移地址的终值; 
    第十四更新单元,用于在第七获取单元获取到对象偏移地址的初值和对象偏移地址的终值后,扫描对象堆,将对象堆中使用的对象偏移地址的初值更新为记录的对象偏移地址的终值; 
    第八获取单元,用于在第七获取单元获取到对象偏移地址的初值和对象偏移地址的终值后,获取对象堆的尾地址; 
    第十五更新单元,用于根据记录的对象偏移地址的终值的位置上的对象的大小更新记录的对象偏移地址的初值; 
    第九判断单元,用于在第十五更新单元更新记录的对象偏移地址的初值后,判断记录的对象偏移地址的初值是否小于对象堆剩余空间的起始偏移地址; 
    第十六更新单元,用于在第十三判断单元判断为是时,根据记录的对象偏移地址的初值和对象堆碎片大小更新记录的对象偏移地址的终值; 
    第四移动单元,用于在第十六更新单元更新记录的对象偏移地址的终值后,将记录的对象偏移地址的初值的位置上的对象移动到记录的对象偏移地址的终值的位置上; 
    第十七更新单元,用于在第四移动单元移动对象后,将对象堆中使用的对象偏移地址的初值更新为记录的对象偏移地址的终值; 
    第十八更新单元,用于在第十三判断单元判断为否时,根据对象堆碎片大小更新系统信息中的对象堆剩余空间的起始偏移地址,清空系统信息中记录的对象偏移地址的初值、对象偏移地址的终值和对象堆碎片大小。 
    以上所述,仅为本发明较佳的具体实施方式,但本发明的?;し段Р⒉痪窒抻诖?,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的?;し段е?。因此,本发明的?;し段вΩ靡匀ɡ蟮谋;し段?。    内容来自专利网重庆时时彩单双窍门 www.4mum.com.cn转载请标明出处

    关于本文
    本文标题:一种可进行高效对象管理的方法及装置.pdf
    链接地址://www.4mum.com.cn/p-6143032.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 上海快3最新开奖号码 白小姐论坛 辉煌棋牌官方下载 羽毛球比赛视频2018 霸屏天下发朋友圈赚钱是真的 000157股票行情搜狐 排列三开奖结果 福彩之“生肖时时彩 江苏快三开奖结果下载 .利用质数选号 时时彩网 恒发彩票安卓 快乐10分开奖结果查询 七乐彩幸运走势图表 广西十一选五开奖规律 刮刮乐中奖