CN116775506B - 内存回收方法、装置、设备和介质 - Google Patents

内存回收方法、装置、设备和介质 Download PDF

Info

Publication number
CN116775506B
CN116775506B CN202311055132.XA CN202311055132A CN116775506B CN 116775506 B CN116775506 B CN 116775506B CN 202311055132 A CN202311055132 A CN 202311055132A CN 116775506 B CN116775506 B CN 116775506B
Authority
CN
China
Prior art keywords
memory
data
memory section
idle
length
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
Application number
CN202311055132.XA
Other languages
English (en)
Other versions
CN116775506A (zh
Inventor
郭跃超
叶长安
郑琳
杨放
杨雨丰
王佩琪
王英恺
王凯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311055132.XA priority Critical patent/CN116775506B/zh
Publication of CN116775506A publication Critical patent/CN116775506A/zh
Application granted granted Critical
Publication of CN116775506B publication Critical patent/CN116775506B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及一种内存回收方法、装置、设备和介质。方法包括:响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域;在已分配内存区域内,确定待回收内存区段;尾标记指向待回收内存区段的起始位置;当待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段,将数据迁移至空闲内存区段;确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。采用本方法能够避免用于支持内存回收功能的计算机硬件资源浪费。

Description

内存回收方法、装置、设备和介质
技术领域
本申请涉及存储技术,特别是涉及一种内存回收方法、装置、设备和介质。
背景技术
随着计算机技术的迅速发展,各行各业涉及的数据越来越多。由于用于存储数据的存储空间是有限的,在数据更新导致存储空间已分配出去的内存出现大量内存碎片的情况下,为了更合理利用存储空间,通常需要对已分配出去的内存中出现的大量内存碎片进行回收,并整理为整块连续的待分配的内存。
传统技术中,通常是以页内存的形式存储数据,针对页内存中内存碎片的回收算法复杂度较高,内存回收效率低,从而造成了用于支持内存回收功能的计算机硬件资源的浪费。
发明内容
基于此,有必要针对上述技术问题,提供一种能够避免用于支持内存回收功能的计算机硬件资源浪费的内存回收方法、装置、设备和介质。
第一方面,本申请提供了一种内存回收方法,所述方法包括:
响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,所述闭环内存区域内,从所述尾标记沿预设方向到所述头标记的区域是已分配内存区域,从所述头标记沿所述预设方向到所述尾标记的区域是未分配内存区域;
在所述已分配内存区域内,确定待回收内存区段;所述尾标记指向所述待回收内存区段的起始位置;
当所述待回收内存区段内存储有数据,且所述已分配内存区域内存在可容纳所述数据的空闲内存区段,将所述数据迁移至所述空闲内存区段;
确定与所述待回收内存区段沿所述预设方向相邻的下一内存区段,并将所述尾标记指向所述下一内存区段的起始位置。
第二方面,本申请提供了一种内存回收装置,所述装置包括:
确定模块,用于响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,所述闭环内存区域内,从所述尾标记沿预设方向到所述头标记的区域是已分配内存区域,从所述头标记沿所述预设方向到所述尾标记的区域是未分配内存区域;
所述确定模块还用于在所述已分配内存区域内,确定待回收内存区段;所述尾标记指向所述待回收内存区段的起始位置;
迁移模块,用于当所述待回收内存区段内存储有数据,且所述已分配内存区域内存在可容纳所述数据的空闲内存区段,将所述数据迁移至所述空闲内存区段;
调整模块,用于确定与所述待回收内存区段沿所述预设方向相邻的下一内存区段,并将所述尾标记指向所述下一内存区段的起始位置。
在一个实施例中,所述装置还包括:
查找模块,用于从所述已分配内存区域内的至少一个闲置内存区段中,查找第一闲置内存区段,所述第一闲置内存区段的存储长度等于所述数据的数据长度;当查找到至少一个第一闲置内存区段,从所述至少一个第一闲置内存区段中,确定可容纳所述数据的空闲内存区段。
在一个实施例中,所述查找模块还用于确定所述闭环内存区域关联的回收管理区域;所述回收管理区域包括多个记录位,不同记录位对应不同的存储长度,所述记录位用于记录对应存储长度的闲置内存区段;从所述回收管理区域中查找记录位,查找的记录位对应的存储长度与所述数据的数据长度相匹配;基于查找到的记录位记录的闲置内存区段,确定第一闲置内存区段。
在一个实施例中,所述查找模块还用于对所述数据的数据长度进行预设哈希处理,获得所述数据长度的数据长度哈希值;从所述回收管理区域中,查找对应有容量哈希值的记录位,所述容量哈希值等于所述数据长度哈希值,所述容量哈希值,是对查找的记录位所对应存储长度进行所述预设哈希处理获得的。
在一个实施例中,所述装置还包括:
探测模块,用于当查找到的记录位未记录任一闲置内存区段,则在所述已分配内存区域内,探测哈希值大于所述数据长度的第二闲置内存区段;从探测到的第二闲置内存区段中,确定可容纳所述数据的空闲内存区段。
在一个实施例中,所述探测模块还用于基于所述数据长度哈希值,按照预设递变方式,确定每次探测的探测哈希值;从所述回收管理区域中,寻找与所述探测哈希值对应的记录位;基于寻找到的记录位,探测哈希值大于所述数据长度的第二闲置内存区段。
在一个实施例中,所述探测模块还用于当探测的总次数达到预设探测次数,且未探测到任一所述第二闲置内存区段,则停止探测,判定所述已分配内存区域内不存在可容纳所述数据的空闲内存区段。
在一个实施例中,所述探测模块还用于当查找到多个第二闲置内存区段,在所述已分配内存区域所述待回收内存区段后的范围内,选择一个已占用内存区段;所述已占用内存区段存储有数据;确定所述一个已占用内存区段和所述待回收内存区段的总存储长度;从所述多个第二闲置内存区段中,筛选存储长度不低于所述总存储长度的第二闲置内存区段;基于筛选出的第二闲置内存区段,确定可容纳所述数据的空闲内存区段。
在一个实施例中,选择的所述一个已占用内存区段,是在所述已分配内存区域所述待回收内存区段后的范围内,存储长度最小的已占用内存区段。
在一个实施例中,所述探测模块还用于从筛选出的第二闲置内存区段中,选择存储长度最小的第二闲置内存区段,确定为可容纳所述数据的空闲内存区段。
在一个实施例中,迁移至所述空闲内存区段的数据,占用所述空闲内存区段的部分内存区段;所述装置还包括:
区域更新模块,用于确定所述空闲内存区段的剩余空闲内存区段,所述剩余空闲内存区段和所述部分内存区段的存储长度和,等于所述空闲内存区段的存储长度;在所述回收管理区域中,确定与所述剩余空闲内存区段的存储长度对应的记录位,在确定的记录位中记录所述剩余空闲内存区段;在所述回收管理区域中,定位存储长度与所述数据长度相匹配的记录位,在定位到的记录位中删除记录的所述空闲内存区段。
在一个实施例中,当所述查找到的记录位指向双向链表,所述双向链表包括至少一个节点,每个节点指向一个第一闲置内存区段;所述可容纳所述数据的空闲内存区段,是所述双向链表中头部节点所指向的第一闲置内存区段;所迁移模块还用于在将所述数据迁移至所述空闲内存区段后,将所述双向链表中的所述头部节点删除。
在一个实施例中,所述确定模块还用于当所述待回收内存区段内存储有数据,且所述已分配内存区域内不存在可容纳所述数据的空闲内存区段,则确定所述头标记所处的第一位置;从所述第一位置起,沿所述预设方向,将所述头标记移动所述数据长度到第二位置;将所述第一位置和所述第二位置之间的内存区段,确定为可容纳所述数据的空闲内存区段。
在一个实施例中,当所述待回收内存区段内未存储有数据,则通知所述迁移模块执行所述确定与所述待回收内存区段沿所述预设方向相邻的下一内存区段,并将所述尾标记指向所述下一内存区段的起始位置的步骤。
在一个实施例中,所述装置还包括:
数据更新模块,用于获取目标数据类型的历史数据,以及获取所述目标数据类型的更新数据;基于所述历史数据的数据长度,定位所述闭环内存区域内与所述目标数据类型对应的已占用内存区段,定位到的已占用内存区段的存储长度与所述历史数据的数据长度相匹配;当所述更新数据与所述历史数据各自数据长度一致,则在定位到的已占用内存区段,将所述历史数据替换为所述更新数据。
在一个实施例中,所述数据更新模块还用于当所述更新数据与所述历史数据各自数据长度不一致,则将定位到的已占用内存区段标记为闲置内存区段;按照所述更新数据的数据长度,将所述头标记沿所述预设方向移动,获得与所述目标数据类型对应的新增内存区段,所述新增内存区段的存储长度与所述更新数据的数据长度一致;将所述更新数据写入至所述新增内存区段。
第三方面,本申请提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现本申请各方法实施例中的步骤。
第四方面,本申请提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现本申请各方法实施例中的步骤。
第五方面,本申请提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现本申请各方法实施例中的步骤。
上述内存回收方法、装置、设备、介质和计算机程序产品,通过设计闭环内存区域,并响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域。在已分配内存区域内,确定待回收内存区段;尾标记指向待回收内存区段的起始位置。当待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段,将数据迁移至空闲内存区段。确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。相较于传统的针对页内存中内存碎片的回收方式,本申请通过设计闭环内存区域,并从已分配内存区域中确定记指向的待回收内存区段,在待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段的情况下,将待回收内存区段中存储的数据迁移至空闲内存区段,并将迁移数据后空闲的待回收内存区段回收至未分配内存区域,可以在减少已分配内存区域内空闲内存区段数量的同时,直接得到整块连续的待分配的内存,从而可以提升内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
附图说明
图1为一个实施例中内存回收方法的应用环境图;
图2为一个实施例中内存回收方法的流程示意图;
图3为一个实施例中在待回收内存区段存储有数据时,内存回收的原理示意图;
图4为一个实施例中在待回收内存区段被回收后,尾标记的移动示意图;
图5为一个实施例中在待回收内存区段未存储有数据时,内存回收的原理示意图;
图6为另一个实施例中内存回收方法的流程示意图;
图7为一个实施例中满足原地更新条件时,数据原地更新的原理示意图;
图8为一个实施例中不满足原地更新条件时,数据更新的原理示意图;
图9为另一个实施例中满足原地更新条件时,数据原地更新的原理示意图;
图10为另一个实施例中不满足原地更新条件时,数据更新的原理示意图;
图11为又一个实施例中内存回收方法的流程示意图;
图12为一个实施例中内存回收装置的结构框图;
图13为另一个实施例中内存回收装置的结构框图;
图14为一个实施例中计算机设备的内部结构图;
图15为另一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的内存回收方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以单独设置,可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他服务器上。其中,终端102可以但不限于是各种台式计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器104可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、云安全、主机安全等网络安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端102以及服务器104可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
服务器104可响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域。服务器104可在已分配内存区域内,确定待回收内存区段;尾标记指向待回收内存区段的起始位置。当待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段,服务器104将数据迁移至空闲内存区段,并确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。
可以理解,服务器104可自行触发生成内存回收事件,并响应于内存回收事件进行内存回收处理。还可以理解,终端102可触发生成内存回收指令,并将内存回收指令发送至服务器104中,服务器104可基于内存回收指令生成内存回收事件,并响应于内存回收事件进行内存回收处理。本实施例对此不做限定,可以理解,图1中的应用场景仅为示意说明,并不限定于此。
在一个实施例中,如图2所示,提供了一种内存回收方法,该方法可应用于计算机设备,计算机设备可以是终端或服务器,由终端或服务器自身单独执行,也可以通过终端和服务器之间的交互来实现。本实施例以该方法应用于计算机设备为例进行说明,包括以下步骤:
步骤202,响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域。
其中,事件是指在特定条件或者特定时间发生的动作或者消息,事件通常用来触发程序中相应的处理逻辑。内存回收事件是用于触发进行内存回收处理的事件。闭环内存区域是一个连续的逻辑环形内存区域,闭环内存区域内包括至少一个内存区段。可以理解,在闭环内存区域内包括多个内存区段的情况下,闭环内存区域内第一个内存区段与最后一个内存区段是相邻的。头标记和尾标记是用于将闭环内存区域划分为已分配内存区域和未分配内存区域的指针。可以理解,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域。已分配内存区域,是闭环内存区域内已经分配出去的内存区域,可以理解,已分配内存区域是可支持访问的内存区域。已分配内存区域内包括至少一个内存区段。未分配内存区域,是闭环内存区域内暂未分配出去的内存区域,可以理解,未分配内存区域是不支持访问的内存区域。
具体地,计算机设备可响应于内存回收事件,确定闭环内存区域的头标记和尾标记。可以理解,闭环内存区域被头标记和尾标记划分为已分配内存区域和未分配内存区域。在闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域。
在一个实施例中,预设方向可以是闭环内存区域的顺时针方向。可以理解,在闭环内存区域内,从尾标记沿闭环内存区域的顺时针方向到头标记的区域是已分配内存区域,从头标记沿闭环内存区域的顺时针方向到尾标记的区域是未分配内存区域。
在一个实施例中,预设方向可以是闭环内存区域的逆时针方向。可以理解,在闭环内存区域内,从尾标记沿闭环内存区域的逆时针方向到头标记的区域是已分配内存区域,从头标记沿闭环内存区域的逆时针方向到尾标记的区域是未分配内存区域。
在一个实施例中,内存回收事件,具体可以是定时器的累计时长达到预设时长时触发的。其中,定时器由计算机设备维护。
步骤204,在已分配内存区域内,确定待回收内存区段;尾标记指向待回收内存区段的起始位置。
其中,待回收内存区段,是已分配内存区域内的、且待回收至未分配内存区域中的内存区段。可以理解,待回收内存区段是闭环内存区域内已分配出去的内存区段,即使待回收内存区段中未存储有数据,在未将待回收内存区段回收至未分配内存区域内之前,该待回收内存区段也不可直接再分配出去,而是要在将待回收内存区段回收至未分配内存区域内之后,才可对待回收内存区段进行再分配。若待回收内存区段中存储有数据,则需要将待回收内存区段中存储的数据进行迁移,并将迁移数据后的待回收内存区段回收至未分配内存区域内。
具体地,内存区段包括起始位置和终止位置,计算机设备可将已分配内存区域内尾标记所指向的内存区段,确定为待回收内存区段。其中,尾标记指向待回收内存区段的起始位置。
在一个实施例中,如图3所示,预设方向是闭环内存区域的逆时针方向。在闭环内存区域内,从尾标记沿闭环内存区域的逆时针方向到头标记的区域是已分配内存区域,从头标记沿闭环内存区域的逆时针方向到尾标记的区域是未分配内存区域。计算机设备可将已分配内存区域内尾标记所指向的内存区段304,确定为待回收内存区段。其中,尾标记指向待回收内存区段的起始位置。
步骤206,当待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段,将数据迁移至空闲内存区段。
其中,空闲内存区段,是从已分配内存区域内的闲置内存区段中确定得到的内存区段。闲置内存区段是已分配内存区域内未存储有数据的内存区段。可以理解,针对已分配内存区域中的每个内存区段,在将针对的内存区段中的数据删除之后,这个未存储有数据的内存区段即为闲置内存区段。
具体地,计算机设备可对待回收内存区段进行存储状态检测,可以理解,对待回收内存区段进行存储状态检测得到的检测结果,可以包括待回收内存区段内存储有数据,以及待回收内存区段内未存储有数据。计算机设备可从已分配内存区域内的至少一个闲置内存区段中,查找可容纳数据的空闲内存区段。当待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段,将数据迁移至空闲内存区段。
步骤208,确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。
具体地,将数据迁移至空闲内存区段后,则待回收内存区段内就没有数据了,此时,计算机设备可在未分配内存区域内,确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置,以直接将待回收内存区段回收至未分配内存区域内。可以理解,在闭环内存区域内,从移动后的尾标记沿预设方向到头标记的区域是新的已分配内存区域,从头标记沿预设方向到移动后的尾标记的区域是新的未分配内存区域。可以理解,新的未分配内存区域的存储长度大于内存回收前的未分配内存区域的存储长度。
在一个实施例中,计算机设备可以多轮次迭代的方式进行内存回收。具体地,计算机设备可响应于内存回收事件,确定闭环内存区域的头标记和尾标记。闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域。在已分配内存区域内,计算机设备可确定本轮的待回收内存区段;尾标记指向待回收内存区段的起始位置。当本轮的待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段,计算机设备可将数据迁移至空闲内存区段,确定与本轮的待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。计算机设备可将下一轮作为本轮,并返回执行在已分配内存区域内,确定本轮的待回收内存区段的步骤以迭代进行内存回收。
在一个实施例中,继续参见图3,已分配内存区域内可包括闲置内存区段301、302和303。若计算机设备已将闲置内存区段303确定为空闲内存区段,进而,计算机设备可将数据迁移至闲置内存区段303,得到图4中存储有数据的内存区段403。继续参见图4,在将待回收内存区段中的数据迁移至空闲内存区段之后,可以得到未存储有数据的待回收内存区段404。进而,计算机设备可确定与待回收内存区段404沿预设方向相邻的下一内存区段405,并将尾标记指向下一内存区段405的起始位置,此时,待回收内存区段404已被回收至未分配内存区域中。可以理解,在将数据迁移至空闲内存区段之后,已分配内存区域内还包括闲置内存区段401和402。
上述内存回收方法中,通过设计闭环内存区域,并响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域。在已分配内存区域内,确定待回收内存区段;尾标记指向待回收内存区段的起始位置。当待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段,将数据迁移至空闲内存区段。确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。相较于传统的针对页内存中内存碎片的回收方式,本申请通过设计闭环内存区域,并从已分配内存区域中确定记指向的待回收内存区段,在待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段的情况下,将待回收内存区段中存储的数据迁移至空闲内存区段,并将迁移数据后空闲的待回收内存区段回收至未分配内存区域,可以在减少已分配内存区域内空闲内存区段数量的同时,直接得到整块连续的待分配的内存,从而可以提升内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,方法还包括:从已分配内存区域内的至少一个闲置内存区段中,查找第一闲置内存区段,第一闲置内存区段的存储长度等于数据的数据长度;当查找到至少一个第一闲置内存区段,从至少一个第一闲置内存区段中,确定可容纳数据的空闲内存区段。
其中,第一闲置内存区段,是已分配内存区域内存储长度等于数据长度的闲置内存区段。
具体地,已分配内存区域内包括至少一个闲置内存区段,计算机设备可将已分配内存区域内所包括的至少一个闲置内存区段中,存储长度等于数据长度的闲置内存区段,确定为第一闲置内存区段。当从已分配内存区域内所包括的至少一个闲置内存区段中,查找到至少一个第一闲置内存区段,则从查找到的至少一个第一闲置内存区段中,确定一个第一闲置内存区段作为可容纳数据的空闲内存区段。
在一个实施例中,已分配内存区域内可所包括至少一个闲置内存区段,计算机设备可逐一确定已分配内存区域内的各闲置内存区段的存储长度,并将已分配内存区域内存储长度等于数据长度的至少一个闲置内存区段,确定为第一闲置内存区段。
上述实施例中,通过从已分配内存区域内的至少一个闲置内存区段中,查找存储长度等于数据长度的第一闲置内存区段,当查找到至少一个第一闲置内存区段,从至少一个第一闲置内存区段中,确定可容纳数据的空闲内存区段,通过将数据直接迁移至存储长度与数据长度相等的空闲内存区段,可以刚好将空闲内存区段填满数据,而不会在将数据填入之后产生剩余空闲内存区段,可以进一步提升内存回收效率,从而进一步避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,从已分配内存区域内的至少一个闲置内存区段中,查找第一闲置内存区段,包括:确定闭环内存区域关联的回收管理区域;回收管理区域包括多个记录位,不同记录位对应不同的存储长度,记录位用于记录对应存储长度的闲置内存区段;从回收管理区域中查找记录位,查找的记录位对应的存储长度与数据的数据长度相匹配;基于查找到的记录位记录的闲置内存区段,确定第一闲置内存区段。
其中,回收管理区域,是用于管理已分配内存区域中闲置内存区段的内存区域。可以理解,回收管理区域中包括多个记录位,不同记录位对应不同的存储长度,记录位用于记录对应存储长度的闲置内存区段。可以理解,每个记录位中记录存储长度相等的闲置内存区段,任意两记录位中记录的闲置内存区段的存储长度不相等。
具体地,内存引擎中维护闭环内存区域,以及与闭环内存区域具有关联关系的回收管理区域。计算机设备可确定闭环内存区域关联的回收管理区域,并从回收管理区域中查找记录位,其中,查找的记录位对应的存储长度与数据的数据长度相等。进而,计算机设备可将查找到的记录位记录的闲置内存区段,确定为第一闲置内存区段。
在一个实施例中,计算机设备可逐一遍历回收管理区域包括的各记录位,以从回收管理区域中查找到对应的存储长度与数据长度相等的记录位。可以理解,查找到的记录位中记录的闲置内存区段的内存长度与数据长度相等。
在一个实施例中,本申请中的内存回收事件,具体还可以是回收管理区域中记录的闲置内存区段的总存储长度达到预设上限存储长度时触发的。
在一个实施例中,若计算机设备是以多轮次迭代的方式进行内存回收的,则内存回收迭代停止条件,具体可以是回收管理区域中记录的闲置内存区段的总存储长度小于预设下限存储长度。
上述实施例中,通过从回收管理区域中查找记录的闲置内存区段的存储长度与数据长度相匹配的记录位,并基于查找到的记录位记录的闲置内存区段,确定第一闲置内存区段,可以快速查找到第一闲置内存区段,进一步提升了内存回收效率,从而进一步避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,从回收管理区域中查找记录位,包括:对数据的数据长度进行预设哈希处理,获得数据长度的数据长度哈希值;从回收管理区域中,查找对应有容量哈希值的记录位,容量哈希值等于数据长度哈希值,容量哈希值,是对查找的记录位所对应存储长度进行预设哈希处理获得的。
其中,数据长度哈希值,是对数据的数据长度进行预设哈希处理得到的哈希值。容量哈希值,是对回收管理区域中记录位所对应存储长度进行预设哈希处理得到的哈希值。可以理解,回收管理区域中的各记录位分别拥有各自的容量哈希值,任意两记录位各自对应的容量哈希值不相等。
具体地,计算机设备可对数据的数据长度进行预设哈希处理,得到数据长度的数据长度哈希值。进而,计算机设备可从回收管理区域中,查找等于数据长度哈希值的容量哈希值所对应的记录位。
在一个实施例中,预设哈希处理可以是通过公式bucket_id1 = Hash(sizeof(KV))对数据的数据长度进行哈希处理。具体地,计算机设备可通过公式bucket_id1 =Hash(sizeof(KV)),对数据的数据长度进行哈希处理,得到数据长度的数据长度哈希值。其中,KV表示待回收内存区段中存储的数据,sizeof(KV)表示数据的数据长度,Hash()表示哈希函数,bucket_id1表示数据长度哈希值。
上述实施例中,通过对数据的数据长度进行预设哈希处理,可以获得唯一标识数据长度的数据长度哈希值,从回收管理区域中,查找对应有等于数据长度哈希值的容量哈希值的记录位,可以快速且准确地查找到记录对应存储长度的闲置内存区段的记录位,进一步提升了内存回收效率,从而进一步避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,方法还包括:当查找到的记录位未记录任一闲置内存区段,则在已分配内存区域内,探测哈希值大于数据长度的第二闲置内存区段;从探测到的第二闲置内存区段中,确定可容纳数据的空闲内存区段。
其中,第二闲置内存区段,是已分配内存区域内存储长度大于数据长度的闲置内存区段。
具体地,查找到的记录位未记录任一闲置内存区段,则说明不存在存储长度与数据长度相等的闲置内存区段。计算机设备可在确定查找到的记录位未记录任一闲置内存区段之后,在已分配内存区域内,探测哈希值大于数据长度的第二闲置内存区段。进而,计算机设备可从探测到的至少一个第二闲置内存区段中,确定出一个第二闲置内存区段作为可容纳数据的空闲内存区段。
在一个实施例中,计算机设备可逐一遍历回收管理区域包括的各记录位,以从回收管理区域中探测到对应的存储长度大于数据长度的记录位。可以理解,探测到的记录位中记录的闲置内存区段的内存长度大于数据长度。
在一个实施例中,当查找到一个第二闲置内存区段,计算机设备可直接将查找到的第二闲置内存区段,作为可容纳数据的空闲内存区段。
在一个实施例中,当查找到多个第二闲置内存区段,计算机设备可从查找到的多个第二闲置内存区段中,随机选择出一个第二闲置内存区段,作为可容纳数据的空闲内存区段。
上述实施例中,查找到的记录位未记录任一闲置内存区段,说明不存在存储长度与数据长度相等的闲置内存区段。通过在已分配内存区域内,探测哈希值大于数据长度的第二闲置内存区段,并从探测到的第二闲置内存区段中,确定可容纳数据的空闲内存区段,并将数据迁移至该空闲内存区段,以对待回收内存区段进行回收,可以进一步提升内存回收效率,从而进一步避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,探测哈希值大于数据长度的第二闲置内存区段,包括:基于数据长度哈希值,按照预设递变方式,确定每次探测的探测哈希值;从回收管理区域中,寻找与探测哈希值对应的记录位;基于寻找到的记录位,探测哈希值大于数据长度的第二闲置内存区段。
其中,探测哈希值,是基于数据长度哈希值,按照预设递变方式所确定计算得到的哈希值。
具体地,计算机设备可基于数据长度哈希值,按照预设递变方式,分别计算每次探测的探测哈希值。进而,计算机设备可从回收管理区域中,寻找与各探测哈希值分别对应的记录位,并从寻找到的各记录位中记录的闲置内存区段中,探测哈希值大于数据长度的第二闲置内存区段。
在一个实施例中,预设递变方式可以是bucket_id = i ×Hash(sizeof(KV))。具体地,计算机设备可按照bucket_id2 = i ×Hash(sizeof(KV)),确定每次探测的探测哈希值。其中,i表示每次探测的探测参数,bucket_id2表示每次探测的探测哈希值。
上述实施例中,通过基于数据长度哈希值,按照预设递变方式,确定每次探测的探测哈希值,并从回收管理区域中,寻找与探测哈希值对应的记录位,可以快速且准确地查找到记录对应探测哈希值的闲置内存区段的记录位。从而通过基于寻找到的记录位,探测哈希值大于数据长度的第二闲置内存区段,可以提升第二闲置内存区段的查找效率,从而进一步提升了内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,方法还包括:当探测的总次数达到预设探测次数,且未探测到任一第二闲置内存区段,则停止探测,判定已分配内存区域内不存在可容纳数据的空闲内存区段。
具体地,计算机设备可确定预设探测次数,且在回收管理区域中完成预设探测次数的探测。当探测的总次数达到预设探测次数,且未探测到任一第二闲置内存区段,则计算机设备可停止探测,并判定已分配内存区域内不存在可容纳数据的空闲内存区段。
上述实施例中,当探测的总次数达到预设探测次数,且未探测到任一第二闲置内存区段,则停止探测,判定已分配内存区域内不存在可容纳数据的空闲内存区段,可以避免探测花费较多时间,从而进一步提升了内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,从探测到的第二闲置内存区段中,确定可容纳数据的空闲内存区段,包括:当查找到多个第二闲置内存区段,在已分配内存区域待回收内存区段后的范围内,选择一个已占用内存区段;已占用内存区段存储有数据;确定一个已占用内存区段和待回收内存区段的总存储长度;从多个第二闲置内存区段中,筛选存储长度不低于总存储长度的第二闲置内存区段;基于筛选出的第二闲置内存区段,确定可容纳数据的空闲内存区段。
其中,已占用内存区段,是在已分配内存区域的待回收内存区段后范围内的、且存储有数据的内存区段。总存储长度,是一个已占用内存区段的存储长度与待回收内存区段的存储长度之和。
具体地,当查找到的第二闲置内存区段的数量为多个,则计算机设备可在已分配内存区域的待回收内存区段后的范围内,选择一个已占用内存区段。进而,计算机设备可将选择的已占用内存区段的存储长度与待回收内存区段的存储长度相加,得到总存储长度。进而计算机设备可从查找到的多个第二闲置内存区段中,筛选存储长度不低于总存储长度的第二闲置内存区段,并从筛选出的第二闲置内存区段中,选择一个第二闲置内存区段,作为可容纳数据的空闲内存区段。
在一个实施例中,当查找到的第二闲置内存区段的数量为多个,则计算机设备可在已分配内存区域的待回收内存区段后的范围内,随机选择一个已占用内存区段。
在一个实施例中,计算机设备可从筛选出的第二闲置内存区段中,随机选择一个第二闲置内存区段,作为可容纳数据的空闲内存区段。
上述实施例中,当查找到多个第二闲置内存区段,通过在已分配内存区域待回收内存区段后的范围内,选择一个存储有数据的已占用内存区段,并确定该已占用内存区段和待回收内存区段的总存储长度。进而,通过从多个第二闲置内存区段中,筛选存储长度不低于总存储长度的第二闲置内存区段,并基于筛选出的第二闲置内存区段,确定可容纳数据的空闲内存区段。这样,在将数据迁移至空闲内存区段之后,剩余空闲内存区段在后续内存回收过程中还可再容纳下相应已占用内存区段的数据,从而进一步提升了内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,选择的一个已占用内存区段,是在已分配内存区域待回收内存区段后的范围内,存储长度最小的已占用内存区段。
具体地,当查找到的第二闲置内存区段的数量为多个,且第二闲置内存区段的存储长度可能不同,计算机设备可在已分配内存区域的待回收内存区段后的范围内,选择一个存储长度最小的已占用内存区段。
上述实施例中,通过在已分配内存区域待回收内存区段后的范围内,选择存储长度最小的已占用内存区段,可以在将数据迁移至空闲内存区段之后,剩余空闲内存区段在后续内存回收过程中还可再容纳下所有已占用内存区段的数据,从而进一步提升了内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,基于筛选出的第二闲置内存区段,确定可容纳数据的空闲内存区段,包括:从筛选出的第二闲置内存区段中,选择存储长度最小的第二闲置内存区段,确定为可容纳数据的空闲内存区段。
具体地,计算机设备可从筛选出的第二闲置内存区段中,选择一个存储长度最小的第二闲置内存区段,作为可容纳数据的空闲内存区段。
在一个实施例中,筛选出的第二闲置内存区段的数量为多个,计算机设备可将筛选出的多个第二闲置内存区段,组合成一个集合,即{Len0,Len1,…,LenN},其中,N为整数,LenN为第二闲置内存区段。进而,计算机设备可从采用向下贪心算法,匹配一个存储长度最小的第二闲置内存区段,作为可容纳数据的空闲内存区段,即min(Leni,sizeof(KV))。其中,Leni为集合中的各第二闲置内存区段。min()为取最小函数。
上述实施例中,通过从筛选出的第二闲置内存区段中,选择存储长度最小的第二闲置内存区段,确定为可容纳数据的空闲内存区段,可以更合理的利用第二闲置内存区段,避免了在后续内存回收过程中,数据长度较大的数据无法直接迁移至基于闲置内存区段确定的空闲内存区段的情况,进一步提升了内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,迁移至空闲内存区段的数据,占用空闲内存区段的部分内存区段;方法还包括:确定空闲内存区段的剩余空闲内存区段,剩余空闲内存区段和部分内存区段的存储长度和,等于空闲内存区段的存储长度;在回收管理区域中,确定与剩余空闲内存区段的存储长度对应的记录位,在确定的记录位中记录剩余空闲内存区段;在回收管理区域中,定位存储长度与数据长度相匹配的记录位,在定位到的记录位中删除记录的空闲内存区段。
其中,部分内存区段,是空闲内存区段中其中一部分的内存区段。可以理解,部分内存区段的存储长度与数据的数据长度一致。剩余空闲内存区段,是空闲内存区段内除部分内存区段之外剩余的内存区段。剩余空闲内存区段的内存长度与部分内存区段的内存长度之和,等于空闲内存区段的存储长度。
具体地,在空闲内存区段的存储长度大于数据的数据长度的情况下,计算机设备可将待回收内存区段中存储的数据,迁移至空闲内存区段中的部分内存区段。可以理解,在将数据迁移至空闲内存区段中的部分内存区段之后,计算机设备可将空闲内存区段中剩余的未存储数据的内存区段,作为剩余空闲内存区段。进而,计算机设备可在回收管理区域中,确定与剩余空闲内存区段的存储长度对应的记录位,并在确定的记录位中记录剩余空闲内存区段。以及,计算机设备还可在回收管理区域中,定位存储长度与数据长度相匹配的记录位,并在定位到的记录位中删除记录的空闲内存区段,以实现针对回收管理区域中记录位所记录闲置内存区段的及时更新。
上述实施例中,通过在回收管理区域中,确定与剩余空闲内存区段的存储长度对应的记录位,在确定的记录位中记录剩余空闲内存区段,以及在回收管理区域中,定位存储长度与数据长度相匹配的记录位,并在定位到的记录位中删除记录的空闲内存区段。这样,在将数据迁移至部分内存区段之后,通过更新回收管理区域中各记录位所记录的闲置内存区段,可以在后续内存回收过程中,更准确更高效地进行内存回收,从而进一步提升了内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,当查找到的记录位指向双向链表,双向链表包括至少一个节点,每个节点指向一个第一闲置内存区段;可容纳数据的空闲内存区段,是双向链表中头部节点所指向的第一闲置内存区段;方法还包括:在将数据迁移至空闲内存区段后,将双向链表中的头部节点删除。
其中,双向链表是一种数据结构,在双向链表中,每个节点都包含两个指针,一个指向当前节点的前一个节点,另一个指向当前节点的后一个节点。通过这两个指针,双向链表可以在两个方向上遍历和操作数据。头部节点是双向链表中位于首位的节点。
具体地,当从回收管理区域中查找到的记录位指向双向链表,且双向链表中的每个节点用于记录一个第一闲置内存区段。计算机设备可将双向链表中头部节点所指向的第一闲置内存区段,作为容纳数据的空闲内存区段,并将待回收内存区段中存储的数据,迁移至该空闲内存区段中。在将数据迁移至空闲内存区段后,计算机设备可将双向链表中的头部节点删除,并将双向链表中头部节点的下一个节点,作为新的头部节点。
在一个实施例中,继续参见图3,回收管理区域内包括多个记录位,不同记录位对应不同的存储长度。可以理解,305即为回收管理区域中的其中一个记录位。记录位305可用于记录对应存储长度的第一闲置内存区段301和302,可以理解,第一闲置内存区段301和302的存储长度相等。比如,记录位305指向双向链表,双向链表包括至少一个节点,每个节点指向一个第一闲置内存区段,即第一闲置内存区段301和302。
在一个实施例中,继续参见图4,回收管理区域内包括多个记录位,不同记录位对应不同的存储长度。可以理解,406即为回收管理区域中的其中一个记录位。记录位406可用于记录对应存储长度的第一闲置内存区段401和402,可以理解,第一闲置内存区段401和402的存储长度相等。比如,记录位406指向双向链表,双向链表包括至少一个节点,每个节点指向一个第一闲置内存区段,即第一闲置内存区段401和402。
上述实施例中,通过在将数据迁移至空闲内存区段后,将双向链表中的头部节点删除,以更新双向链表,可以在后续内存回收过程中,更准确更高效地进行内存回收,从而进一步提升了内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,方法还包括:当待回收内存区段内存储有数据,且已分配内存区域内不存在可容纳数据的空闲内存区段,则确定头标记所处的第一位置;从第一位置起,沿预设方向,将头标记移动数据长度到第二位置;将第一位置和第二位置之间的内存区段,确定为可容纳数据的空闲内存区段。
其中,第一位置,是头标记移动之前,已分配内存区域内头标记所指向的位置。第二位置,是头标记沿预设方向移动数据长度之后,已分配内存区域内头标记所指向的位置。
具体地,当待回收内存区段内存储有数据,且已分配内存区域内不存在可容纳数据的空闲内存区段,则计算机设备可确定已分配内存区域内头标记所处的第一位置。计算机设备可从第一位置起,沿预设方向,将头标记移动数据长度到第二位置。进而,计算机设备可将第一位置和第二位置之间的内存区段,作为可容纳数据的空闲内存区段,并将待回收内存区段中存储的数据,迁移至该空闲内存区段。进而,计算机设备可确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。
上述实施例中,当待回收内存区段内存储有数据,且已分配内存区域内不存在可容纳数据的空闲内存区段,则通过头标记沿预设方向新增一个的内存区段,以作为容纳数据的空闲内存区段,可以进一步提升内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,方法还包括:当待回收内存区段内未存储有数据,执行确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置的步骤。
具体地,当待回收内存区段内未存储有数据,则表明该待回收内存区段是已分配内存区域内的闲置内存区段,此时,可以直接对待回收内存区段进行回收。即,计算机设备可直接确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置,以将待回收内存区段回收至未分配内存区域中。
在一个实施例中,如图5所示,已分配内存区域内包括闲置内存区段501、502、503和504。其中,闲置内存区段504的起始位置被尾标记所指向,因此,闲置内存区段504被确定为待回收内存区段,此时,待回收内存区段内未存储有数据。计算机设备可确定与待回收内存区段504沿预设方向相邻的下一内存区段505,并将尾标记指向下一内存区段505的起始位置。
上述实施例中,当待回收内存区段内未存储有数据,则直接通过头标记沿预设方向新增一个的内存区段,以作为容纳数据的空闲内存区段,可以进一步提升内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,如图6所示,计算机设备可响应于内存回收事件,确定待回收内存区段内是否存储有数据。当待回收内存区段内存储有数据,确定闭环内存区域内是否存在存储长度与数据长度一致的第一闲置内存区段。当存在至少一个第一闲置内存区段,则从至少一个第一闲置内存区段中,确定出可容纳数据的空闲内存区段,将数据迁移至空闲内存区段,以对待回收内存区段进行回收。当不存在第一闲置内存区段,则探测是否存在存储长度大于数据长度的第二闲置内存区段。当不存在第二闲置内存区段,则移动头标记以产生空闲内容区段,将数据迁移至产生的空闲内存区段,以对待回收内存区段进行回收。当存在至少一个第二闲置内存区段,则判断至少一个第二闲置内存区段中,是否存在存储长度不低于总存储长度的第二闲置内存区段。当不存在存储长度不低于总存储长度的第二闲置内存区段,则移动头标记以产生空闲内容区段,将数据迁移至产生的空闲内存区段,以对待回收内存区段进行回收。当存在存储长度不低于总存储长度的第二闲置内存区段,则从存储长度不低于总存储长度的第二闲置内存区段中选择存储长度最小的第二闲置内存区段,作为可容纳数据的空闲内存区段,将数据迁移至空闲内存区段,以对待回收内存区段进行回收。当待回收内存区段内未存储有数据,则直接移动尾标记以对待回收内存区段进行回收。
在一个实施例中,方法还包括:获取目标数据类型的历史数据,以及获取目标数据类型的更新数据;基于历史数据的数据长度,定位闭环内存区域内与目标数据类型对应的已占用内存区段,定位到的已占用内存区段的存储长度与历史数据的数据长度相匹配;当更新数据与历史数据各自数据长度一致,则在定位到的已占用内存区段,将历史数据替换为更新数据。
其中,数据类型是数据所属的类型。可以理解,闭环内存区域内每个已占用内存区段对应有各自的目标数据类型。历史数据是存储于已占用内存区段中的数据,更新数据是针对历史数据进行更新后得到的数据。
具体地,计算机设备可获取目标数据类型的历史数据,以及获取目标数据类型的更新数据。计算机设备可确定历史数据的数据长度,并基于历史数据的数据长度,定位闭环内存区域内存储长度与历史数据的数据长度相匹配的已占用内存区段。当更新数据与历史数据各自数据长度一致,则计算机设备可在定位到的已占用内存区段,并将历史数据替换为更新数据。
在一个实施例中,计算机设备可确定闭环内存区域关联的数据管理区域。其中,数据管理区域包括多个记录位,不同记录位对应不同的存储长度,记录位用于记录对应存储长度的已占用内存区段。计算机设备可确定历史数据的数据长度,并对历史数据的数据长度进行预设哈希处理,获得历史数据的数据长度的哈希值。进而,计算机设备可从数据管理区域中,查找对应有存储长度哈希值的记录位,并基于查找的记录位,定位存储长度与历史数据的数据长度相等的已占用内存区段。其中,存储长度哈希值等于历史数据的数据长度的哈希值,存储长度哈希值,是对查找的记录位所对应存储长度进行预设哈希处理获得的。
上述实施例中,通过定位闭环内存区域内与目标数据类型对应的、且存储长度与历史数据的数据长度相匹配的已占用内存区段,当更新数据与历史数据各自数据长度一致,则在定位到的已占用内存区段,将历史数据替换为更新数据,以实现数据的原地更新,避免了闲置内存区段的产生,避免了用于支持内存回收功能的计算机硬件资源的浪费。
在一个实施例中,方法还包括:当更新数据与历史数据各自数据长度不一致,则将定位到的已占用内存区段标记为闲置内存区段;按照更新数据的数据长度,将头标记沿预设方向移动,获得与目标数据类型对应的新增内存区段,新增内存区段的存储长度与更新数据的数据长度一致;将更新数据写入至新增内存区段。
具体地,当更新数据与历史数据各自数据长度不一致,则计算机设备可将定位到的已占用内存区段标记为闲置内存区段。可以理解,将定位到的已占用内存区段标记为闲置内存区段的过程中,计算机设备可将已占用内存区段中存储的历史数据删除,得到相应的闲置内存区段。可以理解,闲置内存区段中未存储有历史数据。计算机设备可将头标记沿预设方向移动更新数据的数据长度,以获得与目标数据类型对应的新增内存区段。可以理解,新增内存区段的存储长度与更新数据的数据长度一致。进而,计算机设备可将更新数据写入至新增内存区段。
在一个实施例中,闭环内存区域关联有回收管理区域,回收管理区域包括多个记录位,不同记录位对应不同的存储长度,记录位用于记录对应存储长度的闲置内存区段。当已占用内存区段被标记为闲置内存区段,则计算机设备可确定闲置内存区段的存储长度,并对闲置内存区段的存储长度进行预设哈希处理,得到相应的容量哈希值。计算机设备可根据该容量哈希值从回收管理区域中,查找容量哈希值对应的记录位,并将标记的闲置内存区段记录于查找到的记录位中。
在一个实施例中,计算机设备可确定闭环内存区域内头标记所处的第三位置,并从第三位置起,在闭环内存区域内沿预设方向,将头标记移动更新数据的数据长度到第四位置。进而,计算机设备可将第三位置和第四位置之间的内存区段,确定为新增内存区段。
上述实施例中,当更新数据与历史数据各自数据长度不一致,则通过将定位到的已占用内存区段标记为闲置内存区段,以便后续进行内存回收。进而按照更新数据的数据长度,将头标记沿预设方向移动,以获得存储长度与更新数据的数据长度一致的新增内存区段,并将更新数据写入至新增内存区段,以实现数据的顺利更新。
在一个实施例中,如图7所示,计算机设备可确定闭环内存区域关联的数据管理区域。数据管理区域包括多个记录位,不同记录位对应不同的存储长度,记录位用于记录对应存储长度的已占用内存区段。比如,记录位703,用于记录对应存储长度的已占用内存区段702,记录位704,用于记录对应存储长度的已占用内存区段701。可以理解,已占用内存区段701对应的历史数据与更新数据的数据长度一致,因此,更新数据可直接存储于已占用内存区段701中,实现原地更新。同理,已占用内存区段702对应的历史数据与更新数据的数据长度一致,因此,更新数据可直接存储于已占用内存区段702中,实现原地更新。
在一个实施例中,如图8所示,已占用内存区段801a对应的历史数据与更新数据的数据长度不一致,因此,更新数据可存储于新增内存区段801b中,已占用内存区段801a会被标记为闲置内存区段。同理,已占用内存区段802a对应的历史数据与更新数据的数据长度不一致,因此,更新数据可存储于新增内存区段802b中,已占用内存区段802a会被标记为闲置内存区段。可以理解,记录位803,用于记录对应存储长度的已占用内存区段802b,记录位804,用于记录对应存储长度的已占用内存区段801b。
在一个实施例中,如图9所示,计算机设备可确定闭环内存区域关联的数据管理区域。数据管理区域包括多个记录位,不同记录位对应不同的存储长度,记录位用于记录对应存储长度的已占用内存区段。比如,记录位901,用于记录对应存储长度的已占用内存区段903。记录位902,用于记录对应存储长度的已占用内存区段904和905。其中,已占用内存区段904和905通过双向链表记录在记录位902中。可以理解,已占用内存区段903对应的历史数据与更新数据的数据长度一致,因此,更新数据可直接存储于已占用内存区段903中,实现原地更新。同理,已占用内存区段904对应的历史数据与更新数据的数据长度一致,因此,更新数据可直接存储于已占用内存区段904中,实现原地更新。
在一个实施例中,如图10所示,已占用内存区段1003a对应的历史数据与更新数据的数据长度不一致,因此,更新数据可存储于新增内存区段1003b中,已占用内存区段1003a会被标记为闲置内存区段。同理,已占用内存区段1004a对应的历史数据与更新数据的数据长度不一致,因此,更新数据可存储于新增内存区段1004b中,已占用内存区段1004a会被标记为闲置内存区段。可以理解,记录位1001,用于记录对应存储长度的已占用内存区段1003b,记录位1002,用于记录对应存储长度的已占用内存区段1004b和1005。其中,已占用内存区段1004b和1005通过双向链表记录在记录位1002中。
在一个实施例中,当已占用内存区段被锁定为只读模式,不管历史数据和更新数据的长度是否一致,都无法进行原地更新,则计算机设备可将定位到的已占用内存区段标记为闲置内存区段,按照更新数据的数据长度,将头标记沿预设方向移动,获得与目标数据类型对应的新增内存区段。其中,新增内存区段的存储长度与更新数据的数据长度一致。进而,计算机设备可将更新数据写入至新增内存区段。可以理解,只读模式,具体可以是对已占用内存区段中存储的历史数据进行快照处理。
如图11所示,在一个实施例中,提供了一种内存回收方法,该方法可应用于计算机设备,计算机设备可以是终端或服务器,由终端或服务器自身单独执行,也可以通过终端和服务器之间的交互来实现。本实施例以该方法应用于计算机设备为例进行说明,该方法具体包括以下步骤:
步骤1102,获取目标数据类型的历史数据,以及获取目标数据类型的更新数据;基于历史数据的数据长度,定位闭环内存区域内与目标数据类型对应的已占用内存区段。
其中,定位到的已占用内存区段的存储长度与历史数据的数据长度相匹配。
步骤1104,当更新数据与历史数据各自数据长度一致,则在定位到的已占用内存区段,将历史数据替换为更新数据。
步骤1106,当更新数据与历史数据各自数据长度不一致,则将定位到的已占用内存区段标记为闲置内存区段。
步骤1108,按照更新数据的数据长度,将闭环内存区域的头标记沿预设方向移动,获得与目标数据类型对应的新增内存区段。
其中,新增内存区段的存储长度与更新数据的数据长度一致,并将更新数据写入至新增内存区段。
步骤1110,响应于内存回收事件,确定闭环内存区域的头标记和尾标记,在已分配内存区域内,确定待回收内存区段。
其中,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域;尾标记指向待回收内存区段的起始位置。
步骤1112,当待回收内存区段内存储有数据,确定闭环内存区域关联的回收管理区域,对数据的数据长度进行预设哈希处理,获得数据长度的数据长度哈希值。
其中,回收管理区域包括多个记录位,不同记录位对应不同的存储长度,记录位用于记录对应存储长度的闲置内存区段。
步骤1114,从回收管理区域中,查找对应有容量哈希值的记录位,基于查找到的记录位记录的闲置内存区段,确定第一闲置内存区段。
其中,容量哈希值等于数据长度哈希值,容量哈希值,是对查找的记录位所对应存储长度进行预设哈希处理获得的,查找的记录位对应的存储长度与数据的数据长度相匹配;第一闲置内存区段的存储长度等于数据的数据长度。
步骤1116,当查找到的记录位指向包括至少一个节点的双向链表,将双向链表中头部节点所指向的第一闲置内存区段,确定为可容纳数据的空闲内存区段,将数据迁移至空闲内存区段,在将数据迁移至空闲内存区段后,将双向链表中的头部节点删除。
其中,双向链表中每个节点指向一个第一闲置内存区段。
步骤1118,当查找到的记录位未记录任一闲置内存区段,则在已分配内存区域内,基于数据长度哈希值,按照预设递变方式,确定每次探测的探测哈希值,从回收管理区域中,寻找与探测哈希值对应的记录位。
步骤1120,当探测的总次数达到预设探测次数,且基于寻找到的记录位,探测到存储长度大于数据长度的多个第二闲置内存区段,则在已分配内存区域待回收内存区段后的范围内,选择存储长度最小的、且存储有数据的一个已占用内存区段。
步骤1122,确定一个已占用内存区段和待回收内存区段的总存储长度;从多个第二闲置内存区段中,筛选存储长度不低于总存储长度的第二闲置内存区段。
步骤1124,从筛选出的第二闲置内存区段中,选择存储长度最小的第二闲置内存区段,确定为可容纳数据的空闲内存区段,将数据迁移至空闲内存区段。
步骤1126,当迁移至空闲内存区段的数据,占用空闲内存区段的部分内存区段,则确定空闲内存区段的剩余空闲内存区段。
其中,剩余空闲内存区段和部分内存区段的存储长度和,等于空闲内存区段的存储长度。
步骤1128,在回收管理区域中,确定与剩余空闲内存区段的存储长度对应的记录位,在确定的记录位中记录剩余空闲内存区段。
步骤1130,在回收管理区域中,定位存储长度与数据长度相匹配的记录位,在定位到的记录位中删除记录的空闲内存区段。
步骤1132,确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。
步骤1134,当探测的总次数达到预设探测次数,且未探测到任一第二闲置内存区段,则停止探测,判定已分配内存区域内不存在可容纳数据的空闲内存区段。
步骤1136,确定头标记所处的第一位置,从第一位置起,沿预设方向,将头标记移动数据长度到第二位置。
步骤1138,将第一位置和第二位置之间的内存区段,确定为可容纳数据的空闲内存区段,将数据迁移至空闲内存区段。
步骤1140,当待回收内存区段内未存储有数据,确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。
本申请还提供一种应用场景,该应用场景应用上述的内存回收方法。具体地,该内存回收方法可应用于巨型模型训练过程中内存回收的场景。可以理解,本申请中的计算机设备为用于训练巨型模型的服务器,本申请中的闭环内存区域可部署于该服务器中。巨型模型是指模型参数的超过预设参数数量的机器学习模型。本申请中的目标数据类型为模型参数的目标参数类型,数据为模型参数的参数数据。
具体地,服务器可获取巨型模型中目标参数类型的历史参数数据,以及获取目标参数数据类型的更新参数数据;基于历史参数数据的参数数据长度,定位闭环内存区域内与目标参数数据类型对应的已占用内存区段。其中,定位到的已占用内存区段的存储长度与历史参数数据的参数数据长度相匹配。当更新参数数据与历史参数数据各自参数数据长度一致,则在定位到的已占用内存区段,将历史参数数据替换为更新参数数据。当更新参数数据与历史参数数据各自参数数据长度不一致,则将定位到的已占用内存区段标记为闲置内存区段。按照更新参数数据的参数数据长度,将闭环内存区域的头标记沿预设方向移动,获得与目标参数数据类型对应的新增内存区段。其中,新增内存区段的存储长度与更新参数数据的参数数据长度一致,并将更新参数数据写入至新增内存区段。
服务器可响应于内存回收事件,确定闭环内存区域的头标记和尾标记,在已分配内存区域内,确定待回收内存区段。其中,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域;尾标记指向待回收内存区段的起始位置。当待回收内存区段内存储有参数数据,确定闭环内存区域关联的回收管理区域,对参数数据的参数数据长度进行预设哈希处理,获得参数数据长度的参数数据长度哈希值。其中,回收管理区域包括多个记录位,不同记录位对应不同的存储长度,记录位用于记录对应存储长度的闲置内存区段。从回收管理区域中,查找对应有容量哈希值的记录位,基于查找到的记录位记录的闲置内存区段,确定第一闲置内存区段。其中,容量哈希值等于参数数据长度哈希值,容量哈希值,是对查找的记录位所对应存储长度进行预设哈希处理获得的,查找的记录位对应的存储长度与参数数据的参数数据长度相匹配;第一闲置内存区段的存储长度等于参数数据的参数数据长度。当查找到的记录位指向包括至少一个节点的双向链表,将双向链表中头部节点所指向的第一闲置内存区段,确定为可容纳参数数据的空闲内存区段,将参数数据迁移至空闲内存区段,在将参数数据迁移至空闲内存区段后,将双向链表中的头部节点删除。其中,双向链表中每个节点指向一个第一闲置内存区段。
当查找到的记录位未记录任一闲置内存区段,则服务器可在已分配内存区域内,基于参数数据长度哈希值,按照预设递变方式,确定每次探测的探测哈希值,从回收管理区域中,寻找与探测哈希值对应的记录位。当探测的总次数达到预设探测次数,且基于寻找到的记录位,探测到存储长度大于参数数据长度的多个第二闲置内存区段,则在已分配内存区域待回收内存区段后的范围内,选择存储长度最小的、且存储有参数数据的一个已占用内存区段。确定一个已占用内存区段和待回收内存区段的总存储长度;从多个第二闲置内存区段中,筛选存储长度不低于总存储长度的第二闲置内存区段。从筛选出的第二闲置内存区段中,选择存储长度最小的第二闲置内存区段,确定为可容纳参数数据的空闲内存区段,将参数数据迁移至空闲内存区段。当迁移至空闲内存区段的参数数据,占用空闲内存区段的部分内存区段,则确定空闲内存区段的剩余空闲内存区段。其中,剩余空闲内存区段和部分内存区段的存储长度和,等于空闲内存区段的存储长度。在回收管理区域中,确定与剩余空闲内存区段的存储长度对应的记录位,在确定的记录位中记录剩余空闲内存区段。在回收管理区域中,定位存储长度与参数数据长度相匹配的记录位,在定位到的记录位中删除记录的空闲内存区段。确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。
当探测的总次数达到预设探测次数,且未探测到任一第二闲置内存区段,则停止探测,服务器可判定已分配内存区域内不存在可容纳参数数据的空闲内存区段。确定头标记所处的第一位置,从第一位置起,沿预设方向,将头标记移动参数数据长度到第二位置,将第一位置和第二位置之间的内存区段,确定为可容纳参数数据的空闲内存区段,将参数数据迁移至空闲内存区段。
当待回收内存区段内未存储有参数数据,服务器可确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。
可以理解,巨型模型在训练过程中,会不断更新模型参数的参数数据,采用本申请的内存回收方法,通过设计闭环内存区域,并从已分配内存区域中确定记指向的待回收内存区段,在待回收内存区段内存储有参数数据,且已分配内存区域内存在可容纳参数数据的空闲内存区段的情况下,将待回收内存区段中存储的参数数据迁移至空闲内存区段,并将迁移参数数据后空闲的待回收内存区段回收至未分配内存区域,可以在减少已分配内存区域内空闲内存区段数量的同时,直接得到整块连续的待分配的内存,从而可以提升用于存储参数数据的内存的回收效率,此外,也可以提升巨型模型的训练效率,从而避免了用于支持模型训练的计算机硬件资源的浪费。
还可以理解,通过本申请中的闭环内存区域存储和管理巨型模型训练过程中的参数数据,参数数据的参数数据长度大部分情况下不会发生变化,可以实现参数数据的原地更新,从而进一步避免了用于支持模型训练的计算机硬件资源的浪费。
本申请还另外提供一种应用场景,该应用场景应用上述的内存回收方法。具体地,该内存回收方法可应用于针对存储对象属性数据的内存的回收场景。可以理解,本申请中的目标数据类型为对象属性的目标属性类型,数据为对象属性的属性数据。采用本申请的内存回收方法,通过设计闭环内存区域,并从已分配内存区域中确定记指向的待回收内存区段,在待回收内存区段内存储有参数属性数据,且已分配内存区域内存在可容纳参数属性数据的空闲内存区段的情况下,将待回收内存区段中存储的参数属性数据迁移至空闲内存区段,并将迁移参数属性数据后空闲的待回收内存区段回收至未分配内存区域,可以在减少已分配内存区域内空闲内存区段数量的同时,直接得到整块连续的待分配的内存,从而可以提升用于存储属性数据的内存的回收效率,从而避免了用于支持内存回收功能的计算机硬件资源的浪费。
应该理解的是,虽然上述各实施例的流程图中的各个步骤按照顺序依次显示,但是这些步骤并不是必然按照顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述各实施例中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图12所示,提供了一种内存回收装置1200,该装置具体包括:
确定模块1202,用于响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域;
确定模块1202还用于在已分配内存区域内,确定待回收内存区段;尾标记指向待回收内存区段的起始位置;
迁移模块1204,用于当待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段,将数据迁移至空闲内存区段;
调整模块1206,用于确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。
在一个实施例中,如图13所示,装置还包括:
查找模块1208,用于从已分配内存区域内的至少一个闲置内存区段中,查找第一闲置内存区段,第一闲置内存区段的存储长度等于数据的数据长度;当查找到至少一个第一闲置内存区段,从至少一个第一闲置内存区段中,确定可容纳数据的空闲内存区段。
在一个实施例中,查找模块1208还用于确定闭环内存区域关联的回收管理区域;回收管理区域包括多个记录位,不同记录位对应不同的存储长度,记录位用于记录对应存储长度的闲置内存区段;从回收管理区域中查找记录位,查找的记录位对应的存储长度与数据的数据长度相匹配;基于查找到的记录位记录的闲置内存区段,确定第一闲置内存区段。
在一个实施例中,查找模块1208还用于对数据的数据长度进行预设哈希处理,获得数据长度的数据长度哈希值;从回收管理区域中,查找对应有容量哈希值的记录位,容量哈希值等于数据长度哈希值,容量哈希值,是对查找的记录位所对应存储长度进行预设哈希处理获得的。
在一个实施例中,如图13所示,装置还包括:
探测模块1210,用于当查找到的记录位未记录任一闲置内存区段,则在已分配内存区域内,探测哈希值大于数据长度的第二闲置内存区段;从探测到的第二闲置内存区段中,确定可容纳数据的空闲内存区段。
在一个实施例中,探测模块1210还用于基于数据长度哈希值,按照预设递变方式,确定每次探测的探测哈希值;从回收管理区域中,寻找与探测哈希值对应的记录位;基于寻找到的记录位,探测哈希值大于数据长度的第二闲置内存区段。
在一个实施例中,探测模块1210还用于当探测的总次数达到预设探测次数,且未探测到任一第二闲置内存区段,则停止探测,判定已分配内存区域内不存在可容纳数据的空闲内存区段。
在一个实施例中,探测模块1210还用于当查找到多个第二闲置内存区段,在已分配内存区域待回收内存区段后的范围内,选择一个已占用内存区段;已占用内存区段存储有数据;确定一个已占用内存区段和待回收内存区段的总存储长度;从多个第二闲置内存区段中,筛选存储长度不低于总存储长度的第二闲置内存区段;基于筛选出的第二闲置内存区段,确定可容纳数据的空闲内存区段。
在一个实施例中,选择的一个已占用内存区段,是在已分配内存区域待回收内存区段后的范围内,存储长度最小的已占用内存区段。
在一个实施例中,探测模块1210还用于从筛选出的第二闲置内存区段中,选择存储长度最小的第二闲置内存区段,确定为可容纳数据的空闲内存区段。
在一个实施例中,如图13所示,迁移至空闲内存区段的数据,占用空闲内存区段的部分内存区段;装置还包括:
区域更新模块1212,用于确定空闲内存区段的剩余空闲内存区段,剩余空闲内存区段和部分内存区段的存储长度和,等于空闲内存区段的存储长度;在回收管理区域中,确定与剩余空闲内存区段的存储长度对应的记录位,在确定的记录位中记录剩余空闲内存区段;在回收管理区域中,定位存储长度与数据长度相匹配的记录位,在定位到的记录位中删除记录的空闲内存区段。
在一个实施例中,当查找到的记录位指向双向链表,双向链表包括至少一个节点,每个节点指向一个第一闲置内存区段;可容纳数据的空闲内存区段,是双向链表中头部节点所指向的第一闲置内存区段;所迁移模块1204还用于在将数据迁移至空闲内存区段后,将双向链表中的头部节点删除。
在一个实施例中,确定模块1202还用于当待回收内存区段内存储有数据,且已分配内存区域内不存在可容纳数据的空闲内存区段,则确定头标记所处的第一位置;从第一位置起,沿预设方向,将头标记移动数据长度到第二位置;将第一位置和第二位置之间的内存区段,确定为可容纳数据的空闲内存区段。
在一个实施例中,当待回收内存区段内未存储有数据,则通知迁移模块1204执行确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置的步骤。
在一个实施例中,如图13所示,装置还包括:
数据更新模块1214,用于获取目标数据类型的历史数据,以及获取目标数据类型的更新数据;基于历史数据的数据长度,定位闭环内存区域内与目标数据类型对应的已占用内存区段,定位到的已占用内存区段的存储长度与历史数据的数据长度相匹配;当更新数据与历史数据各自数据长度一致,则在定位到的已占用内存区段,将历史数据替换为更新数据。
在一个实施例中,数据更新模块1214还用于当更新数据与历史数据各自数据长度不一致,则将定位到的已占用内存区段标记为闲置内存区段;按照更新数据的数据长度,将头标记沿预设方向移动,获得与目标数据类型对应的新增内存区段,新增内存区段的存储长度与更新数据的数据长度一致;将更新数据写入至新增内存区段。
上述内存回收装置,通过设计闭环内存区域,并响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,闭环内存区域内,从尾标记沿预设方向到头标记的区域是已分配内存区域,从头标记沿预设方向到尾标记的区域是未分配内存区域。在已分配内存区域内,确定待回收内存区段;尾标记指向待回收内存区段的起始位置。当待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段,将数据迁移至空闲内存区段。确定与待回收内存区段沿预设方向相邻的下一内存区段,并将尾标记指向下一内存区段的起始位置。相较于传统的针对页内存中内存碎片的回收方式,本申请通过设计闭环内存区域,并从已分配内存区域中确定记指向的待回收内存区段,在待回收内存区段内存储有数据,且已分配内存区域内存在可容纳数据的空闲内存区段的情况下,将待回收内存区段中存储的数据迁移至空闲内存区段,并将迁移数据后空闲的待回收内存区段回收至未分配内存区域,可以在减少已分配内存区域内空闲内存区段数量的同时,直接得到整块连续的待分配的内存,从而可以提升内存回收效率,避免了用于支持内存回收功能的计算机硬件资源的浪费。
上述内存回收装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图14所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种内存回收方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图15所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种内存回收方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置,显示屏可以是液晶显示屏或电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图14和图15中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (30)

1.一种内存回收方法,其特征在于,所述方法包括:
响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,所述闭环内存区域内,从所述尾标记沿预设方向到所述头标记的区域是已分配内存区域,从所述头标记沿所述预设方向到所述尾标记的区域是未分配内存区域;
在所述已分配内存区域内,确定待回收内存区段;所述尾标记指向所述待回收内存区段的起始位置;
当所述待回收内存区段内存储有数据,确定所述闭环内存区域关联的回收管理区域;所述回收管理区域包括多个记录位,不同记录位对应不同的存储长度,所述记录位用于记录对应存储长度的闲置内存区段;
从所述回收管理区域中查找记录位,查找的记录位对应的存储长度与所述数据的数据长度相匹配;
基于查找到的记录位记录的闲置内存区段,确定第一闲置内存区段,所述第一闲置内存区段的存储长度等于所述数据的数据长度;
当查找到至少一个第一闲置内存区段,从所述至少一个第一闲置内存区段中,确定可容纳所述数据的空闲内存区段,将所述数据迁移至所述空闲内存区段;
确定与所述待回收内存区段沿所述预设方向相邻的下一内存区段,并将所述尾标记指向所述下一内存区段的起始位置。
2.根据权利要求1所述的方法,其特征在于,所述从所述回收管理区域中查找记录位,包括:
对所述数据的数据长度进行预设哈希处理,获得所述数据长度的数据长度哈希值;
从所述回收管理区域中,查找对应有容量哈希值的记录位,所述容量哈希值等于所述数据长度哈希值,所述容量哈希值,是对查找的记录位所对应存储长度进行所述预设哈希处理获得的。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当查找到的记录位未记录任一闲置内存区段,则在所述已分配内存区域内,探测哈希值大于所述数据长度的第二闲置内存区段;
从探测到的第二闲置内存区段中,确定可容纳所述数据的空闲内存区段。
4.根据权利要求3所述的方法,其特征在于,所述探测哈希值大于所述数据长度的第二闲置内存区段,包括:
基于所述数据长度哈希值,按照预设递变方式,确定每次探测的探测哈希值;
从所述回收管理区域中,寻找与所述探测哈希值对应的记录位;
基于寻找到的记录位,探测哈希值大于所述数据长度的第二闲置内存区段。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当探测的总次数达到预设探测次数,且未探测到任一所述第二闲置内存区段,则停止探测,判定所述已分配内存区域内不存在可容纳所述数据的空闲内存区段。
6.根据权利要求3所述的方法,其特征在于,所述从探测到的第二闲置内存区段中,确定可容纳所述数据的空闲内存区段,包括:
当查找到多个第二闲置内存区段,在所述已分配内存区域所述待回收内存区段后的范围内,选择一个已占用内存区段;所述已占用内存区段存储有数据;
确定所述一个已占用内存区段和所述待回收内存区段的总存储长度;
从所述多个第二闲置内存区段中,筛选存储长度不低于所述总存储长度的第二闲置内存区段;
基于筛选出的第二闲置内存区段,确定可容纳所述数据的空闲内存区段。
7.根据权利要求5所述的方法,其特征在于,选择的所述一个已占用内存区段,是在所述已分配内存区域所述待回收内存区段后的范围内,存储长度最小的已占用内存区段。
8.根据权利要求6所述的方法,其特征在于,所述基于筛选出的第二闲置内存区段,确定可容纳所述数据的空闲内存区段,包括:
从筛选出的第二闲置内存区段中,选择存储长度最小的第二闲置内存区段,确定为可容纳所述数据的空闲内存区段。
9.根据权利要求3所述的方法,其特征在于,迁移至所述空闲内存区段的数据,占用所述空闲内存区段的部分内存区段;所述方法还包括:
确定所述空闲内存区段的剩余空闲内存区段,所述剩余空闲内存区段和所述部分内存区段的存储长度和,等于所述空闲内存区段的存储长度;
在所述回收管理区域中,确定与所述剩余空闲内存区段的存储长度对应的记录位,在确定的记录位中记录所述剩余空闲内存区段;
在所述回收管理区域中,定位存储长度与所述数据长度相匹配的记录位,在定位到的记录位中删除记录的所述空闲内存区段。
10.根据权利要求1至9任一项所述的方法,其特征在于,当所述查找到的记录位指向双向链表,所述双向链表包括至少一个节点,每个节点指向一个第一闲置内存区段;所述可容纳所述数据的空闲内存区段,是所述双向链表中头部节点所指向的第一闲置内存区段;所述方法还包括:
在将所述数据迁移至所述空闲内存区段后,将所述双向链表中的所述头部节点删除。
11.根据权利要求1至9任一项所述的方法,其特征在于,所述方法还包括:
当所述待回收内存区段内存储有数据,且所述已分配内存区域内不存在可容纳所述数据的空闲内存区段,则确定所述头标记所处的第一位置;
从所述第一位置起,沿所述预设方向,将所述头标记移动所述数据长度到第二位置;
将所述第一位置和所述第二位置之间的内存区段,确定为可容纳所述数据的空闲内存区段。
12.根据权利要求1至9任一项所述的方法,其特征在于,所述方法还包括:
当所述待回收内存区段内未存储有数据,执行所述确定与所述待回收内存区段沿所述预设方向相邻的下一内存区段,并将所述尾标记指向所述下一内存区段的起始位置的步骤。
13.根据权利要求1至9任一项所述的方法,其特征在于,所述方法还包括:
获取目标数据类型的历史数据,以及获取所述目标数据类型的更新数据;
基于所述历史数据的数据长度,定位所述闭环内存区域内与所述目标数据类型对应的已占用内存区段,定位到的已占用内存区段的存储长度与所述历史数据的数据长度相匹配;
当所述更新数据与所述历史数据各自数据长度一致,则在定位到的已占用内存区段,将所述历史数据替换为所述更新数据。
14.根据权利要求13所述的方法,其特征在于,所述方法还包括:
当所述更新数据与所述历史数据各自数据长度不一致,则将定位到的已占用内存区段标记为闲置内存区段;
按照所述更新数据的数据长度,将所述头标记沿所述预设方向移动,获得与所述目标数据类型对应的新增内存区段,所述新增内存区段的存储长度与所述更新数据的数据长度一致;
将所述更新数据写入至所述新增内存区段。
15.一种内存回收装置,其特征在于,所述装置包括:
确定模块,用于响应于内存回收事件,确定闭环内存区域的头标记和尾标记;其中,所述闭环内存区域内,从所述尾标记沿预设方向到所述头标记的区域是已分配内存区域,从所述头标记沿所述预设方向到所述尾标记的区域是未分配内存区域;
所述确定模块还用于在所述已分配内存区域内,确定待回收内存区段;所述尾标记指向所述待回收内存区段的起始位置;
查找模块,用于当所述待回收内存区段内存储有数据,确定所述闭环内存区域关联的回收管理区域;所述回收管理区域包括多个记录位,不同记录位对应不同的存储长度,所述记录位用于记录对应存储长度的闲置内存区段;从所述回收管理区域中查找记录位,查找的记录位对应的存储长度与所述数据的数据长度相匹配;基于查找到的记录位记录的闲置内存区段,确定第一闲置内存区段,所述第一闲置内存区段的存储长度等于所述数据的数据长度;当查找到至少一个第一闲置内存区段,从所述至少一个第一闲置内存区段中,确定可容纳所述数据的空闲内存区段;
迁移模块,用于将所述数据迁移至所述空闲内存区段;
调整模块,用于确定与所述待回收内存区段沿所述预设方向相邻的下一内存区段,并将所述尾标记指向所述下一内存区段的起始位置。
16.根据权利要求15所述的装置,其特征在于,所述查找模块还用于对所述数据的数据长度进行预设哈希处理,获得所述数据长度的数据长度哈希值;从所述回收管理区域中,查找对应有容量哈希值的记录位,所述容量哈希值等于所述数据长度哈希值,所述容量哈希值,是对查找的记录位所对应存储长度进行所述预设哈希处理获得的。
17.根据权利要求15所述的装置,其特征在于,所述装置还包括:
探测模块,用于当查找到的记录位未记录任一闲置内存区段,则在所述已分配内存区域内,探测哈希值大于所述数据长度的第二闲置内存区段;从探测到的第二闲置内存区段中,确定可容纳所述数据的空闲内存区段。
18.根据权利要求17所述的装置,其特征在于,所述探测模块还用于基于所述数据长度哈希值,按照预设递变方式,确定每次探测的探测哈希值;从所述回收管理区域中,寻找与所述探测哈希值对应的记录位;基于寻找到的记录位,探测哈希值大于所述数据长度的第二闲置内存区段。
19.根据权利要求18所述的装置,其特征在于,所述探测模块还用于当探测的总次数达到预设探测次数,且未探测到任一所述第二闲置内存区段,则停止探测,判定所述已分配内存区域内不存在可容纳所述数据的空闲内存区段。
20.根据权利要求17所述的装置,其特征在于,所述探测模块还用于当查找到多个第二闲置内存区段,在所述已分配内存区域所述待回收内存区段后的范围内,选择一个已占用内存区段;所述已占用内存区段存储有数据;确定所述一个已占用内存区段和所述待回收内存区段的总存储长度;从所述多个第二闲置内存区段中,筛选存储长度不低于所述总存储长度的第二闲置内存区段;基于筛选出的第二闲置内存区段,确定可容纳所述数据的空闲内存区段。
21.根据权利要求19所述的装置,其特征在于,选择的所述一个已占用内存区段,是在所述已分配内存区域所述待回收内存区段后的范围内,存储长度最小的已占用内存区段。
22.根据权利要求20所述的装置,其特征在于,所述探测模块还用于从筛选出的第二闲置内存区段中,选择存储长度最小的第二闲置内存区段,确定为可容纳所述数据的空闲内存区段。
23.根据权利要求17所述的装置,其特征在于,迁移至所述空闲内存区段的数据,占用所述空闲内存区段的部分内存区段;所述装置还包括:
区域更新模块,用于确定所述空闲内存区段的剩余空闲内存区段,所述剩余空闲内存区段和所述部分内存区段的存储长度和,等于所述空闲内存区段的存储长度;在所述回收管理区域中,确定与所述剩余空闲内存区段的存储长度对应的记录位,在确定的记录位中记录所述剩余空闲内存区段;在所述回收管理区域中,定位存储长度与所述数据长度相匹配的记录位,在定位到的记录位中删除记录的所述空闲内存区段。
24.根据权利要求15至23任一项所述的装置,其特征在于,当所述查找到的记录位指向双向链表,所述双向链表包括至少一个节点,每个节点指向一个第一闲置内存区段;所述可容纳所述数据的空闲内存区段,是所述双向链表中头部节点所指向的第一闲置内存区段;所迁移模块还用于在将所述数据迁移至所述空闲内存区段后,将所述双向链表中的所述头部节点删除。
25.根据权利要求15至23任一项所述的装置,其特征在于,所述确定模块还用于当所述待回收内存区段内存储有数据,且所述已分配内存区域内不存在可容纳所述数据的空闲内存区段,则确定所述头标记所处的第一位置;从所述第一位置起,沿所述预设方向,将所述头标记移动所述数据长度到第二位置;将所述第一位置和所述第二位置之间的内存区段,确定为可容纳所述数据的空闲内存区段。
26.根据权利要求15至23任一项所述的装置,其特征在于,当所述待回收内存区段内未存储有数据,则通知所述迁移模块执行所述确定与所述待回收内存区段沿所述预设方向相邻的下一内存区段,并将所述尾标记指向所述下一内存区段的起始位置的步骤。
27.根据权利要求15至23任一项所述的装置,其特征在于,所述装置还包括:
数据更新模块,用于获取目标数据类型的历史数据,以及获取所述目标数据类型的更新数据;基于所述历史数据的数据长度,定位所述闭环内存区域内与所述目标数据类型对应的已占用内存区段,定位到的已占用内存区段的存储长度与所述历史数据的数据长度相匹配;当所述更新数据与所述历史数据各自数据长度一致,则在定位到的已占用内存区段,将所述历史数据替换为所述更新数据。
28.根据权利要求27所述的装置,其特征在于,所述数据更新模块还用于当所述更新数据与所述历史数据各自数据长度不一致,则将定位到的已占用内存区段标记为闲置内存区段;按照所述更新数据的数据长度,将所述头标记沿所述预设方向移动,获得与所述目标数据类型对应的新增内存区段,所述新增内存区段的存储长度与所述更新数据的数据长度一致;将所述更新数据写入至所述新增内存区段。
29.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至14中任一项所述的方法的步骤。
30.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至14中任一项所述的方法的步骤。
CN202311055132.XA 2023-08-22 2023-08-22 内存回收方法、装置、设备和介质 Active CN116775506B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311055132.XA CN116775506B (zh) 2023-08-22 2023-08-22 内存回收方法、装置、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311055132.XA CN116775506B (zh) 2023-08-22 2023-08-22 内存回收方法、装置、设备和介质

Publications (2)

Publication Number Publication Date
CN116775506A CN116775506A (zh) 2023-09-19
CN116775506B true CN116775506B (zh) 2023-12-05

Family

ID=87986268

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311055132.XA Active CN116775506B (zh) 2023-08-22 2023-08-22 内存回收方法、装置、设备和介质

Country Status (1)

Country Link
CN (1) CN116775506B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101833512A (zh) * 2010-04-22 2010-09-15 中兴通讯股份有限公司 一种内存回收方法及其装置
CN108073458A (zh) * 2017-12-28 2018-05-25 努比亚技术有限公司 内存回收方法、移动终端及计算机可读存储介质
CN110399310A (zh) * 2018-04-18 2019-11-01 杭州宏杉科技股份有限公司 一种存储空间的回收方法及装置
CN111831441A (zh) * 2020-07-01 2020-10-27 Oppo广东移动通信有限公司 内存回收方法、装置、存储介质及电子设备
CN112463358A (zh) * 2020-10-29 2021-03-09 北京罗克维尔斯科技有限公司 内存管理方法、装置、车载系统以及车辆
CN112988610A (zh) * 2019-12-16 2021-06-18 深圳市万普拉斯科技有限公司 内存回收处理方法、装置、计算机设备和存储介质
CN113392037A (zh) * 2020-03-12 2021-09-14 深圳市万普拉斯科技有限公司 内存回收方法、装置、计算机设备和存储介质
CN114265670A (zh) * 2022-03-02 2022-04-01 阿里云计算有限公司 一种内存块整理方法、介质及计算设备
CN115168243A (zh) * 2021-04-01 2022-10-11 深圳开立生物医疗科技股份有限公司 一种内存空间管理方法、装置、电子设备及存储介质
CN115904616A (zh) * 2022-11-04 2023-04-04 北京天融信网络安全技术有限公司 虚拟机热迁移方法、装置、设备及介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102225525B1 (ko) * 2014-04-08 2021-03-09 삼성전자 주식회사 하드웨어 기반 메모리 관리 장치 및 메모리 관리 방법
US9798657B2 (en) * 2014-10-15 2017-10-24 Samsung Electronics Co., Ltd. Data storage device including nonvolatile memory device and operating method thereof

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101833512A (zh) * 2010-04-22 2010-09-15 中兴通讯股份有限公司 一种内存回收方法及其装置
CN108073458A (zh) * 2017-12-28 2018-05-25 努比亚技术有限公司 内存回收方法、移动终端及计算机可读存储介质
CN110399310A (zh) * 2018-04-18 2019-11-01 杭州宏杉科技股份有限公司 一种存储空间的回收方法及装置
CN112988610A (zh) * 2019-12-16 2021-06-18 深圳市万普拉斯科技有限公司 内存回收处理方法、装置、计算机设备和存储介质
CN113392037A (zh) * 2020-03-12 2021-09-14 深圳市万普拉斯科技有限公司 内存回收方法、装置、计算机设备和存储介质
CN111831441A (zh) * 2020-07-01 2020-10-27 Oppo广东移动通信有限公司 内存回收方法、装置、存储介质及电子设备
CN112463358A (zh) * 2020-10-29 2021-03-09 北京罗克维尔斯科技有限公司 内存管理方法、装置、车载系统以及车辆
CN115168243A (zh) * 2021-04-01 2022-10-11 深圳开立生物医疗科技股份有限公司 一种内存空间管理方法、装置、电子设备及存储介质
CN114265670A (zh) * 2022-03-02 2022-04-01 阿里云计算有限公司 一种内存块整理方法、介质及计算设备
CN115904616A (zh) * 2022-11-04 2023-04-04 北京天融信网络安全技术有限公司 虚拟机热迁移方法、装置、设备及介质

Also Published As

Publication number Publication date
CN116775506A (zh) 2023-09-19

Similar Documents

Publication Publication Date Title
CN105868122A (zh) 快闪存储设备的数据处理方法及装置
CN110399310B (zh) 一种存储空间的回收方法及装置
US20120259863A1 (en) Low Level Object Version Tracking Using Non-Volatile Memory Write Generations
CN111198856B (zh) 文件管理方法、装置、计算机设备和存储介质
CN106446044B (zh) 存储空间回收方法及装置
CN112596667A (zh) 在固态驱动器中组织nand块并放置数据以便于随机写入的高吞吐量的方法和系统
CN109086141B (zh) 内存管理方法和装置以及计算机可读存储介质
KR101575639B1 (ko) 지도 서비스를 위한 타일 이미지 갱신 시스템 및 그 방법
CN109597707A (zh) 克隆卷数据拷贝方法、装置及计算机可读存储介质
CN113282799B (zh) 节点的操作方法、装置、计算机设备和存储介质
CN112817962B (zh) 基于对象存储的数据存储方法、装置和计算机设备
CN114281855A (zh) 数据请求方法、装置、计算机设备、存储介质和程序产品
CN116775506B (zh) 内存回收方法、装置、设备和介质
CN103729301B (zh) 数据处理方法和装置
CN111984659A (zh) 数据更新方法、装置、计算机设备和存储介质
CN112597070B (zh) 一种对象回收方法及装置
CN111581157B (zh) 一种对象存储平台以及对象操作方法、装置和服务器
CN114185849A (zh) 文件操作方法、文件操作系统、电子设备及存储介质
CN108376104B (zh) 节点调度方法及装置、计算机可读存储介质
CN113687783A (zh) 一种对象聚合方法、系统、装置及计算机存储介质
CN113391916A (zh) 组织架构数据处理方法、装置、计算机设备和存储介质
CN115357384B (zh) 重复数据删除存储系统的空间回收方法和装置
CN116820353B (zh) 分布式存储系统的数据处理方法、系统、设备及存储介质
CN116755835B (zh) 迁移虚拟机的方法、装置、计算机设备、介质和程序产品
CN114020707B (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