CN112199303B - 存储空间碎片化的处理方法和装置 - Google Patents
存储空间碎片化的处理方法和装置 Download PDFInfo
- Publication number
- CN112199303B CN112199303B CN202011393020.1A CN202011393020A CN112199303B CN 112199303 B CN112199303 B CN 112199303B CN 202011393020 A CN202011393020 A CN 202011393020A CN 112199303 B CN112199303 B CN 112199303B
- Authority
- CN
- China
- Prior art keywords
- memory space
- moving
- moving block
- data
- data object
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
本申请提供了一种存储空间碎片化的处理方法和装置,本申请在智能卡部署有嵌入式虚拟机的情况下,会从逻辑上推导出逐次压缩嵌入式虚拟机的内存空间中多个碎片区所需逐次移动的移动区块的信息。在此基础上,在对该多个碎片区进行压缩后,可以根据移动区块的信息,依次调整内存空间中各个数据对象所引用的其他数据对象的指针,从而在不影响内存空间中各个数据对象之间的引用的基础上,实现对内存空间中多个碎片区进行压缩,从而有效去除了嵌入式虚拟机的内存空间的碎片化。
Description
技术领域
本申请涉及智能卡技术领域,尤其涉及一种存储空间碎片化的处理方法和装置。
背景技术
智能卡是集成了中央处理器(Central Processing Unit ,CPU)、随机存取存储器(Random Access Memory, RAM)以及输入/输出(Input/Output,IO)的芯片。目前,智能卡已经被广泛应用于多种领域,如很多银行卡以及交通卡等都属于智能卡。
在智能卡上可以搭载有虚拟机,智能卡中的虚拟机是一种嵌入式虚拟机。为了减少存储资源的耗费,智能卡中的嵌入式虚拟机会对内存空间进行回收。如,可以在标记了该嵌入式虚拟机的内存中各数据对象,嵌入式虚拟机可以删除标记为垃圾的数据对象并回收相应数据对象的空间。但是,采用该种方式回收内存空间后,会使得内存页中剩余的数据对象并不完全相邻,导致存储空间碎片化,从而影响到数据存储。
而智能卡中嵌入式虚拟机的内存空间相对较少,因此,如何较为有效的解除嵌入式虚拟机的内存空间的碎片化是本领域技术人员迫切需要解决的技术问题。
发明内容
有鉴于此,本申请提供了一种存储空间碎片化的处理方法和装置,以较为有效的实现智能卡的嵌入式虚拟机中内存空间的去碎片化。
为实现上述目的,本申请提供了如下技术方案:
一方面,本申请提供了一种存储空间碎片化的处理方法,应用于智能卡,所述智能卡中部署有嵌入式虚拟机,所述方法包括:
获得所述嵌入式虚拟机的内存空间对应的空闲表,所述空闲表中记录有所述内存空间中多个碎片区的信息;
依据所述空闲表记录的多个碎片区的信息,确定逐次压缩所述多个碎片区所需逐次移动的多个移动块区的信息以及所述多个移动区块的逐次移动顺序,其中,在逐次压缩多个碎片区的过程中,每次所需移动的移动块区为所述内存空间中最近一段连续的数据块以及所述数据块之前的连续空闲区,所述移动区块的信息至少包括所述移动区块的地址区间以及所述移动区块内连续空闲区的地址区间;
对所述内存空间中多个碎片区进行压缩处理,以去除所述内存空间中的碎片区;
在完成所述多个碎片化的压缩处理后,依据所述多个移动区块的逐次移动顺序,依次遍历所述多个移动区块;
针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,针对当前遍历到的目标数据对象,如所述目标数据对象引用的至少一个引用数据对象的指针处于所述目标移动区块的地址区间,依据所述目标移动区块内连续空闲区的地址区间,确定移动所述目标移动区块后所述引用数据对象的地址调整量,并基于所述地址调整量调整所述目标数据对象中所述引用数据对象的指针。
在一种可能的实现方式中,所述获得所述嵌入式虚拟机的内存空间对应的空闲表,包括:
通过所述嵌入式虚拟机获得待存储的待存数据;
依据所述待存数据的数据量,检测所述内存空间是否具有能够存储所述待存数据的连续存储区;
如所述内存空间剩余的总存储空间充足且不具有能够存储所述待存数据的连续存储区,获得所述嵌入式虚拟机的内存空间对应的空闲表。
在又一种可能的实现方式中,在所述确定逐次压缩所述多个碎片区所需逐次移动的多个移动块区的信息以及所述多个移动区块的逐次移动顺序之后,还包括:
在嵌入式虚拟机对应的备份存储空间中存储所述多个移动块区的信息以及所述多个移动块区的逐次移动顺序,所述备份存储空间为预设的用于数据备份的存储区;
所述方法还包括:
在遍历完所述多个移动区块,且针对逐次移动顺序位于最后的移动区块遍历完内存中所有数据对象,则删除所述备份存储空间中所述多个移动区块的信息以及所述多个移动区块的逐次移动顺序。
在又一种可能的实现方式中,该装置还包括:
在依次遍历所述多个移动区块的过程中,在确定出当前遍历到的目标移动区块后,在所述嵌入式虚拟机的内存空间中的非易失性存储区内存储移动块区的遍历指针,所述遍历指针指向当前遍历到的所述目标移动区块;
在所述嵌入式虚拟机存在掉电并重上电的情况,基于所述遍历指针确定当前遍历到的所述目标移动区块,并针对所述目标移动区块,执行所述依次遍历内存空间中各数据对象的操作。
在又一种可能的实现方式中,针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,包括:
针对当前遍历到的目标移动区块,依次遍历内存空间的数据链表中各数据对象。
在又一种可能的实现方式中,所述针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,包括:
针对当前遍历到的目标移动区块,依次遍历栈帧中各数据对象。
在又一种可能的实现方式中,所述获得所述嵌入式虚拟机的内存空间对应的空闲表,包括:
获得所述嵌入式虚拟的内存空间中堆内的空闲表,所述空闲表中记录有所述堆中多个碎片区的信息;
所述对所述内存空间中多个碎片区进行压缩处理,包括:
对所述堆内的多个碎片区进行压缩处理;
所述依次遍历内存空间中各数据对象,包括:
依次遍历所述堆内各数据对象。
又一方面,本申请还提供了一种存储空间碎片化的处理装置,应用于智能卡,所述智能卡中部署有嵌入式虚拟机,所述装置包括:
表获得单元,用于获得所述嵌入式虚拟机的内存空间对应的空闲表,所述空闲表中记录有所述内存空间中多个碎片区的信息;
信息确定单元,用于依据所述空闲表记录的多个碎片区的信息,确定逐次压缩所述多个碎片区所需逐次移动的多个移动块区的信息以及所述多个移动区块的逐次移动顺序,其中,在逐次压缩多个碎片区的过程中,每次所需移动的移动块区为所述内存空间中最近一段连续的数据块以及所述数据块之前的连续空闲区,所述移动区块的信息至少包括所述移动区块的地址区间以及所述移动区块内连续空闲区的地址区间;
碎片去除单元,用于对所述内存空间中多个碎片区进行压缩处理,以去除所述内存空间中的碎片区;
块遍历单元,用于在完成所述多个碎片化的压缩处理后,依据所述多个移动区块的逐次移动顺序,依次遍历所述多个移动区块;
指针调整单元,用于针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,针对当前遍历到的目标数据对象,如所述目标数据对象引用的至少一个引用数据对象的指针处于所述目标移动区块的地址区间,依据所述目标移动区块内连续空闲区的地址区间,确定移动所述目标移动区块后所述引用数据对象的地址调整量,并基于所述地址调整量调整所述目标数据对象中所述引用数据对象的指针。
在一种可能的实现方式中,所述表获得单元,包括:
存储确定单元,用于通过所述嵌入式虚拟机获得待存储的待存数据;
内存检测单元,用于依据所述待存数据的数据量,检测所述内存空间是否具有能够存储所述待存数据的连续存储区;
表获得触发单元,用于如所述内存空间剩余的总存储空间充足且不具有能够存储所述待存数据的连续存储区,获得所述嵌入式虚拟机的内存空间对应的空闲表。
在又一种可能的实现方式中,还包括:
信息存储单元,用于所述信息确定单元确定所述多个移动块区的信息以及所述多个移动区块的逐次移动顺序之后,在嵌入式虚拟机对应的备份存储空间中存储所述多个移动块区的信息以及所述多个移动块区的逐次移动顺序,所述备份存储空间为预设的用于数据备份的存储区;
信息删除单元,用于在遍历完所述多个移动区块,且针对逐次移动顺序位于最后的移动区块遍历完内存中所有数据对象,删除所述备份存储空间中所述多个移动区块的信息以及所述多个移动区块的逐次移动顺序。
由以上内容可知,本申请在智能卡部署有嵌入式虚拟机的情况下,会从逻辑上推导出逐次压缩嵌入式虚拟机的内存空间中多个碎片区所需逐次移动的移动区块的信息。在此基础上,在对该多个碎片区进行压缩后,可以根据移动区块的信息,依次调整内存空间中各个数据对象所引用的其他数据对象的指针,从而在不影响内存空间中各个数据对象之间的引用的基础上,实现对内存空间中多个碎片区进行压缩,从而有效去除了嵌入式虚拟机的内存空间的碎片化。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1示出了本申请所适用的一种存储空间碎片化的处理方法一个实施例的流程示意图;
图2示出了本申请中碎片化压缩以及移动区块的一种示意图;
图3示出了本申请提供的存储空间碎片化的处理方法又一个实施例的流程示意图;
图4示出了本申请提供的存储空间碎片化的处理装置一个实施例的组成结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如图1所示,其示出了本申请一种存储空间碎片化的处理方法一个实施例的流程示意图,应用于智能卡,智能卡中部署有嵌入式虚拟机,可以理解的是,该智能卡具有CPU和RAM)以及输入/输出IO等,在该虚拟卡的CPU上可以运行嵌入式虚拟机。
本实施例的方法可以包括:
S101,获得嵌入式虚拟机的内存空间对应的空闲表。
其中,嵌入式虚拟机的内存空间是指分配给嵌入式虚拟机进行数据存储和运行的内存空间。
该空闲表中记录有内存空间中多个碎片区的信息。其中,内存空间中的碎片区是指内存空间中连续未被分配的区域,该碎片区处于存储数据的数据块之间。
如,在内存空间包括多个内存页,而每个内存页包括多个用于存储数据的存储块的情况下,假设内存页包括10个存储块依次为存储块1到存储块10。假设存储块1内存储有数据,存储块2到存储块4没有存储数据,而存储块5和存储块6存储了数据,同时,存储块7没有存储数据,而存储块8到存储块10存储了数据,那么,存储块2到存储块4为一个碎片区,而存储块7为另一个碎片区。
如,碎片区的信息可以包括碎片区的起始地址、结束地址和大小等信息中的部分或者全部。
在本申请中,该空闲表可以是在嵌入式虚拟机对其内存空间的数据进行标记与回收的过程中生成的。当然,也可以是通过其他方式生成,本申请对此不加限制。
可以理解的是,在实际应用中,考虑到单个表的存储较为有限,本申请中该内存空间对应的空闲表可以认为是多个空间表构成的空闲链表,本申请对于空闲表的具体形式不加限制,只要是能够记录内存空间中各个碎片区的位置和大小即可。
S102,依据空闲表记录的多个碎片区的信息,确定逐次压缩多个碎片区所需逐次移动的多个移动块区的信息以及多个移动区块的逐次移动顺序。
其中,在逐次压缩多个碎片区的过程中,每次所需移动的移动块区为内存空间中最近一段连续的数据块以及数据块之前的连续空闲区。
其中,移动区块的信息至少包括移动区块的地址区间以及移动区块内连续空闲区的地址区间。
可以理解的是,在该步骤S102并未执行对内存空间中碎片区进行压缩,而仅仅是从逻辑上计算出:按照各个碎片区的地址从高到低的顺序,按照每次压缩一个碎片区的原则,在逐次压缩多个碎片区的情况下,所需逐次移动的多个移动块区。
其中,每个移动块区对应一个碎片区的压缩,且每个移动块区所包含的连续空闲区的大小与逻辑上已压缩的各碎片区有关。其中,移动区块中的连续空闲区可以为碎片区,也可以是包括碎片区以及在确定该移动区块之前压缩碎片区所压缩出的空闲区域。
为了便于理解,可以参见图2,示出了一次碎片区压缩前后的存储空间中空闲区和数据存储区的对比示意图。
在图2上面的横条为某次压缩前存储区域201中数据块和空闲区的示意图,在该存储区域201中 中深灰色方块为存储有数据的数据块,即数据存储区,而浅灰色方块为未存储数据的碎片区。如图2所示,B和C构成一个碎片区,F为一个碎片区,I也为一个碎片区。
在每次仅压缩一个碎片区的情况下,那么在该存储区域201中首先需要压缩的碎片区为块B和C构成的区域,在此基础上,为了压缩块B和C的空闲区域,则需要由D和E构成的连续数据块向高地址移动(即向图2中左侧移动),因此,本次压缩该块B和C构成的碎片区,所需移动的移动区块为由B和C构成的空闲区以及D和E构成的连续数据块。由图2可见,在本地需要压缩碎片区的情况下,最近的连续数据存储区为D和E构成的区域,而所需移动的移动区块中的空闲区为B和C构成的碎片区。
相应的,移动区块的信息可以包括块B的起始地址,F的起始地址(或者是E的结束地址)。为了能够确定出压缩移动区块中的空间区所导致的该移动区块中各个数据块的地址所产生地址偏移,还可以记录该B的起始地址和C的结束地址。
在对B和C的碎片区进行压缩后可以得到存储区域202的示意图,通过对比存储区域201和202可以看出,通过移动D和E,使得D和E向高位移动,使得块D和E移动到存储区域202中所示的块D’和E’所示。
在存储区域202的基础上,为了进一步压缩D’和E’之后的碎片区,则需要移动数据块G和H,在此基础上,确定出所需移动的移动区块为空闲块7以及由G和H构成的连续的数据块。
可以理解的是,在逐次压缩碎片区的过程中,可能会存储区域中碎片区的大小,在此基础上,为了便于区分,移动区块中未存储数据的区域与空闲表中的碎片区,将移动区块中未存储数据的区域称为空闲区,如图2中空闲块F实际上是由空闲表中指示出的碎片区F和压缩出的区域构成。
在一种可能的实现方式中,本申请也可以针对每个移动区块的信息构成一个间隙表,每个间隙表存储一个移动区块的信息,从而得到多个移动区块对应的多个间隙表,这多个间隙表的先后顺序与多个移动区块的逐次移动顺序相同。
S103,对内存空间中多个碎片区进行压缩处理,以去除内存空间中的碎片区。
其中,对内存空间的多个碎片区进行压缩可以是逐次压缩各个碎片区。当然,也可以是采用其他方式,本申请对此不加限制。
可以理解的是,通过将各个碎片区从低地址的一侧依次移动到高地址侧的存储空间单元,直到所有的碎片全部在高地址侧形成连续的空闲空间,从而可以形成较大区域的空闲空间,使得大数据量的数据可以被存储。
S104,在完成多个碎片化的压缩处理后,依据多个移动区块的逐次移动顺序,依次遍历多个移动区块。
其中,该逐次移动顺序为步骤S102中从逻辑上计算出的逐次移动各移动区块的先后顺序。
在该步骤中,依次遍历多个移动区块是为了后续依次依据各个移动区块的信息,对内存空间中各个数据对象中涉及到的数据引用相关的指针进行调整。其中,每遍历到一个移动区块,便会针对该移动区块执行下面S105的操作,然后再遍历下一个移动区块,如此不断遍历直至所有移动区块均被遍历。
S105,针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,针对当前遍历到的目标数据对象,如目标数据对象引用的至少一个引用数据对象的指针处于该目标移动区块的地址区间,依据目标移动区块内连续空闲区的地址区间,确定移动该目标移动区块后该引用数据对象的地址调整量,并基于该地址调整量调整该目标数据对象中该的指针。
其中,为了便于区分,本申请将当前遍历到的移动区块称为目标移动区块。
相应的,本申请将当前遍历到的数据对象称为目标数据对象。数据对象可以为内存空间中存储的固定数据,以及是程序运行中的函数数据等。
可以理解的是,如果嵌入式虚拟机的内存空间中存储的数据之间具有引用关系,那么在该数据引用的另一个数据的地址发生变化,而该数据中并未变更其引用的数据的地址,则会导致数据引用异常。基于此,在压缩碎片区之后,可以依次调整内存空间中每个数据对象所引用的其他数据对象的指针。
其中,为了便于区分,将目标数据对象所引用的数据对象称为引用数据对象。引用数据对象的指针用于定位该引用数据对象。
如,在目标数据对象中可以记录引用数据对象相对该目标数据对象的相对偏移和一个基地址,则指针为相对偏移和基地址。或者,目标数据对象中存储的是用于定位该引用数据对象的基地址,则指定为该基地址(绝对地址)。
其中,如目标数据对象引用的至少一个引用数据对象的指针处于目标移动区块的地址区间,也就是说,目标移动区块内存在目标数据对象引用的至少一个引用数据对象。
如上面图2所示,在图2的数据存储区201中,假设某个目标数据对象引用的是存储块E存储的数据对象,那么根据目标数据对象中存储的该数据对象的指针以及移动区块的地址范围,可以明确该目标数据对象引用的引用数据对象的指针处于该移动区块的地址范围内。
可以理解的是,针对任意一个移动区块,移动该移动区块是为了压缩该移动区块中空闲区,而由前面介绍可知,移动区块内的空闲区处于该移动区块的高地址侧,在此基础上,在移动该移动区块后,移动区块中的数据块的地址偏移量为该移动区块中空闲区的大小。
由此可知,在移动该目标移动区块后,目标数据对象引用的该至少一个引用数据对象中各引用数据对象的地址调整量(也可以称为地址偏移量)均相同。且,每个引用对象的地址偏移量为该目标移动区块中空闲区的大小。
如,仍以图2为例说明,假设目标移动区块为由存储块B到E构成的移动区块。同时,假设目标数据对象引用的引用数据对象为存储块E中的数据对象,在此基础上,移动该目标移动区块会压缩空闲存储块B和C的区域,从而使得存储块E的地址偏移的偏移量为空闲存储块B和C的大小。相应的,可以将目标移动区块中引用数据对象的指针向高地址偏移该偏移量。
相应的,可以依据地址调整量,分别调整该目标数据对象引用的且指针处于该目标移动块区的地址区间内的各引用数据对象的指针。
在一种可能的实现方式中,在引用数据对象的指针为相对偏移和基地址组成的情况下,可以依据该地址偏移量调整基地址。
由以上内容可知,本申请在智能卡部署有嵌入式虚拟机的情况下,会从逻辑上推导出逐次压缩嵌入式虚拟机的内存空间中多个碎片区所需逐次移动的移动区块的信息。在此基础上,在对该多个碎片区进行压缩后,可以根据移动区块的信息,依次调整内存空间中各个数据对象所引用的其他数据对象的指针,从而在不影响内存空间中各个数据对象之间的引用的基础上,实现对内存空间中多个碎片区进行压缩,从而有效去除了嵌入式虚拟机的内存空间的碎片化。
可以理解的是,智能卡上的嵌入式虚拟机(如JAVA虚拟机)的内存空间一般会被划分栈(stack)和堆(heap)。如,栈用于存储局部变量,智能卡的嵌入式虚拟机实现的时候一般将栈放在易失性存储(RAM)上,而把堆分别放在非易失性存储(NVM)和易失性存储上,这是由于智能卡的功能需求所决定的。其中,栈上空间生命周期在函数结束时就结束,而空间回收主要涉及堆上空间的回收,因此,本申请实施例中所涉及到的内存空间的去碎片化可以是针对堆内空间的去碎片化。
相应的,本申请获得的空间表为嵌入式虚拟的堆内的空闲表,所述空闲表中记录有该堆中多个碎片区的信息。同时,后续碎片化压缩以及数据对象遍历均是针对堆进行的。
可以理解的是,智能卡的嵌入式虚拟机中的内存空间中会设置有备份存储区,该备份存储区为预设的用于数据备份的存储区。该备份存储区为固定设置的专用存储区,如,该专用存储区可以为嵌入式虚拟机的堆空间之外的存储区。在此基础上,为了减少去除碎片化的过程中所占用的嵌入式虚拟机的存储空间,本申请可以通过复用该备份存储区来存储该多个移动块区的信息以及多个移动区块的逐次移动顺序。
相应的,在确定出多个移动块区的信息以及所述多个移动区块的逐次移动顺序之后,可以在嵌入式虚拟机对应的备份存储空间中存储多个移动块区的信息以及多个移动块区的逐次移动顺序的信息。
可以理解的是,在遍历了所有移动区块,并针对该多个移动区块中逐次移动顺序位于最后的移动区块遍历完内存中所有数据对象,删除备份存储空间中多个移动区块的信息以及所述多个移动区块的逐次移动顺序。即,所有数据对象引用的引用数据对象的指针均完成调整之后,则可以删除备份存户空间中移动区块的相关信息。
可以理解的是,本申请的去碎片化可以是周期性执行,或者通过其他方式触发执行等。
在一种可选方式中,为了减少数据处理量,本申请可以在需要为数据分配存储空间而该嵌入式虚拟机的内存空间中连续的存储区不足以存储该数据的情况下,执行本申请的操作。
具体的,在通过嵌入式虚拟机获得待存储的待存数据之后,依据待存数据的数据量,检测内存空间是否具有能够存储待存数据的连续存储区,如,待存数据为100个字节,而内存空间中不存在连续的100个字节的存储区,则内存空间不能够存储该待存数据。如内存空间剩余的总存储空间充足且不具有能够存储待存数据的连续存储区,则执行以上实施例中的步骤S201。
为了便于理解本申请的方案,下面以智能卡的嵌入式虚拟机中的内存空间分为栈和堆,并以需要对堆内的碎片区进行去除为例说明。如图3所示,其示出了本申请一种存储空间碎片化的处理方法又一个实施例的流程示意图,本实施例的方法可以包括:
S301,通过嵌入式虚拟机获得待存储的待存数据。
如,嵌入式虚拟机在运行程序等等情况下都会产生需要存储的数据。
其中,为了便于区分,将待存储的数据称为待存数据。
S302,依据待存数据的数据量,检测堆内空间是否具有能够存储该待存数据的连续存储区。
S303,如该堆内剩余的总存储空间充足且不具有能够存储该待存数据的连续存储区,获得堆对应的空闲表。
其中,空闲表中记录有该堆空间中多个碎片区的信息。
可以理解的是,如该堆内剩余的总存储空间不充足,则说明不是由于碎片化导致的可用存储空间不足,在该种情况下,则可以输出异常等。
S304,依据空闲表记录的多个碎片区的信息,确定逐次压缩该多个碎片区所需逐次移动的多个移动块区的信息及该多个移动区块的逐次移动顺序,并在堆之外的备份存储区存储该多个移动区块的信息和多个移动区块的逐次移动顺序。
其中,该移动区块的信息至少包括移动区块的地址区间以及移动区块内连续空闲区的地址区间。
S305, 对堆内多个碎片区进行压缩处理,以去除堆中的多个碎片区。
S306,在完成多个碎片化的压缩处理后,依据多个移动区块的逐次移动顺序,从多个移动块区中未被遍历的移动区块中,确定当前遍历到的目标移动块区执行S307。
S307,依次遍历数据链表中的数据对象,针对当前遍历到的目标数据对象,如目标数据对象引用的至少一个引用数据对象的指针处于目标移动区块的地址区间,依据目标移动区块内连续空闲区的地址区间,确定移动该目标移动区块后该引用数据对象的地址调整量,并基于该地址调整量调整该目标数据对象中引用数据对象的指针。
可以理解的是,数据链表可能会包含多层链表,如主表下面还有子表等,本申请依次按照数据链表的层级关系依次遍历数据链表中的各数据对象。
S308,依次遍历栈帧中各数据对象,针对当前遍历到的目标数据对象,如目标数据对象引用的至少一个引用数据对象的指针处于目标移动区块的地址区间,依据目标移动区块内连续空闲区的地址区间,确定移动该目标移动区块后该引用数据对象的地址调整量,并基于该地址调整量分别调整该目标数据对象中该至少一个引用数据对象中每个引用数据对象的指针。
其中,栈帧内存储是运行中的函数数据。
需要说明的是,本实施例是以在调整数据链表中目标数据对象内引用的数据对象的指针之后,再调整栈帧内数据对象内引用的数据对象的指针为例说明。在实际应用中,也可以是S307和S308同步执行,对此不加限制。
S309,检测多个移动块区中是否存在未被遍历的移动块区,如果否,则结束,如果是,则返回步骤S306,直至遍历完所有移动块区。
可以理解的是,在该步骤S309之后,还可以从堆中确定用于存储该待存数据的目标存储区,并向目标存储区内存储该待存数据。
可以理解的是,在对内存空间的多个碎片化进行压缩处理后,在更新各个数据对象中引用数据对象的指针的过程中,如果嵌入式虚拟机掉电,为了避免遗漏指针调整,可能需要重新依据各个移动区块来调整指针,从而会导致数据处理量过大。
基于此,本申请在依次遍历多个移动区块的过程中,在确定出当前遍历到的目标移动区块后,在该嵌入式虚拟机的内存空间中的非易失性存储区内存储移动块区的遍历指针。其中,遍历指针指向当前遍历到的该目标移动区块。
相应的,在嵌入式虚拟机存在掉电并重上电的情况,基于该遍历指针确定当前遍历到的该目标移动区块,并针对该目标移动区块,执行所述依次遍历内存空间中各数据对象的操作,以继续调整当前遍历到的目标数据对象中引用的引用数据对象的指针。
对应本申请一种存储空间碎片化的处理方法,本申请还提供了一种存储空间碎片化的处理装置。如图4所示,其示出了本申请一种存储空间碎片化的处理装置一个实施例的组成结构示意图。该装置应用于智能卡,所述智能卡中部署有嵌入式虚拟机,所述装置包括:
表获得单元401,用于获得所述嵌入式虚拟机的内存空间对应的空闲表,所述空闲表中记录有所述内存空间中多个碎片区的信息;
信息确定单元402,用于依据所述空闲表记录的多个碎片区的信息,确定逐次压缩所述多个碎片区所需逐次移动的多个移动块区的信息以及所述多个移动区块的逐次移动顺序,其中,在逐次压缩多个碎片区的过程中,每次所需移动的移动块区为所述内存空间中最近一段连续的数据块以及所述数据块之前的连续空闲区,所述移动区块的信息至少包括所述移动区块的地址区间以及所述移动区块内连续空闲区的地址区间;
碎片去除单元403,用于对所述内存空间中多个碎片区进行压缩处理,以去除所述内存空间中的碎片区;
块遍历单元404,用于在完成所述多个碎片化的压缩处理后,依据所述多个移动区块的逐次移动顺序,依次遍历所述多个移动区块;
指针调整单元405,用于针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,针对当前遍历到的目标数据对象,如所述目标数据对象引用的至少一个引用数据对象的指针处于所述目标移动区块的地址区间,依据所述目标移动区块内连续空闲区的地址区间,确定移动所述目标移动区块后所述引用数据对象的地址调整量,并基于所述地址调整量调整所述目标数据对象中所述引用数据对象的指针。
在一种可能的实现方式中,所述表获得单元,包括:
存储确定单元,用于通过所述嵌入式虚拟机获得待存储的目标数据;
内存检测单元,用于依据所述目标数据的数据量,检测所述内存空间是否具有能够存储所述目标数据的连续存储区;
表获得触发单元,用于如所述内存空间剩余的总存储空间充足且不具有能够存储所述目标数据的连续存储区,获得所述嵌入式虚拟机的内存空间对应的空闲表。
在又一种可能的实现方式中,还包括:
信息存储单元,用于所述信息确定单元确定所述多个移动块区的信息以及所述多个移动区块的逐次移动顺序之后,在嵌入式虚拟机对应的备份存储空间中存储所述多个移动块区的信息以及所述多个移动块区的逐次移动顺序,所述备份存储空间为预设的用于数据备份的存储区;
信息删除单元,用于在遍历完所述多个移动区块,且针对逐次移动顺序位于最后的移动区块遍历完该内存空间中所有数据对象,删除所述备份存储空间中所述多个移动区块的信息以及所述多个移动区块的逐次移动顺序。
在又一种可能的实现方式中,该装置还包括:
遍历指针存储单元,用于在依次遍历所述多个移动区块的过程中,在确定出当前遍历到的目标移动区块后,在所述嵌入式虚拟机的内存空间中的非易失性存储区内存储移动块区的遍历指针,所述遍历指针指向当前遍历到的所述目标移动区块;
上电恢复单元,用于在所述嵌入式虚拟机存在掉电并重上电的情况,基于所述遍历指针确定当前遍历到的所述目标移动区块,并返回执行所述指针调整单元的操作。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。同时,本说明书中各实施例中记载的特征可以相互替换或者组合,使本领域专业技术人员能够实现或使用本申请。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (7)
1.一种存储空间碎片化的处理方法,其特征在于,应用于智能卡,所述智能卡中部署有嵌入式虚拟机,所述方法包括:
获得所述嵌入式虚拟机的内存空间对应的空闲表,所述空闲表中记录有所述内存空间中多个碎片区的信息,其中,碎片区的信息包括碎片区的起始地址、结束地址和大小;
依据所述空闲表记录的多个碎片区的信息,确定逐次压缩所述多个碎片区所需逐次移动的多个移动区块的信息以及所述多个移动区块的逐次移动顺序,其中,在逐次压缩多个碎片区的过程中,每次所需移动的移动区块为所述内存空间中最近一段连续的数据块以及所述数据块之前的连续空闲区,所述移动区块的信息至少包括所述移动区块的地址区间以及所述移动区块内连续空闲区的地址区间,所述多个移动区块为按照各个碎片区的地址从高到低的顺序,按照每次压缩一个碎片区的原则,在逐次压缩多个碎片区的情况下所需逐次移动的多个移动区块,所述逐次移动顺序为逐次移动各移动区块的先后顺序;
在嵌入式虚拟机对应的备份存储空间中存储所述多个移动区块的信息以及所述多个移动区块的逐次移动顺序,所述备份存储空间为预设的用于数据备份的存储区;
对所述内存空间中多个碎片区进行压缩处理,以去除所述内存空间中的碎片区,其中包括:通过将各个碎片区从低地址的一侧依次移动到高地址侧,直到所有的碎片区全部在高地址侧形成连续的空闲空间;
在完成所述多个碎片区的压缩处理后,依据所述多个移动区块的逐次移动顺序,依次遍历所述多个移动区块;
针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,针对当前遍历到的目标数据对象,如所述目标数据对象引用的至少一个引用数据对象的指针处于所述目标移动区块的地址区间,依据所述目标移动区块内连续空闲区的地址区间,确定移动所述目标移动区块后所述引用数据对象的地址调整量,并基于所述地址调整量调整所述目标数据对象中所述引用数据对象的指针;
在遍历完所述多个移动区块,且针对逐次移动顺序位于最后的移动区块遍历完所述内存空间中所有数据对象,则删除所述备份存储空间中所述多个移动区块的信息以及所述多个移动区块的逐次移动顺序;
所述方法还包括:
在依次遍历所述多个移动区块的过程中,在确定出当前遍历到的目标移动区块后,在所述嵌入式虚拟机的内存空间中的非易失性存储区内存储移动区块的遍历指针,所述遍历指针指向当前遍历到的所述目标移动区块;
在所述嵌入式虚拟机存在掉电并重上电的情况,基于所述遍历指针确定当前遍历到的所述目标移动区块,并针对所述目标移动区块,执行所述依次遍历内存空间中各数据对象的操作。
2.根据权利要求1所述的方法,其特征在于,所述获得所述嵌入式虚拟机的内存空间对应的空闲表,包括:
通过所述嵌入式虚拟机获得待存储的待存数据;
依据所述待存数据的数据量,检测所述内存空间是否具有能够存储所述待存数据的连续存储区;
如所述内存空间剩余的总存储空间充足且不具有能够存储所述待存数据的连续存储区,获得所述嵌入式虚拟机的内存空间对应的空闲表。
3.根据权利要求1所述的方法,其特征在于,针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,包括:
针对当前遍历到的目标移动区块,依次遍历内存空间的数据链表中各数据对象。
4.根据权利要求1所述的方法,其特征在于,所述针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,包括:
针对当前遍历到的目标移动区块,依次遍历栈帧中各数据对象。
5.根据权利要求1所述的方法,其特征在于,所述获得所述嵌入式虚拟机的内存空间对应的空闲表,包括:
获得所述嵌入式虚拟的内存空间中堆内的空闲表,所述空闲表中记录有所述堆内多个碎片区的信息;
所述对所述内存空间中多个碎片区进行压缩处理,包括:
对所述堆内的多个碎片区进行压缩处理;
所述依次遍历内存空间中各数据对象,包括:
依次遍历所述堆内各数据对象。
6.一种存储空间碎片化的处理装置,其特征在于,应用于智能卡,所述智能卡中部署有嵌入式虚拟机,所述装置包括:
表获得单元,用于获得所述嵌入式虚拟机的内存空间对应的空闲表,所述空闲表中记录有所述内存空间中多个碎片区的信息,其中,碎片区的信息包括碎片区的起始地址、结束地址和大小;
信息确定单元,用于依据所述空闲表记录的多个碎片区的信息,确定逐次压缩所述多个碎片区所需逐次移动的多个移动区块的信息以及所述多个移动区块的逐次移动顺序,其中,在逐次压缩多个碎片区的过程中,每次所需移动的移动区块为所述内存空间中最近一段连续的数据块以及所述数据块之前的连续空闲区,所述移动区块的信息至少包括所述移动区块的地址区间以及所述移动区块内连续空闲区的地址区间,所述多个移动区块为按照各个碎片区的地址从高到低的顺序,按照每次压缩一个碎片区的原则,在逐次压缩多个碎片区的情况下所需逐次移动的多个移动区块,所述逐次移动顺序为逐次移动各移动区块的先后顺序;
碎片去除单元,用于对所述内存空间中多个碎片区进行压缩处理,以去除所述内存空间中的碎片区,其中包括:通过将各个碎片区从低地址的一侧依次移动到高地址侧,直到所有的碎片区全部在高地址侧形成连续的空闲空间;
块遍历单元,用于在完成所述多个碎片区的压缩处理后,依据所述多个移动区块的逐次移动顺序,依次遍历所述多个移动区块;
指针调整单元,用于针对当前遍历到的目标移动区块,依次遍历内存空间中各数据对象,针对当前遍历到的目标数据对象,如所述目标数据对象引用的至少一个引用数据对象的指针处于所述目标移动区块的地址区间,依据所述目标移动区块内连续空闲区的地址区间,确定移动所述目标移动区块后所述引用数据对象的地址调整量,并基于所述地址调整量调整所述目标数据对象中所述引用数据对象的指针;
信息存储单元,用于所述信息确定单元确定所述多个移动区块的信息以及所述多个移动区块的逐次移动顺序之后,在嵌入式虚拟机对应的备份存储空间中存储所述多个移动区块的信息以及所述多个移动区块的逐次移动顺序,所述备份存储空间为预设的用于数据备份的存储区;
信息删除单元,用于在遍历完所述多个移动区块,且针对逐次移动顺序位于最后的移动区块遍历完所述内存空间中所有数据对象,删除所述备份存储空间中所述多个移动区块的信息以及所述多个移动区块的逐次移动顺序;
遍历指针存储单元,用于在依次遍历所述多个移动区块的过程中,在确定出当前遍历到的目标移动区块后,在所述嵌入式虚拟机的内存空间中的非易失性存储区内存储移动块区的遍历指针,所述遍历指针指向当前遍历到的所述目标移动区块;
上电恢复单元,用于在所述嵌入式虚拟机存在掉电并重上电的情况,基于所述遍历指针确定当前遍历到的所述目标移动区块,并返回执行所述指针调整单元的操作。
7.根据权利要求6所述的装置,其特征在于,所述表获得单元,包括:
存储确定单元,用于通过所述嵌入式虚拟机获得待存储的待存数据;
内存检测单元,用于依据所述待存数据的数据量,检测所述内存空间是否具有能够存储所述待存数据的连续存储区;
表获得触发单元,用于如所述内存空间剩余的总存储空间充足且不具有能够存储所述待存数据的连续存储区,获得所述嵌入式虚拟机的内存空间对应的空闲表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011393020.1A CN112199303B (zh) | 2020-12-03 | 2020-12-03 | 存储空间碎片化的处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011393020.1A CN112199303B (zh) | 2020-12-03 | 2020-12-03 | 存储空间碎片化的处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112199303A CN112199303A (zh) | 2021-01-08 |
CN112199303B true CN112199303B (zh) | 2021-03-16 |
Family
ID=74033676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011393020.1A Active CN112199303B (zh) | 2020-12-03 | 2020-12-03 | 存储空间碎片化的处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112199303B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112817526B (zh) * | 2021-01-19 | 2023-04-28 | 杭州和利时自动化有限公司 | 一种数据存储方法、装置及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102024034A (zh) * | 2010-11-26 | 2011-04-20 | 中国科学院声学研究所 | 一种面向高清媒体的嵌入式文件系统的碎片处理方法 |
CN111444117A (zh) * | 2020-03-23 | 2020-07-24 | Oppo广东移动通信有限公司 | 存储空间碎片化实现方法、装置、存储介质及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10565099B2 (en) * | 2012-12-28 | 2020-02-18 | Apple Inc. | Methods and apparatus for compressed and compacted virtual memory |
-
2020
- 2020-12-03 CN CN202011393020.1A patent/CN112199303B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102024034A (zh) * | 2010-11-26 | 2011-04-20 | 中国科学院声学研究所 | 一种面向高清媒体的嵌入式文件系统的碎片处理方法 |
CN111444117A (zh) * | 2020-03-23 | 2020-07-24 | Oppo广东移动通信有限公司 | 存储空间碎片化实现方法、装置、存储介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112199303A (zh) | 2021-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6839823B1 (en) | Increased reliability of data stored on flash memory in applications sensitive to power-loss | |
US8307148B2 (en) | Flash management techniques | |
KR101818578B1 (ko) | 비휘발성 메모리를 갖는 시스템을 위한 동적 및 정적 데이터의 처리 | |
CN107608908B (zh) | 用于数据储存装置的磨损平均方法 | |
US8028121B2 (en) | Method and apparatus for detecting static data area, wear-leveling, and merging data units in nonvolatile data storage device | |
JP3628032B2 (ja) | コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 | |
US7085908B2 (en) | Linear object management for a range of flash memory | |
JP4535117B2 (ja) | メモリ装置、メモリ管理方法、およびプログラム | |
US20020112116A1 (en) | Methods, systems, and computer program products for storing data in collections of tagged data pieces | |
EP2570929A2 (en) | Weave sequence counter for non-volatile memory systems | |
WO2009140000A1 (en) | Flash recovery employing transaction log | |
CN107818269B (zh) | 一种基于Flash的文件保存方法及系统 | |
CN112199303B (zh) | 存储空间碎片化的处理方法和装置 | |
CN109558333B (zh) | 具有可变额外存储空间的固态存储设备命名空间 | |
WO2015026966A1 (en) | System and method for dynamically selecting a garbage collection algorithm based on the contents of heap regions | |
US20070005929A1 (en) | Method, system, and article of manufacture for sector mapping in a flash device | |
EP2264602A1 (en) | Memory device for managing the recovery of a non volatile memory | |
CN107341049B (zh) | 一种事务处理的优化处理方法及装置 | |
CN109426436B (zh) | 基于可变长大块的垃圾回收方法与装置 | |
CN102004697B (zh) | 一种Flash的回收方法和装置 | |
US11199983B2 (en) | Apparatus for obsolete mapping counting in NAND-based storage devices | |
CN1447243A (zh) | 快闪存储器中快速且能防止不正常断电的演算法及其控制系统 | |
US20030200232A1 (en) | Information processor and program | |
CN115080221B (zh) | 一种内存资源使用控制方法、装置、设备及存储介质 | |
US9286204B2 (en) | Memory controller |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |