CN114595162B - 用于java智能卡内存碎片整理的方法和装置 - Google Patents
用于java智能卡内存碎片整理的方法和装置 Download PDFInfo
- Publication number
- CN114595162B CN114595162B CN202210500726.6A CN202210500726A CN114595162B CN 114595162 B CN114595162 B CN 114595162B CN 202210500726 A CN202210500726 A CN 202210500726A CN 114595162 B CN114595162 B CN 114595162B
- Authority
- CN
- China
- Prior art keywords
- bitmap
- memory
- mapping table
- data block
- address
- 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
-
- 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
- G06F12/0261—Garbage collection, i.e. reclamation of unreferenced memory using reference counting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及智能卡技术领域,公开一种用于JAVA智能卡内存碎片整理方法,包括:JAVA智能卡保存有用于映射JAVA智能卡内存的物理空间的位图内存映射表、用于映射JAVA智能卡内存的逻辑空间的对象位图映射表、用于标识内存碎片以及将位图内存映射表和对象位图映射表进行关联的位图表;所述方法包括:在触发碎片整理的情况下,查找位图表获得位图表中的内存空洞信息;根据位图表中的空洞信息设置待搬移的数据块的源地址、数据块数量、目的地址;将待搬移的数据块从源地址搬移到目的地址;修改位图内存映射表和对象位图映射表。用以解决内存碎片整理性能低,实现复杂的技术问题。本申请还公开一种用于JAVA智能卡内存碎片整理装置、电子设备和存储介质。
Description
技术领域
本申请涉及智能卡技术领域,例如涉及一种用于JAVA智能卡内存碎片整理的方法、装置、电子设备和存储介质。
背景技术
JAVA智能卡经过几十年的飞速发展,随着技术进步,用户需求的多样性,要求一张卡片上可以安装多个应用。用户在使用过程中根据需要会频繁的对卡片上的应用进行安装和删除操作。这样必然会导致卡片上的内存空间产生越来越多的内存碎片,降低系统内存空间的利用率。
相关的内存碎片整理方法一般都是遍历空间管理表、将空闲块进行合并、修改对象头,修改JAVA栈。此方法性能低,实现复杂,实现方法开销大。
发明内容
为了对披露的实施例的一些方面有基本的理解,下面给出了简单的概括。所述概括不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围,而是作为后面的详细说明的序言。
本公开实施例提供了一种用于JAVA智能卡内存碎片整理的方法、装置、电子设备和存储介质,整理碎片过程中不用遍历内存空间,不用修改JAVA对象头,也不用修改JAVA栈,整理内存碎片开销小。用以解决内存碎片整理性能低,实现复杂,实现方法开销大的技术问题。
在一些实施例中,所述方法包括:JAVA智能卡保存有用于映射JAVA智能卡内存的物理空间的位图内存映射表、用于映射JAVA智能卡内存的逻辑空间的对象位图映射表、用于标识内存碎片以及将位图内存映射表和对象位图映射表进行关联的位图表;实现方法包括:在触发碎片整理的情况下,查找位图表获得位图表中的内存空洞信息;根据位图表中的空洞信息设置待搬移的数据块的源地址、数据块数量、目的地址;将待搬移的数据块从源地址搬移到目的地址;修改位图内存映射表和对象位图映射表。
采用基于位图管理的方式对内存空间进行碎片整理,将空间划分为逻辑空间和物理空间,程序访问逻辑空间而不直接访问物理空间,对于碎片的整理只需修改逻辑地址和物理地址的映射即可。这样在碎片整理过程中由于不用直接访问物理空间,从而不用修改JAVA对象头,也不用修改JAVA栈,仅仅对逻辑地址进行操作,即可整理内存碎片,因此减少了内存碎片管理开销。
可选地,上述位图表包括:内存的逻辑空间中各数据块的占用状态,和,各数据块所对应的序号;上述位图内存映射表包括:与内存物理空间中数据块对应的块序号,和,块序号索引;其中,块序号索引与位图表的序号具有对应关系;上述对象位图映射表包括:与位图表中序号相对应的位图序号,和,位图序号索引;其中,位图序号索引与对象标识具有对应关系。
用逻辑空间将物理空间隔离,逻辑空间由位图表、位图内存映射表、对象位图映射表组成。其中,对象位图映射表连接对象,位图内存映射表连接物理数据块,而位图表则连接位图内存映射表和对象位图映射表。从而,可以通过位图表实现对内存空间进行碎片整理。
可选地,对象标识为JAVA对象头所存储的地址;当访问JAVA程序时,所引用的JAVA栈空间的地址为对象标识。
对象标识为JAVA对象头的地址,对象位图映射表通过位图序号索引与对象标识关联。由此,对象可通过对象位图映射表再与位图表关联。
可选地,查找位图表获得位图表中的内存空洞信息,包括:按照升序查找位图表中存在的内存空洞;记录内存空洞的起始地址,和,内存空洞中空闲数据块的数量。
内存空洞是位图表中连续的未被占用的数据块,需要根据空洞的起始地址和空洞中空闲数据块数量,将空洞填充。
可选地,根据位图表中的空洞信息设置待搬移的数据块的源地址、数据块数量、目的地址,包括:将距离内存空洞最远的占用数据块的最大地址设置为源地址;根据内存空洞中空闲数据块的数量N设置搬移的数据块的数量m;其中,m≤N;将内存空洞内的最小地址设置为目的地址。
为了减少数据块填充空洞的次数,根据空洞的起始地址和空洞中空闲数据块数量,将离空洞最远的数据块填充至空洞内,与将离空洞比较近的数据块填充空洞相比,这样可以避免搬移数据块后产生新的空洞。并且,一次性将m个搬移数据块填充至具有N个空闲数据块的空洞内,其中m≤N,从而实现用最少次数将空洞填满。
可选地,将待搬移的数据块从源地址搬移到目的地址,包括:根据待搬移的数据块的源地址和数据块数量、目的地址修改位图表。
位图表中的空洞填充后,需要修改源地址和目的地址的占用状态。
可选地,根据待搬移的数据块的源地址和数据块数量、目的地址修改位图表,包括:设置与源地址对应的第一数据块为空闲;其中,第一数据块的数量等于待搬移的数据块的数据块数量;设置与目的地址对应的第二数据块为占用,其中,第二数据块的数量等于待搬移的数据块数量。
根据待搬移数据块的数量设置源地址的数据块为空闲,同时,把目的地址的数据块设置为占用。并且,空闲与占用为一一对应。
可选地,修改位图内存映射表,包括:在位图表中分别确定源地址对应的第一序号和目的地址对应的第二序号;在位图内存映射表中依次将第一序号所对应的第一块序号和第二序号所对应的第二块序号进行互换。
位图表改变占用状态时,源地址的状态从占用状态变为空闲状态,与此相对应,目的地址的状态从空闲状态变为占用状态。对于位图表中源地址和目的地址的状态改变,位图内存映射表仅仅需要将源地址和目的地址所对应的块序号进行交换,即可实现数据块所对应的位图表的变更。
可选地,修改对象位图映射表,包括:在位图表中分别确定源地址对应的第一序号和目的地址对应的第二序号;在对象位图映射表中依次将第一序号所对应的第一位图序号和第二序号所对应的第二位图序号进行互换。
位图表改变占用状态时,源地址的状态从占用状态变为空闲状态,与此对应,目的地址的状态从空闲状态变为占用状态。对于位图表中源地址和目的地址的状态改变,对象位图映射表仅仅需要将源地址和目的地址所对应的位图序号进行交换,即改变对象所映射的数据块。而不必修改JAVA对象头,也不用修改JAVA栈,从而减少了碎片整理所涉及的,降低了碎片化整理的开销。
可选地,根据所修改的位图表修改位图内存映射表和对象位图映射表后,还包括:再次查找位图表,在位图表中存在内存空洞信息的情况下执行以下步骤:根据位图表中的空洞信息设置搬移数据块的源地址和数据块数量、目的地址;根据搬移数据块的源地址和数据块数量、目的地址修改位图表;根据所修改的位图表修改位图内存映射表和对象位图映射表。
循环处理位图表中的所有空洞,直至处理完所有空洞。
在一些实施例中,所述装置包括:处理器和存储有程序指令的存储器,所述处理器被配置为在运行所述程序指令时,执行上述用于JAVA智能卡内存碎片整理的方法。
在一些实施例中,所述电子设备包括:上述的用于JAVA智能卡内存碎片整理的装置。
在一些实施例中,所述存储介质包括:所述程序指令在运行时,执行上述用于JAVA智能卡内存碎片整理的方法。
以上的总体描述和下文中的描述仅是示例性和解释性的,不用于限制本申请。
附图说明
一个或多个实施例通过与之对应的附图进行示例性说明,这些示例性说明和附图并不构成对实施例的限定,附图中具有相同参考数字标号的元件示为类似的元件,附图不构成比例限制,并且其中:
图1是本公开实施例提供的一种用于JAVA智能卡内存碎片整理的位图管理表关联示意图;
图2是本公开实施例提供的一种用于JAVA智能卡内存碎片整理的方法的流程图;
图3是本公开实施例提供的一种用于JAVA智能卡内存碎片整理的方法的整理前示意图;
图4是本公开实施例提供的一种用于JAVA智能卡内存碎片整理的方法的整理后示意图;
图5是本公开实施例提供的一种用于JAVA智能卡内存碎片整理的方法的执行步骤流程图;
图6是本公开实施例提供的一种用于JAVA智能卡内存碎片整理的装置的示意图。
具体实施方式
为了能够更加详尽地了解本公开实施例的特点与技术内容,下面结合附图对本公开实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本公开实施例。在以下的技术描述中,为方便解释起见,通过多个细节以提供对所披露实施例的充分理解。然而,在没有这些细节的情况下,一个或多个实施例仍然可以实施。在其它情况下,为简化附图,熟知的结构和装置可以简化展示。
本公开实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开实施例的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
除非另有说明,术语“多个”表示两个或两个以上。
本公开实施例中,字符“/”表示前后对象是一种“或”的关系。例如,A/B表示:A或B。
术语“对应”可以指的是一种关联关系或绑定关系,A与B相对应指的是A与B之间是一种关联关系或绑定关系。
结合图1所示,本公开实施例提供的一种用于JAVA智能卡内存碎片整理的位图管理表关联示意图,包括:
对象位图映射表的位图序号与位图表的序号相对应,对象位图映射表的位图序号索引与对象标识相对应。由此,在对象标识与对象位图映射表的位图序号索引的对应项不变的情况下,又由于对象位图映射表的位图序号与位图表的序号相对应,则同时调整对象位图映射表的位图序号与位图表的序号的排列顺序,可改变位图表的占用状态的排列顺序,而对象标识的值以及排列顺序不变。
位图内存映射表的块序号与存储的数据块相对应,位图内存映射表的块序号索引与位图表的序号相对应。由此,在位图内存映射表的块序号索引与位图表的序号的对应项固定不变的情况下,只需根据位图表的序号的占用状态对调位图内存映射表的块序号位置,可实现数据块的搬移。
位图表的占用状态标注了数据块是否占用/空闲,根据占用/空闲确定空洞。位图表的序号与对象位图映射表的位图序号相对应,同时,位图表的序号与位图内存映射表的块序号索引相对应,实现了连接对象位图映射表与位图内存映射表。
结合图2所示,本公开实施例提供的一种用于JAVA智能卡内存碎片整理的方法的流程图,包括:
S01,碎片整理程序查找位图表获得位图表中的内存空洞信息。
S02,碎片整理程序判断是否还有内存空洞,如果有空洞则执行步骤S03,否则,碎片整理结束。
S03,碎片整理程序根据位图表中的空洞信息设置待搬移的数据块的源地址、数据块数量、目的地址。
S04,碎片整理程序将待搬移的数据块从源地址搬移到目的地址。
S05,碎片整理程序修改位图内存映射表和对象位图映射表。
S06,碎片整理程序查找位图表的空洞位置信息。
JAVA智能卡保存有用于映射JAVA智能卡内存的物理空间的位图内存映射表、用于映射JAVA智能卡内存的逻辑空间的对象位图映射表、用于标识内存碎片以及将位图内存映射表和对象位图映射表进行关联的位图表;所述方法包括:在触发碎片整理的情况下,查找位图表获得位图表中的内存空洞信息;根据位图表中的空洞信息设置待搬移的数据块的源地址、数据块数量、目的地址;将待搬移的数据块从源地址搬移到目的地址;修改位图内存映射表和对象位图映射表。
可选地,步骤S01中,上述位图表包括:内存的逻辑空间中各数据块的占用状态,和,各数据块所对应的序号;上述位图内存映射表包括:与内存物理空间中数据块对应的块序号,和,块序号索引;其中,块序号索引与位图表的序号具有对应关系;上述对象位图映射表包括:与位图表中序号相对应的位图序号,和,位图序号索引;其中,位图序号索引与对象标识具有对应关系。
位图表控制逻辑空间数据块的占用/空闲的位置排列顺序,位图表通过序号连接位图内存映射表和对象位图映射表。其中,对象位图映射表连接对象,位图内存映射表连接物理数据块。因为位图表的序号的占用状态的改变,是交换了源地址和目的地址的占用状态。与此相应,通过交换对象位图映射表的相应位图序号,可以实现对象标识还与上述位图表交换后的位图序号连接。同理,通过交换位图内存映射表的相应块序号,可以实现数据块还与上述位图表交换后的块序号连接。
可选地,上述对象标识为JAVA对象头所存储的地址;当访问JAVA程序时,所引用的JAVA栈空间的地址为对象标识。
对象位图映射表通过对象标识与对象关联,对象标识为JAVA对象头的地址,由此,对象可通过对象位图映射表再与位图表关联。
可选地,步骤S01中,查找位图表获得位图表中的内存空洞信息,包括:按照升序查找位图表中存在的内存空洞;记录内存空洞的起始地址,和,内存空洞中空闲数据块的数量。
内存空洞是位图表中连续的未被占用/空闲的数据块,为了后续步骤填充空洞,需要取得空洞的起始地址和空洞中空闲数据块数量。
可选地,步骤S03中,根据位图表中的空洞信息设置待搬移的数据块的源地址、数据块数量、目的地址,包括:将距离内存空洞最远的占用数据块的最大地址设置为源地址;根据内存空洞中空闲数据块的数量N设置搬移的数据块的数量m;其中,m≤N;将内存空洞内的最小地址设置为目的地址。
获取空洞的起始地址和空洞中空闲数据块数量,使用距离空洞最远的数据块填充空洞,可以避免搬移数据块后产生新的空洞。在搬移的数据块的数量m≤空闲数据块数量N的情况下,可实现用最少次数将空洞填满。
可选地,步骤S04中,将待搬移的数据块从源地址搬移到目的地址,包括:根据待搬移的数据块的源地址和数据块数量、目的地址修改位图表。
位图表中的空洞填充后,需要修改源地址和目的地址的占用状态。
可选地,上述根据待搬移的数据块的源地址和数据块数量、目的地址修改位图表,包括:设置与源地址对应的第一数据块为空闲;其中,第一数据块的数量等于待搬移的数据块的数据块数量;设置与目的地址对应的第二数据块为占用,其中,第二数据块的数量等于待搬移的数据块数量。
根据待搬移数据块的数量设置源地址的数据块为空闲,同时,把目的地址的数据块设置为占用。
可选地,步骤S05中,修改位图内存映射表,包括:在位图表中分别确定源地址对应的第一序号和目的地址对应的第二序号;在位图内存映射表中依次将第一序号所对应的第一块序号和第二序号所对应的第二块序号进行互换。
对于位图表中源地址和目的地址的占用状态改变,位图内存映射表需要将与块序号相应的源地址和目的地址进行互换,从而实现数据块所对应的位图表的变更。
可选地,步骤S05中,修改对象位图映射表,包括:在位图表中分别确定源地址对应的第一序号和目的地址对应的第二序号;在对象位图映射表中依次将第一序号所对应的第一位图序号和第二序号所对应的第二位图序号进行互换。
对于位图表中源地址和目的地址的状态改变,对象位图映射表需要将源地址和目的地址所对应的位图序号进行互换,从而改变对象所映射的数据块。
可选地,步骤S06中,根据所修改的位图表修改位图内存映射表和对象位图映射表后,还包括:再次查找位图表,在位图表中存在内存空洞信息的情况下执行以下步骤:根据位图表中的空洞信息设置搬移数据块的源地址和数据块数量、目的地址;根据搬移数据块的源地址和数据块数量、目的地址修改位图表;根据所修改的位图表修改位图内存映射表和对象位图映射表。
循环处理位图表中的所有空洞,直至处理完所有空洞。
结合图3所示本公开实施例提供的一种用于JAVA智能卡内存碎片整理的方法的整理前示意图,以及,图4所示本公开实施例提供的一种用于JAVA智能卡内存碎片整理的方法的整理后示意图,包括:
位图表在碎片整理前有序号为2、4的空洞,每个空洞内空闲数据块数量为1,需要将处于占有状态的序号为5的数据块搬移到序号为2的空洞处。
首先,在位图表中,按照序号升序顺序查找到序号为2的空洞,并获得空闲数据块数量,数量为1。按照序号降序顺序查找到距离空洞最远的序号为5的数据块。将序号为2的数据块占用状态从0变为1,同时,把序号为5的数据块占用状态从1变为0。
然后,在位图内存映射表中,块序号索引不变,将块序号索引为2和5的块序号进行交换。交换后块序号索引为2的块序号变为9,块序号索引为5的块序号变为6。
之后,在对象位图映射表中,位图序号索引不变,将位图序号按照位图表的序号交换。对象位图映射表的位图序号2变为5,位图序号5变为2。
再次检查位图表,序号从0至3的数据块占用状态都为1,序号从4至5的数据块的占用状态都为0。因此,已经没有数据空洞,碎片整理完成。
结合图5所示,本公开实施例提供的一种用于JAVA智能卡内存碎片整理的方法的执行步骤流程图,包括:
S001,碎片整理程序初始化搬移目的地址,搬移目的地址设置为0;
S002,碎片整理程序初始化搬移源地址,搬移源地址设置为0;
S003,碎片整理程序初始化搬移数据块的数量,搬移数据块数量设置为0;
S004,碎片整理程序如果检测到触发碎片整理,则进入步骤S005,否则,结束处理。
S005,碎片整理程序获取位图表的空洞位置信息,包括内存空洞的起始地址,和,内存空洞中空闲数据块的数量。
S006,碎片整理程序判断是否有空洞,如果有空洞则进入步骤S007,否则,处理结束。
S007,碎片整理程序根据空洞信息设置搬移数据源地址,源地址为距离空洞最远的地址。
S008,碎片整理程序根据空洞信息设置搬移数据块数量,搬移数据块数量m≤空洞的空闲数据块数量N。
S009,碎片整理程序将数据从源地址搬移到目的地址,并改变位图表中数据块占用状态。
S010,碎片整理程序修改位图内存映射表,在位图内存映射表中依次将位图表中源地址对应的块序号和位图表中目的地址对应的块序号进行互换。
S011,碎片整理程序修改对象位图映射表,在位图内存映射表中依次将位图表中源地址对应的位图序号和位图表中目的地址对应的位图序号进行互换。
S012,碎片整理程序查找下一个位图表的空洞位置信息。
结合图6所示,本公开实施例提供的一种用于JAVA智能卡内存碎片整理的装置的示意图,包括处理器(processor)100和存储器(memory)101。可选地,该装置还可以包括通信接口(Communication Interface)102和总线103。其中,处理器100、通信接口102、存储器101可以通过总线103完成相互间的通信。通信接口102可以用于信息传输。处理器100可以调用存储器101中的逻辑指令,以执行上述实施例的用于JAVA智能卡内存碎片整理的方法。
此外,上述的存储器101中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
存储器101作为一种存储介质,可用于存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令/模块。处理器100通过运行存储在存储器101中的程序指令/模块,从而执行功能应用以及数据处理,即实现上述实施例中用于JAVA智能卡内存碎片整理的方法。
存储器101可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器101可以包括高速随机存取存储器,还可以包括非易失性存储器。
本公开实施例提供了一种电子设备,包含上述的用于JAVA智能卡内存碎片整理的装置。
本公开实施例提供了一种存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为执行上述用于JAVA智能卡内存碎片整理的方法。
上述的存储介质可以是暂态计算机可读存储介质,也可以是非暂态计算机可读存储介质。
本公开实施例的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括一个或多个指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开实施例所述方法的全部或部分步骤。而前述的存储介质可以是非暂态存储介质,包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。
以上描述和附图充分地示出了本公开的实施例,以使本领域的技术人员能够实践它们。其他实施例可以包括结构的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施例的部分和特征可以被包括在或替换其他实施例的部分和特征。而且,本申请中使用的用词仅用于描述实施例并且不用于限制权利要求。如在实施例以及权利要求的描述中使用的,除非上下文清楚地表明,否则单数形式的“一个”(a)、“一个”(an)和“所述”(the)旨在同样包括复数形式。类似地,如在本申请中所使用的术语“和/或”是指包含一个或一个以上相关联的列出的任何以及所有可能的组合。另外,当用于本申请中时,术语“包括”(comprise)及其变型“包括”(comprises)和/或包括(comprising)等指陈述的特征、整体、步骤、操作、元素,和/或组件的存在,但不排除一个或一个以上其它特征、整体、步骤、操作、元素、组件和/或这些的分组的存在或添加。在没有更多限制的情况下,由语句“包括一个…”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。本文中,每个实施例重点说明的可以是与其他实施例的不同之处,各个实施例之间相同相似部分可以互相参见。对于实施例公开的方法、产品等而言,如果其与实施例公开的方法部分相对应,那么相关之处可以参见方法部分的描述。
本领域技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,可以取决于技术方案的特定应用和设计约束条件。所述技术人员可以对每个特定的应用来使用不同方法以实现所描述的功能,但是这种实现不应认为超出本公开实施例的范围。所述技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本文所披露的实施例中,所揭露的方法、产品(包括但不限于装置、设备等),可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,可以仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例。另外,在本公开实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
附图中的流程图和框图显示了根据本公开实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。在附图中的流程图和框图所对应的描述中,不同的方框所对应的操作或步骤也可以以不同于描述中所披露的顺序发生,有时不同的操作或步骤之间不存在特定的顺序。例如,两个连续的操作或步骤实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
Claims (9)
1.一种用于JAVA智能卡内存碎片整理的方法,其特征在于,所述JAVA智能卡保存有用于映射JAVA智能卡内存的物理空间的位图内存映射表、用于映射JAVA智能卡内存的逻辑空间的对象位图映射表、用于标识内存碎片以及将位图内存映射表和对象位图映射表进行关联的位图表;
所述方法包括:
在触发碎片整理的情况下,查找位图表获得位图表中的内存空洞信息;
根据位图表中的空洞信息设置待搬移的数据块的源地址、数据块数量、目的地址;
将待搬移的数据块从源地址搬移到目的地址;
修改位图内存映射表和对象位图映射表;
其中,根据位图表中的空洞信息设置待搬移的数据块的源地址、数据块数量、目的地址,包括:
将距离内存空洞最远的占用数据块的最大地址设置为源地址;
根据内存空洞中空闲数据块的数量N设置搬移的数据块的数量m;其中,m≤N;
将内存空洞内的最小地址设置为目的地址;
其中,将待搬移的数据块从源地址搬移到目的地址,包括:
根据待搬移的数据块的源地址和数据块数量、目的地址修改位图表;
其中,根据待搬移的数据块的源地址和数据块数量、目的地址修改位图表,包括:
设置与源地址对应的第一数据块为空闲;其中,第一数据块的数量等于待搬移的数据块的数据块数量;
设置与目的地址对应的第二数据块为占用,其中,第二数据块的数量等于待搬移的数据块数量;
其中,修改位图内存映射表,包括:
在位图表中分别确定源地址对应的第一序号和目的地址对应的第二序号;
在位图内存映射表中依次将第一序号所对应的第一块序号和第二序号所对应的第二块序号进行互换。
2.根据权利要求1所述的方法,其特征在于,
所述位图表包括:内存的逻辑空间中各数据块的占用状态,和,各数据块所对应的序号;
所述位图内存映射表包括:与内存物理空间中数据块对应的块序号,和,块序号索引;其中,块序号索引与位图表的序号具有对应关系;
所述对象位图映射表包括:与位图表中序号相对应的位图序号,和,位图序号索引;其中,位图序号索引与对象标识具有对应关系。
3.根据权利要求2所述的方法,其特征在于,对象标识为JAVA对象头所存储的地址;当访问JAVA程序时,所引用的JAVA栈空间的地址为对象标识。
4.根据权利要求2所述的方法,其特征在于,查找位图表获得位图表中的内存空洞信息,包括:
按照升序查找位图表中存在的内存空洞;
记录内存空洞的起始地址,和,内存空洞中空闲数据块的数量。
5.根据权利要求1所述的方法,其特征在于,修改对象位图映射表,包括:
在位图表中分别确定源地址对应的第一序号和目的地址对应的第二序号;
在对象位图映射表中依次将第一序号所对应的第一位图序号和第二序号所对应的第二位图序号进行互换。
6.根据权利要求1至5的任一项所述的方法,其特征在于,根据所修改的位图表修改位图内存映射表和对象位图映射表后,还包括:
再次查找位图表,在位图表中存在内存空洞信息的情况下执行以下步骤:
根据位图表中的空洞信息设置搬移数据块的源地址和数据块数量、目的地址;
根据搬移数据块的源地址和数据块数量、目的地址修改位图表;
根据所修改的位图表修改位图内存映射表和对象位图映射表。
7.一种用于JAVA智能卡内存碎片整理的装置,包括处理器和存储有程序指令的存储器,其特征在于,所述处理器被配置为在运行所述程序指令时,执行如权利要求1至6任一项所述的用于JAVA智能卡内存碎片整理的方法。
8.一种电子设备,其特征在于,包括如权利要求7所述的用于JAVA智能卡内存碎片整理的装置。
9.一种存储介质,存储有程序指令,其特征在于,所述程序指令在运行时,执行如权利要求1至6任一项所述的用于JAVA智能卡内存碎片整理的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210500726.6A CN114595162B (zh) | 2022-05-10 | 2022-05-10 | 用于java智能卡内存碎片整理的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210500726.6A CN114595162B (zh) | 2022-05-10 | 2022-05-10 | 用于java智能卡内存碎片整理的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114595162A CN114595162A (zh) | 2022-06-07 |
CN114595162B true CN114595162B (zh) | 2022-08-19 |
Family
ID=81811857
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210500726.6A Active CN114595162B (zh) | 2022-05-10 | 2022-05-10 | 用于java智能卡内存碎片整理的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114595162B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102194010A (zh) * | 2011-06-16 | 2011-09-21 | 华中科技大学 | 虚拟文件系统碎片的零拷贝整理方法 |
CN103246610A (zh) * | 2012-02-14 | 2013-08-14 | 中国科学院上海微系统与信息技术研究所 | 基于单类型存储器的嵌入式系统的动态存储管理方法 |
CN103699493A (zh) * | 2013-12-26 | 2014-04-02 | 上海柯斯软件有限公司 | 智能卡dtr内存空间的控制系统及方法 |
CN104090848A (zh) * | 2014-07-16 | 2014-10-08 | 云南大学 | 一种周期性大数据处理的内存管理方法及装置 |
CN107239412A (zh) * | 2017-06-19 | 2017-10-10 | 杭州宏杉科技股份有限公司 | 基于Thin‑LUN的存储空间配置方法、数据写入方法及存储设备 |
GB201908812D0 (en) * | 2019-06-19 | 2019-07-31 | Imagination Tech Ltd | Primitive fragment processing in the rasterization phase of a graphics processing system |
CN111813710A (zh) * | 2020-09-11 | 2020-10-23 | 鹏城实验室 | 避免Linux内核内存碎片方法、设备及计算机存储介质 |
CN114265670A (zh) * | 2022-03-02 | 2022-04-01 | 阿里云计算有限公司 | 一种内存块整理方法、介质及计算设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9436606B2 (en) * | 2014-01-02 | 2016-09-06 | Qualcomm Incorporated | System and method to defragment a memory |
CN106548789B (zh) * | 2015-09-17 | 2019-05-17 | 伊姆西公司 | 用于操作叠瓦式磁记录设备的方法和装置 |
-
2022
- 2022-05-10 CN CN202210500726.6A patent/CN114595162B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102194010A (zh) * | 2011-06-16 | 2011-09-21 | 华中科技大学 | 虚拟文件系统碎片的零拷贝整理方法 |
CN103246610A (zh) * | 2012-02-14 | 2013-08-14 | 中国科学院上海微系统与信息技术研究所 | 基于单类型存储器的嵌入式系统的动态存储管理方法 |
CN103699493A (zh) * | 2013-12-26 | 2014-04-02 | 上海柯斯软件有限公司 | 智能卡dtr内存空间的控制系统及方法 |
CN104090848A (zh) * | 2014-07-16 | 2014-10-08 | 云南大学 | 一种周期性大数据处理的内存管理方法及装置 |
CN107239412A (zh) * | 2017-06-19 | 2017-10-10 | 杭州宏杉科技股份有限公司 | 基于Thin‑LUN的存储空间配置方法、数据写入方法及存储设备 |
GB201908812D0 (en) * | 2019-06-19 | 2019-07-31 | Imagination Tech Ltd | Primitive fragment processing in the rasterization phase of a graphics processing system |
CN111813710A (zh) * | 2020-09-11 | 2020-10-23 | 鹏城实验室 | 避免Linux内核内存碎片方法、设备及计算机存储介质 |
CN114265670A (zh) * | 2022-03-02 | 2022-04-01 | 阿里云计算有限公司 | 一种内存块整理方法、介质及计算设备 |
Non-Patent Citations (1)
Title |
---|
What is Fragmentation and what are its types;afteracademy;《https://afteracademy.com/blog/what-is-fragmentation-and-what-are-its-types》;20200330;1 * |
Also Published As
Publication number | Publication date |
---|---|
CN114595162A (zh) | 2022-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107273455B (zh) | 区块链数据访问方法和装置 | |
EP2765524B1 (en) | Data processing method and device in cluster system | |
JP2007058646A (ja) | データ処理システム | |
CN108304272B (zh) | 一种数据io请求的处理方法及装置 | |
CN114595162B (zh) | 用于java智能卡内存碎片整理的方法和装置 | |
CN110290228B (zh) | 一种互联网协议ip地址分配方法及装置 | |
CN112181887B (zh) | 数据传输方法及装置 | |
US8527718B2 (en) | Explicit data segment boundaries with SCSI I/O referrals | |
CN115525617A (zh) | 用于日志模板的提取方法及装置、服务器、存储介质 | |
CN115934354A (zh) | 在线存储方法和装置 | |
CN104951550B (zh) | 数据存储方法及装置 | |
CN115687223A (zh) | 用于嵌入式设备串口通信的方法及装置、嵌入式设备、存储介质 | |
CN116069802A (zh) | 用于访问数据库的方法、装置、电子设备及存储介质 | |
CN108140005A (zh) | 在存储器系统协议中提供文件信息的系统及方法 | |
CN106548088A (zh) | 一种基于移动终端的保密存储区读取控制方法及移动终端 | |
CN116501507B (zh) | 用于中断处理的方法及中断控制模块、处理器、存储介质 | |
CN113259474A (zh) | 一种存储管理方法、系统、存储介质及设备 | |
CN112511441A (zh) | 报文的处理方法及装置 | |
CN110348878A (zh) | 一种对用户进行分组的方法和装置 | |
JP2988442B2 (ja) | 移動通信システムのホームロケーションレジスタと加入者データ管理方法 | |
KR940009718B1 (ko) | 문자 자원 관리 시스템 | |
CN106021121B (zh) | 用以优化分组缓冲器空间的分组处理系统、方法和设备 | |
CN112068948A (zh) | 数据散列方法、可读存储介质和电子设备 | |
CN116915510B (zh) | 一种基于高速加密算法的分布式存储系统 | |
CN114726407B (zh) | 用于获取异常信息的方法、装置、控制器及存储介质 |
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 |