专利名称:Java卡系统及其空间分配处理方法
技术领域:
本发明涉及智能卡领域,尤其涉及一种Java卡系统及其空间分配处理方法。 技术背景
智能卡已经被广泛应用在手机、音乐播放器、数字电视等各种产品中,智能卡可以实现身份识别、数据的存储、信息处理等多种功能。以广泛应用于手机中的SIM卡为例,SIM 卡即是一种具有用户识别功能和数据存储、处理功能的智能卡,它是移动运营商、增值业务提供商和用户之间的媒介,被广泛地应用于移动通讯领域内。
随着第三代移动通信系统的广泛应用,3G运营商将利用3G网络的带宽优势其客户提供诸如音乐下载、视频服务、无线宽带接入等新业务,由于传统的普通SIM卡不具有应用程序(Apple)下载的功能,因此限制了移动运营商和增值业务提供商的业务开展,而新兴的Java卡技术的出现则解决了这个难题。Java卡技术是一项新兴的智能卡技术,是一个开放的多应用平台,通过Java卡可以实现下载各种应用程序;但是,由于Java卡嵌入式系统的存储空间有限,用户只能通过更新Java卡上的各种应用程序来解决越来越多的使用需求,随着用户对程序的选择和更新,将产生许多零散系统垃圾占用存储空间。因此,怎样更有效率的使用Java卡的有限空间是一个需要迫切解决的问题。发明内容
针对现有技术的上述缺陷,本发明就是提供一种Java卡系统,及一种高效率的 Java卡的系统存储器空间分配处理方法,实现对系统空间分配、垃圾回收与碎片整理,将系统零散垃圾对象占用的空间进行回收与压缩,为应用程序的下载、执行提供充足的空间。
本发明是通过以下技术方案实现的一种Java卡系统,其包括一存储器空间,该存储器空间为电可擦可编程只读存储器空间,该存储器空间包括配置区、MAP表及堆,所述配置区用于存储关于系统配置的信息,所述信息包括USED_ADDR_N0 (指向堆已用空间的开始地址)和MAX_ENTRY_COUNT_IN_MAP (存储 MAP表最大的项数);所述堆用于存储实体,所述实体包括应用数据、用户信息;所述每一个实体都在MAP表有相应数据项。
所述配置区的大小固定不变,其从所述电可擦可编程只读存储器空间底部开始分配;所述堆的大小是动态变化的,其从所述电可擦可编程只读存储器空间顶部开始;所述 MAP表的空间可动态改变,由配置区的MAX_ENTRY_COUNT_IN_MAP变量存储MAP表的大小,所述MAP表的分配紧接所述配置区,一直延伸到所述堆;所述堆的空间与所述MAP表的空间不可重叠,通过USED_ADDR_N0记录所述堆已使用空间的大小。
—种Java卡系统存储器空间分配处理方法,包括空间分配方法、垃圾回收方法及堆碎片整理方法,其特征在于所述存储器空间为电可擦可编程只读存储器空间,该存储器空间包括配置区、MAP表及堆,所述配置区用于存储关于系统配置的信息,所述信息包括 USED_ADDR_N0 (指向堆已用空间的开始地址)和MAX_ENTRY_COUNT_IN_MAP (存储MAP表最大的项数);所述堆用于存储实体,所述实体包括应用数据、用户信息;所述每一个实体都在MAP表有相应数据项;所述配置区的大小固定不变,其从所述电可擦可编程只读存储器空间底部开始分配;所述堆的大小是动态变化的,其从所述电可擦可编程只读存储器空间顶部开始;所述MAP表的空间可动态改变,由配置区的MAX_ENTRY_COUNT_IN_MAP变量存储 MAP表的大小,所述MAP表的分配紧接所述配置区,一直延伸到所述堆;所述堆的空间与所述MAP表的空间不可重叠,通过USED_ADDR_N0记录所述堆已使用空间的大小; 所述空间分配方法包括以下步骤511、由Java卡系统调用空间分配实现函数;512、在MAP表查找是否有可重用的表项标记堆实体,如没有,在MAP表尾端动态创建 MAP表项标记堆实体;513、在堆分配空间给实体;514、堆实体与MAP表项建立关系; 所述堆碎片整理方法包括以下步骤531、Java卡系统完成垃圾回收后,立即启动堆碎片整理;532、对空闲表中的空闲块由高到低排序,结果保存到所述Java卡系统的随机存储器中;533、合并空闲块,将两块空闲块之间的有效数据向堆顶部搬移,碎片数据向堆底部靠拢,从而使有效数据与碎片分离;534、更新MAP表,与堆实体重新建立正确的关联关系;535、清除所有空闲表。
上述方法中,所述S12包括5121、遍历所述MAP表,查找标记为is_free的MAP表项,其为可重用MAP表项;5122、如果查找不到可重用MAP表项,在MAP表尾端创建一个新的MAP表项,所述MAX_ ENTRY_COUNT_IN_MAP累加1,实现MAP表的动态变化。
所述S13包括在堆中给所述实体分配内存空间,具体的,是在堆可用空间区的顶部给实体分配空间,并修改USED_ADDR_N0变量的指向;从而使堆空间动态分配,并且应用程序数据连续分配。
所述S14包括修改MAP表项的堆地址,并将该MAP表项标记为非is_free状态, 从而使堆实体与MAP表项建立关联。
所述S32包括使用冒泡算法对空闲表中的数据由高到低排序;排序完成后,把空闲块数据存放到RAM中,并返回空闲块的数量。
所述S33包括空闲块与后继的空闲块合并,两块空闲块之间的实体即有效数据向堆顶部搬移,达到有效数据与碎片分离。
所述有效数据向堆顶部搬移的方法包括当空闲块的大小大于有效数据块大小时,有效数据块搬移后与目标数据不存在重叠空间,有效数据可以一次搬完;数据搬移前备份搬移场景,有效数据搬移完成后,有效数据块与空闲块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间;当空闲块大小小于有效数据块大小,并且空闲块大小大于1 个字节时,将有效数据分成小数据块进行页对齐搬移;搬移完成后,空闲块与有效数据块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间;当空闲块大小小于有效数据块大小,并且空闲块大小小于1 个字节时,将有效数据块分成小多块数据块进行搬移,所述小数据块的大小小于或等于备份区的大小,搬移完成后,空闲块与有效数据块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间;所述备份区是在所述存储器空间的配置区划分出来的用于存放断电保护的场景信息和搬移数据的空间。
当空闲块大小小于有效数据块大小,并且空闲块大小大于1 个字节时,所述将有效数据分成小数据块进行搬移,包括首先,从有效数据块的的左端取页对齐数据块搬移到目标地址,该页对齐数据块大小=目标地址&0x7F ;后继的有效数据块按页搬移,按页搬移的数据块大小=空闲块大小&0xFFFFFF80 ;完成后,空闲块与有效数据块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间。
当空闲块大小小于有效数据块大小,并且空闲块大小小于1 个字节时,有效数据的搬移过程包括从有效数据块左端取页对齐数据块复制到备份区,备份区大小与备份页大小相等,页对齐数据块大小=备份区大小-备份页大小+(目标地址&0x7F);再从备份区把数据复制到目标地址;然后,把后继的大小与备份区大小相等的有效数据块复制到备份区,再从备份区把数据复制到目标地址;完成后,空闲块与有效数据块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间。
所述更新MAP表包括完成空闲块合并后,必须更新MAP表信息;由于有效数据搬移后,有效数据的位置发生变化,必须及时更新MAP表与堆实体的对应关系。
所述更新MAP表包括以下步骤5331、遍历MAP表,查找需要修改的MAP表项复制到备份内容区,如果MAP表修改项太多可以分多次完成;5332、备份场景信息;5333、从备份区读取MAP表数据,并修改对应的MAP表项;5334、如果更新MAP表项过程中发生断电,启动断电保护机制;5335、如果MAP表还有修改项,返回S331。
所述清除空闲表包括首张空闲表永远不做删除,将空闲表数据清零即可;其它空闲表在已在空闲块排序中已做删除。
所述断电保护方法步骤541、在备份区保存场景信息,进行搬移数据或更新MAP表操作;542、操作所述电可擦可编程只读存储器空间过程中产生断电;543、卡片上电,初始化工作完成后,遍历备份区查找有效的场景备份信息;544、根椐场景备份信息,还原场景;重做断电前电可擦可编程只读存储器空间操作,继续执行断电时没完成的操作;545、清除备份区数据。
与现有技术相比,本发明具备如下优点本发明所提供的空间分配方法,可高效地实现系统空间分配,使得供应提供商的应用程序分布在连续的EEPROM中,从而增加应用实体的访问速度;垃圾回收方法将Java卡系统中垃圾占用的空间(即对象扁历过程中无法到达的对象)进行高效率的整理,使得Java卡的有限存储空间得到合理的应用,为应用程序的下载提供充足的空间。
图1是本发明的存储结构示意图; 图2是MAP表与堆的关系图;图3是碎片整理流程图; 图4是空闲表搬移过程图;图5是本发明所涉及的Java栈的一种空间管理方式示意图; 图6至图8分别是本发明所涉及的有效数据搬移的三种情形示意图。
具体实施方式
实施例一如图1所示,Java卡系统存储器空间,其是一种EEPROM (Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)空间,包括三大部分配置区、MAP表及堆。其中配置区存储关于系统配置的一些信息(其中包含USED_ADDR_NO、MAX_ ENTRY_COUNT_IN_MAP两个重要配置变量);堆存储应用数据、用户信息等实体;并且每一个实体都在MAP表有相应数据项(如图2所示)。
配置区的大小是固定不变的,其实从EEPROM底部开始分配,剩余空间由堆与MAP 表支配。MAP表与堆空间的大小是不固定的,MAP表的空间可以动态改变,具体的,由配置区的MAX_ENTRY_COUNT_IN_MAP变量存储MAP的大小,剩余的空间由堆支配。MAP表的分配在紧接着配置区,一直延伸到堆;堆的分配从EEPROM的顶部开始,一直向下到MAP表区;但堆空间与MAP表空间不能重叠。堆空间分配由顶部开始,通过USED_ADDR_N0记录堆已使用空间的大小。
实施例二 提供一种基于实施例一所述的Java卡系统存储器空间的空间分配处理方法,其包括空间分配方法、垃圾回收方法及堆碎片整理方法; 所述空间分配方法包括以下步骤511、由Java卡系统调用空间分配实现函数;512、在MAP表查找可重用的表项标记堆实体,如果没有在MAP表尾端动态创建MAP表项标记堆实体;513、在堆分配空间给实体;514、堆实体与MAP表项建立关系。
为清楚描述本发明所述的Java卡系统垃圾回收方法,引入跟踪收集器这个硬件结构。
本发明所涉及的Java卡包括跟踪收集器,其完成对象遍历和对象清除两个过程。 在对象遍历阶段,跟踪收集器从根集开始扫描,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象,在跟踪过程中遇到的可到达的对象使用一个独立的位图来设置标记,如果某对象不能从这些根对象的至少一个到达,则将它作为垃圾收集。以下将详细描述对象遍历的原理和过程。
在上述对象遍历过程中使用了 Java栈,参见图5中,揭示了本发明所涉及的Java 栈的一种空间管理方式Java栈的最底层为已用空间1,已用空间1的上层为可用空间,把 Java栈可用空间的基地址作为对象遍历区的基地址,并预留一段空间作为铺垫区2,铺垫区2在执行垃圾回收实现函数的初始化时使用;位图区3位于铺垫区2的上面,位图区3 的基地址是对象遍历区的基地址加上铺垫区大小偏移,位图区3在垃圾回收实现函数进行初始化时开辟,并且在初始化过程中,将位图区3所有的位的值置为“0”,程序创建的所有对象都在位图区3中对应1位(bit),每8位组合为一组。在对象遍历过程中,从根集开始扫描,每到达一个对象就将它在位图中对应的位(bit)置为“1”。即,一旦对应产位置被置 “ 1”,则表示其属于可以到达的对象。
对象遍历采用递归方式,在图5所示的实施例中,递归的深度为4级(A、B、C、D), 当递归超过4级(例如E)但还有可以到达的对象存在,则将后续的对象添加对象缓冲区4, 对象缓冲区4的基地址为位图区3的结束地址,对象缓冲区4的大小为栈指针的偏移减去位图区3结束地址的偏移,当对象递归处理完成并返回后,将调用存放在对象缓冲区4的对象并开始下一次递归及缓存。
在完成对象遍历阶段之后,进入对象清除阶段,在对象清除阶段,跟踪收集器将那些从根集不可到达的对象(即其在位图区3中对应的位仍为“0”)作为垃圾回收进行删除。 即,根据对象的索引,查看其在位图区3中对应的位,如果值为“0”,则将对象清除,否则不清除。在清除对象同时,将MAP表对应的数据项也删除(即将MAP表项设为is_free)和在空闲表中记录空闲块。在删除对象过程中,如果待回收空间不能合并到其它空闲块中,则查找空闲表中是否存在空闲的表项,如果存在空闲的表项,则将待回收的空间登记到该表项; 如果无空闲表项,则创建一个新的空闲表,登记待回收块信息。如果待回收块有相邻空闲块,则修改相邻空闲块的大小字段,对其进行合并。
为了使本发明的技术方案更加优化,还引入堆碎片管理器这个硬件结构,堆碎片管理是将跟踪收集器在对象清除阶段所释放的对象占用空间进行碎片整理回收。
所述垃圾回收方法包括以下步骤521、由Java卡系统调用系统垃圾回收实现函数;522、在铺垫区中对系统垃圾回收实现函数进行初始化操作;523、由跟踪收集器进行对象遍历,并在位图区中时行标记;524、清除在位图区中仍为初始值的位所对应的对象,并把位图对应的MAP表项标记为不可用。
所述堆碎片整理方法包括以下步骤531、Java卡系统完成垃圾回收后,立即启动堆碎片整理;532、对空闲表中的空闲块由高到低排序,结果保存到RAM中;533、合并空闲块,将两块空闲块之间的有效数据向堆顶部搬移,碎片数据向堆底部靠拢,从而使有效数据与碎片分离;534、更新MAP表,与堆实体重新建立正确的关联关系;535、清除所有空闲表。
所述S12包括S121、遍历所述MAP表,查找标记为is_free的MAP表项,其为可重用MAP表项;S122、如果查找不到可重用MAP表项,在MAP表尾端创建一个新的MAP项,所述MAX_ ENTRY_COUNT_IN_MAP累加1,通过该方法实现MAP表的动态变化。
所述S13包括在堆中给所述实体分配内存空间,具体的,是在堆可用空间区的顶部给实体分配空间,并修改USED_ADDR_N0变量的指向。
所述S14包括修改MAP表项的堆地址,并将该MAP表项标记为非is_free状态,从而与MAP表项建立相连关联。
所述S32包括使用冒泡算法对空闲表中的数据由高到低排序;排序完成后,把空闲块数据存放到RAM中,并返回空闲块的数量,同时,把排序数据暂存在RAM中。
碎片整理阶段RAM中的0x8000-0x8800可以复用。
为了减少EEPROM的擦写次数把排序数据暂存在RAM中。
所述S33包括空闲块与后继的空闲块合并,两块空闲块之前的有效数据向堆顶部搬移,达到有效数据与碎片分离。如图4所示,碎片1为空闲块,后继的空闲块为碎片2, 实体2为碎片1和碎片2之间的有效数据,其向堆顶部搬移,即碎片1与实体2的位置互换 (碎片1与碎片2合并为碎片2);堆-可用空间也看作一块碎片,与碎片2合并后,实现有效数据与碎片分离。
所述有效数据搬移方法包括如图6所示,当碎片1(空闲块)大小大于实体2 (有效数据块)大小时,有效数据块搬移后与目标数据不存在重叠空间,有效数据块可以一次搬完;数据搬移前必须备份搬移场景,以防断电后可以恢复场景继续搬移,有效数据搬移完成后,实体2与碎片1位置对换,碎片1与堆-可用空间合并为新的堆-可用空间;如图7所示,当碎片大小小于实体2大小,并且碎片大小大于一页(即1 个字节)时, 有效数据块(即实体2)搬移后与目标数据存在重叠空间。如果搬移过程中产生断电,数据不可恢复,必须把有效数据分成小数据块搬移。由于EEPROM都是按页操作的,为了减少擦写次数,必须页对齐搬移;有效数据搬移过程首先,从实体2的左端取页对齐数据块(数据块大小=目标地址&0x7F)搬移到目标地址,后继的有效数据块按页搬移(按页搬移的数据块大小=碎片大小&0xFFFFFF80),完成后,碎片与实体2位置对换,碎片与堆-可用空间合并为新的堆-可用空间;如图8所示,当碎片大小小于实体2大小,并且碎片大小小于一页时,有效数据块(即实体2)搬移后与目标数据存在重叠空间。必须把有效数据分成多块数据(数据块大小 <=备份区大小)搬移。为了减少EEPROM的操作次数和写备份场景信息次数,有效数据搬移过程 首先,从有效数据块左端取页对齐数据块(数据块大小=备份区大小-备份页大小+ (目标地址&0x7F))复制到备份区(不同系统备份区存放数据的大小是不一样,本方案备份区大小15页;备份区越大搬移越快),再从备份区把数据复制到目标地址;然后,把后继的有效数据块(有效数据块=备份区大小)复制到备份区,再从备份区把数据复制到目标地址;完成后,碎片与实体2位置对换,碎片与堆-可用空间合并为新的堆-可用空间。
所述更新MAP表包括每当完成一次空闲块合并后,更新MAP表信息;由于有效数据搬移后,有效数据的位置发生变化,必须及时更新MAP表与实体数据的对应关系。
所述修改MAP表包括以下步骤S331、遍历MAP表,查找需要修改的MAP表项复制到备份内容区,如果MAP表修改项太多可以分多次完成;5332、备份场景信息;5333、从备份区读取MAP表数据,并修改对应的MAP表项;5334、如果MAP表项过程中发生断电,启动断电保护机制;5335、如果MAP表还有修改项,返回S331。
所述清除空闲表包括首张空闲表永远不做删除,将空闲表数据清零即可;其它空闲表在已在空闲块排序中已做删除。
碎片整理过程中,数据搬移、修改MAP表阶段、修改USED_ADDR_N0都会对EEPROM 的内容修改,必须提供断电保护机制。
所述断电保护方法步骤541、在备份区保存场景信息,进行搬移数据或更新MAP表项操作;542、操作所述电可擦可编程只读存储器空间过程中产生断电;543、卡片上电,初始化工作完成后,遍历备份区查找有效的场景备份信息;544、根椐场景备份信息,还原场景;重做断电前电可擦可编程只读存储器空间操作,继续执行断电时没完成的操作。
上述场景信息包括搬移阶段、空闲块信息、当前搬移数据原地址、当前搬移数据目标地址、搬移数据大小等信息。
本发明提供的Java卡系统存储器空间的空间分配处理方法,不仅适用于电可擦可编程只读存储器同时也适用于Flash存储器。
权利要求
1.一种Java卡系统,包括一存储器空间,其特征在于该存储器空间为电可擦可编程只读存储器空间,该存储器空间包括配置区、MAP表及堆,所述配置区用于存储关于系统配置的信息,所述信息包括USED_ADDR_N0(指向堆已用空间的开始地址)和MAX_ENTRY_COUNT_ IN_MAP(存储MAP表最大的项数);所述堆用于存储实体,所述实体包括应用数据、用户信息; 所述每一个实体都在MAP表有相应数据项。
2.根据权利要求1所述的Java卡系统,其特征在于所述配置区的大小固定不变, 其从所述电可擦可编程只读存储器空间底部开始分配;所述堆的大小是动态变化的,其从所述电可擦可编程只读存储器空间顶部开始;所述MAP表的空间可动态改变,由配置区的 MAX_ENTRY_COUNT_IN_MAP变量存储MAP表的大小,所述MAP表的分配紧接所述配置区,一直延伸到所述堆;所述堆的空间与所述MAP表的空间不可重叠,通过USED_ADDR_N0记录所述堆已使用空间的大小。
3.—种Java卡系统存储器空间分配处理方法,包括空间分配方法、垃圾回收方法及堆碎片整理方法,其特征在于所述存储器空间为电可擦可编程只读存储器空间,该存储器空间包括配置区、MAP表及堆,所述配置区用于存储关于系统配置的信息,所述信息包括 USED_ADDR_N0 (指向堆已用空间的开始地址)和MAX_ENTRY_COUNT_IN_MAP (存储MAP表最大的项数);所述堆用于存储实体,所述实体包括应用数据、用户信息;所述每一个实体都在MAP表有相应数据项;所述配置区的大小固定不变,其从所述电可擦可编程只读存储器空间底部开始分配;所述堆的大小是动态变化的,其从所述电可擦可编程只读存储器空间顶部开始;所述MAP表的空间可动态改变,由配置区的MAX_ENTRY_COUNT_IN_MAP变量存储 MAP表的大小,所述MAP表的分配紧接所述配置区,一直延伸到所述堆;所述堆的空间与所述MAP表的空间不可重叠,通过USED_ADDR_N0记录所述堆已使用空间的大小;所述空间分配方法包括以下步骤511、由Java卡系统调用空间分配实现函数;512、在MAP表查找是否有可重用的表项标记堆实体,如没有,在MAP表尾端动态创建 MAP表项标记堆实体;513、在堆分配空间给实体;514、堆实体与MAP表项建立关系;所述堆碎片整理方法包括以下步骤531、Java卡系统完成垃圾回收后,立即启动堆碎片整理;532、对空闲表中的空闲块由高到低排序,结果保存到所述Java卡系统的随机存储器中;533、合并空闲块,将两块空闲块之间的有效数据向堆顶部搬移,碎片数据向堆底部靠拢,从而使有效数据与碎片分离;534、更新MAP表,与堆实体重新建立正确的关联关系;535、清除所有空闲表。
4.根据权利要求3所述的方法,其特征在于所述S12包括.5121、遍历所述MAP表,查找标记为is_free的MAP表项,其为可重用MAP表项;.5122、如果查找不到可重用MAP表项,在MAP表尾端创建一个新的MAP表项,所述MAX_ENTRY_COUNT_IN_MAP累加1,实现MAP表的动态变化。
5.根据权利要求3所述的方法,其特征在于所述S13包括在堆中给所述实体分配内存空间,具体的,是在堆可用空间区的顶部给实体分配空间,并修改USED_ADDR_N0变量的指向;从而使堆空间动态分配,并且应用程序数据连续分配。
6.根据权利要求3所述的方法,其特征在于所述S14包括修改MAP表项的堆地址,并将该MAP表项标记为非is_free状态,从而使堆实体与MAP表项建立关联。
7.根据权利要求3所述的方法,其特征在于所述S32包括使用冒泡算法对空闲表中的数据由高到低排序;排序完成后,把空闲块数据存放到RAM中,并返回空闲块的数量。
8.根据权利要求3所述的方法,其特征在于所述S33包括空闲块与后继的空闲块合并,两块空闲块之间的实体即有效数据向堆顶部搬移,达到有效数据与碎片分离。
9.根据权利要求8所述的方法,其特征在于所述有效数据向堆顶部搬移的方法包括当空闲块的大小大于有效数据块大小时,有效数据块搬移后与目标数据不存在重叠空间,有效数据可以一次搬完;数据搬移前备份搬移场景,有效数据搬移完成后,有效数据块与空闲块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间;当空闲块大小小于有效数据块大小,并且空闲块大小大于1 个字节时,将有效数据分成小数据块进行页对齐搬移;搬移完成后,空闲块与有效数据块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间;当空闲块大小小于有效数据块大小,并且空闲块大小小于1 个字节时,将有效数据块分成小多块数据块进行搬移,所述小数据块的大小小于或等于备份区的大小,搬移完成后,空闲块与有效数据块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间;所述备份区是在所述存储器空间的配置区划分出来的用于存放断电保护的场景信息和搬移数据的空间。
10.根据权利要求9所述的方法,其特征在于当空闲块大小小于有效数据块大小,并且空闲块大小大于1 个字节时,所述将有效数据分成小数据块进行搬移,包括首先,从有效数据块的的左端取页对齐数据块搬移到目标地址,该页对齐数据块大小=目标地址&0X7F ;后继的有效数据块按页搬移,按页搬移的数据块大小=空闲块大小&0xFFFFFF80 ;完成后,空闲块与有效数据块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间。
11.根据权利要求9所述的方法,其特征在于当空闲块大小小于有效数据块大小,并且空闲块大小小于1 个字节时,有效数据的搬移过程包括从有效数据块左端取页对齐数据块复制到备份区,备份区大小与备份页大小相等,页对齐数据块大小=备份区大小-备份页大小+(目标地址&0x7F);再从备份区把数据复制到目标地址;然后,把后继的大小与备份区大小相等的有效数据块复制到备份区,再从备份区把数据复制到目标地址;完成后, 空闲块与有效数据块位置对换,空闲块与堆-可用空间合并为新的堆-可用空间。
12.根据权利要求3所述的方法,其特征在于所述更新MAP表包括完成空闲块合并后,必须更新MAP表信息;由于有效数据搬移后,有效数据的位置发生变化,必须及时更新MAP表与堆实体的对应关系。
13.根据权利要求3所述的方法,其特征在于 所述更新MAP表包括以下步骤·5331、遍历MAP表,查找需要修改的MAP表项复制到备份内容区,如果MAP表修改项太多可以分多次完成;·5332、备份场景信息;·5333、从备份区读取MAP表数据,并修改对应的MAP表项;·5334、如果更新MAP表项过程中发生断电,启动断电保护机制;·5335、如果MAP表还有修改项,返回S331;所述清除空闲表包括首张空闲表永远不做删除,将空闲表数据清零即可;其它空闲表在已在空闲块排序中已做删除。
14.根据权利要求13所述的方法,其特征在于 所述断电保护方法步骤·541、在备份区保存场景信息,进行搬移数据或更新MAP表操作;·542、操作所述电可擦可编程只读存储器空间过程中产生断电;·543、卡片上电,初始化工作完成后,遍历备份区查找有效的场景备份信息;·544、根椐场景备份信息,还原场景;重做断电前电可擦可编程只读存储器空间操作,继续执行断电时没完成的操作;·545、清除备份区数据。
全文摘要
本发明提供一种Java卡系统,其包括一电可擦可编程只读存储器空间。本发明还提供一种Java卡系统存储器空间分配处理方法,包括空间分配方法、垃圾回收方法及堆碎片整理方法。本发明可高效地实现系统空间分配,使得供应提供商的应用程序分布在连续的EEPROM中,从而增加应用实体的访问速度;垃圾回收方法将Java卡系统中垃圾占用的空间进行高效率的整理,使得Java卡的有限存储空间得到合理的应用,为应用程序的下载提供充足的空间。
文档编号G06F12/02GK102521145SQ20111043731
公开日2012年6月27日 申请日期2011年12月23日 优先权日2011年12月23日
发明者林国明, 莫文盼 申请人:东信和平智能卡股份有限公司