CN117056244A - 一种内存管理方法、装置、设备及介质 - Google Patents

一种内存管理方法、装置、设备及介质 Download PDF

Info

Publication number
CN117056244A
CN117056244A CN202311021053.7A CN202311021053A CN117056244A CN 117056244 A CN117056244 A CN 117056244A CN 202311021053 A CN202311021053 A CN 202311021053A CN 117056244 A CN117056244 A CN 117056244A
Authority
CN
China
Prior art keywords
memory
file
allocated
virtual
files
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.)
Pending
Application number
CN202311021053.7A
Other languages
English (en)
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.)
Beijing Zitiao Network Technology Co Ltd
Original Assignee
Beijing Zitiao Network Technology 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 Beijing Zitiao Network Technology Co Ltd filed Critical Beijing Zitiao Network Technology Co Ltd
Priority to CN202311021053.7A priority Critical patent/CN117056244A/zh
Publication of CN117056244A publication Critical patent/CN117056244A/zh
Pending legal-status Critical Current

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
    • 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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开实施例涉及一种内存管理方法、装置、设备及介质,其中该方法包括:获取目标应用程序的内存分配请求;基于内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树;将待分配虚拟内存地址区间返回至目标应用程序,以将待分配虚拟内存地址区间对应的目标虚拟内存分配给目标应用程序。本公开通过构建用于管理物理内存中空闲文件的红黑树,在采用文件映射的方式为应用程序分配虚拟内存时能够快速实现分配,不仅极大减少了OOM的发生几率,提升了应用程序的稳定性,而且效率更高、性能更好,进而提升了数据访问效率。

Description

一种内存管理方法、装置、设备及介质
技术领域
本公开涉及信息技术领域,尤其涉及一种内存管理方法、装置、设备及介质。
背景技术
内存占用是很多应用程序开发时关注的重要性能指标,例如游戏应用,相关的堆内存占了进程物理内存的一部分,如果堆内存过大,会导致内存占用超过物理内存的上限,也即可用内存耗尽(out of memory,OMM),进而导致应用程序的异常退出。
为了解决上述问题,相关技术中可以采用文件映射的方式分配内存,但是这种方式内存分配的效率较低,导致数据访问的效率较低。
发明内容
为了解决上述技术问题,本公开提供了一种内存管理方法、装置、设备及介质。
本公开实施例提供了一种内存管理方法,所述方法包括:
获取目标应用程序的内存分配请求;
基于所述内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,所述文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树;
将所述待分配虚拟内存地址区间返回至所述目标应用程序,以将所述待分配虚拟内存地址区间对应的目标虚拟内存分配给所述目标应用程序。
本公开实施例还提供了一种内存管理装置,所述装置包括:
分配请求模块,用于获取目标应用程序的内存分配请求;
地址确定模块,用于基于所述内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,所述文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树;
分配模块,用于将所述待分配虚拟内存地址区间返回至所述目标应用程序,以将所述待分配虚拟内存地址区间对应的目标虚拟内存分配给所述目标应用程序。
本公开实施例还提供了一种电子设备,所述电子设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现如本公开实施例提供的内存管理方法。
本公开实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行如本公开实施例提供的内存管理方法。
本公开实施例提供的技术方案与现有技术相比具有如下优点:本公开实施例提供的内存管理方案,获取目标应用程序的内存分配请求;基于内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树;将待分配虚拟内存地址区间返回至目标应用程序,以将待分配虚拟内存地址区间对应的目标虚拟内存分配给目标应用程序。采用上述技术方案,通过构建用于管理物理内存中空闲文件的红黑树,在采用文件映射的方式为应用程序分配虚拟内存时能够快速实现分配,不仅极大减少了OOM的发生几率,提升了应用程序的稳定性,而且效率更高、性能更好,进而提升了数据访问效率。
附图说明
结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。
图1为相关技术中的内存管理的示意图;
图2为本公开实施例提供的一种内存管理方法的流程示意图;
图3为本公开实施例提供的一种文件红黑树的示意图;
图4为本公开实施例提供的一种分配前的物理内存的示意图;
图5为本公开实施例提供的一种分配后的物理内存的示意图;
图6为本公开实施例提供的一种虚拟红黑树的示意图;
图7为本公开实施例提供的一种合并前的物理内存的示意图;
图8为本公开实施例提供的一种合并后的物理内存的示意图;
图9为本公开实施例提供的一种内存管理的示意图;
图10为本公开实施例提供的一种内存管理装置的结构示意图;
图11为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
内存占用是很多应用程序开发时关注的重要性能指标,例如游戏应用,当一个游戏应用程序是使用Unity引擎开发,游戏相关的内存占了进程物理内存的大部分,其中,则Unity引擎执行C#代码分配的内存称为Mono堆内,Mono堆内存占了游戏内存的一部分;当上述游戏应用程序运行在IOS操作系统的电子设备上时,特别是内存不足内存资源较为紧张的电子设备,如果Mono堆内存过大,会导致游戏内存占用超过物理内存的上限,并触发OOM,从而导致游戏应用程序被系统异常退出,给用户带来糟糕的游戏体验。
示例性的,图1为相关技术中的内存管理的示意图,如图1所示,Unity引擎为游戏应用程序分配Mono堆内存时,可以通过内存映射文件的方法(mmap)的匿名映射的方式向iOS系统申请虚拟内存,如图中内存A和内存B中的空闲内存逐渐变为已使用,当这部分虚拟内存被实际使用时,会被iOS系统映射为真实的物理内存,这部分内存会被计入到游戏的内存占用,容易触发OOM。
相关技术中可以采用mmap文件映射的方式分配内存,但是这种方式内存分配的效率较低,导致数据访问的效率较低。
为了解决上述问题,本公开实施例提供了一种内存管理方法,下面结合具体的实施例对该方法进行介绍。
图2为本公开实施例提供的一种内存管理方法的流程示意图,该方法可以由内存管理装置执行,其中该装置可以采用软件和/或硬件实现,一般可集成在电子设备中。如图2所示,该方法包括:
步骤101、获取目标应用程序的内存分配请求。
其中,目标应用程序可以是任意的应用程序,例如目标应用程序可以为游戏应用程序、阅读应用程序和视频应用程序等,本公开实施例以目标应用程序为游戏应用程序为例。并且本公开实施例的内存管理方法应用于操作系统为的电子设备中。
具体的,内存管理装置可以获取目标应用程序发送的内存分配请求,该内存分配请求可以为目标应用程序在运行的过程中触发的请求进行内存分配以执行用户的具体操作的请求。
步骤102、基于内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树。
其中,待分配内存大小可以为目标应用程序所需要的内存量,设置在内存分配请求中。文件映射关系表示物理内存中各文件的物理内存地址与进程的虚拟内存的虚拟内存地址区间的一一映射关系,具体可以是采用mmap文件映射方式所确定的具体映射关系。物理内存可以是磁盘的物理内存空间,这里文件可以是磁盘文件,虚拟内存可以是一段连续的虚拟地址空间的抽象。mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件的物理地址(也即磁盘地址)和进程虚拟内存中一段虚拟地址的一一对映关系;实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的磁盘文件上,即完成了对文件的操作而不必再调用读、写等系统调用函数。
文件红黑树可以是通过红黑树的方式将物理内存中包括的空闲文件进行表征,该文件红黑树利用空闲文件的内存大小作为排序的依据,文件红黑树的每个节点表示一个空闲文件的内存大小,空闲文件可以是物理内存中内存量较小的可以被复用的一个文件或一个文件的碎片。红黑树是一种自平衡二叉查找树,是一种能够实现关联数组的数据结构。
待分配虚拟地址区间可以是当前根据待分配内存大小在虚拟内存中确定的一段虚拟地址的范围,包括起始虚拟内存地址和结束虚拟内存地址。
在一些实施例中,基于内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,包括:基于待分配内存大小访问文件红黑树,将内存大小大于待分配内存大小并且内存大小与待分配内存大小的差值最小的节点确定为第一目标节点;从第一目标节点对应的空闲文件中提取与待分配内存大小对应的部分空闲文件确定为待分配文件;基于待分配文件的物理内存地址在文件映射关系中进行匹配,将匹配成功的虚拟内存地址区间确定为待分配虚拟内存地址区间。
内存管理装置可以从内存分配请求中提取待分配内存大小,之后可以根据该待分配内存大小访问文件红黑树,按照文件红黑树的结构从根节点开始查找节点,找到一个内存大于该待分配内存大小并且内存大于待分配内存大小的差值最小的节点,该节点为第一目标节点;之后可以从该第一目标节点对应的空闲文件中分出内存大小为待分配内存大小的部分文件,即可确定为待分配文件;基于该待分配文件的物理内存地址在文件映射关系中匹配,确定该物理内存地址映射的虚拟内存地址区间为匹配成功的虚拟内存地址区间,也即确定为待分配虚拟内存地址区间,
示例性的,图3为本公开实施例提供的一种文件红黑树的示意图,如图3所示,图中展示了一个示例性的文件红黑树,该文件红黑树中包括6个节点,每个节点表示物理内存中的一个空闲文件的内存大小,本公开实施例中内存大小以页为单位,图中6个节点对应内存大小分别为30页、40页、50页、60页、80页和90页的6个空闲文件。
假设待分配内存大小为55页,通过访问图3的文件红黑树,基于文件红黑树的结构规律查找到内存大小大于55页并且差值最小的节点为内存大小为60页的节点,该节点为第一目标节点,可以从该第一目标节点对应的空闲文件中分出55页的文件作为待分配文件,并将该待分配文件的对应的虚拟内存地址区间确定为待分配虚拟地址内存区间,剩余的5页的文件作为一个空闲文件重新插入该文件红黑树中的对应位置。
步骤103、将待分配虚拟内存地址区间返回至目标应用程序,以将待分配虚拟内存地址区间对应的目标虚拟内存分配给目标应用程序。
目标虚拟内存可以是进程的虚拟内存中与待分配虚拟内存地址区间对应的一个虚拟内存空间。
内存管理装置确定待分配虚拟内存地址区间之后,可以将该待分配虚拟内存地址区间返回给目标应用程序,以将待分配虚拟内存地址区间对应的目标虚拟内存分配给目标应用程序,目标应用程序可以使用该目标虚拟内存以执行用户的具体操作。
示例性的,图4为本公开实施例提供的一种分配前的物理内存的示意图,如图4所示,图中展示了内存分配之前的物理内存400,该物理内存400中包括4个空闲文件和2个已使用文件(图中斜线填充的区域),空闲文件401是4个空闲文件中的一个。
示例性的,图5为本公开实施例提供的一种分配后的物理内存的示意,如图5所示,图中展示了内存分配之后的物理内存500,相较于图4,图5中的空闲文件501已被分配和使用。
文件可以被分割为不同的碎片,其中被使用的部分碎片无法被复用,剩余的未被使用的部分碎片为空闲碎片可以被复用,本公开实施例将空闲的文件或上述空闲碎片称为空闲文件。内存管理装置接收到内存分配请求时可以从空闲文件中找到满足要求的最小文件分配,也即从可以被复用的碎片中找到满足要求的最小碎片,提升了物理内存的使用率;并且采用红黑树的查找方式,能够有效提升查找效率,进而提升内存分配的效率。
本公开实施例提供的内存管理方案,本公开实施例提供的内存管理方案,获取目标应用程序的内存分配请求;基于内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树;将待分配虚拟内存地址区间返回至目标应用程序,以将待分配虚拟内存地址区间对应的目标虚拟内存分配给目标应用程序。采用上述技术方案,通过构建用于管理物理内存中空闲文件的红黑树,在采用文件映射的方式为应用程序分配虚拟内存时能够快速实现分配,不仅极大减少了OOM的发生几率,提升了应用程序的稳定性,而且效率更高、性能更好,进而提升了数据访问效率。
在一些实施例中,本公开实施例的内存管理方法还可以包括:获取目标应用程序的内存释放请求;基于内存释放请求对应的待释放虚拟内存地址以及待释放内存大小确定待释放虚拟内存地址区间,并基于待释放虚拟内存地址通过访问虚拟红黑树确定第二目标节点,其中,第二目标节点对应的已分配的虚拟内存的虚拟内存地址区间包括待释放虚拟内存地址;基于释放虚拟内存地址区间、第二目标节点的虚拟内存地址区间以及文件映射关系,确定待释放物理内存地址以及目标物理内存地址;从目标物理内存地址对应的已使用文件中提取与待释放物理内存地址对应的部分文件确定为新的空闲文件。
其中,内存释放请求可以是目标应用程序调用释放函数后发送的进行内存释放的请求,也即目标应用程序释放一块虚拟内存并删除对应文件的数据后可以触发内存释放请求。该内存释放请求中可以包括内存释放时所需的参数,包括待释放虚拟内存地址和待释放内存大小,待释放虚拟内存地址可以是需要进行内存释放的一段虚拟内存地址区间的起始虚拟内存地址。待释放虚拟内存地址区间可以是当前根据内存释放时所需的参数在虚拟内存中确定的一段虚拟地址的范围,包括起始虚拟内存地址和结束虚拟内存地址,起始虚拟内存地址即为上述待释放虚拟内存地址。待释放内存大小可以是需要进行内存释放的一段虚拟内存地址区间对应的虚拟内存的内存量。
虚拟红黑树是将已分配的虚拟内存按照红黑树的数据结构存储得到的红黑树,该虚拟红黑树利用已分配的虚拟内存的起始虚拟内存地址作为排序的依据,并且虚拟红黑树的每个节点表示一个已分配的虚拟内存的虚拟内存地址区间。
内存管理装置可以获取目标应用程序的内存释放请求,并从该内存释放请求中提取待释放虚拟内存地址以及待释放内存大小;之后可以基于释放虚拟内存地址以及待释放内存大小确定待释放虚拟内存区间,并基于该待释放虚拟内存地址按照虚拟红黑树的结构从根节点开始查找节点,找到一个节点对应的虚拟内存地址区间包括该待释放虚拟内存地址,将该节点确定为第二目标节点;之后可以基于待释放虚拟内存地址区间、第二目标节点对应的虚拟内存地址区间在文件映射关系中匹配,确定第二目标节点对应的虚拟内存地址区间映射的物理内存地址为目标物理内存地址,并确定该待释放虚拟内存地址区间映射的物理内存地址为待释放物理内存地址;之后可以从物理内存中快速查找到目标物理内存地址对应的已使用文件,将该已使用文件中与待释放物理内存地址对应的部分文件标记为空闲,确定为新的空闲文件。
此外,内存管理装置还可以在文件映射关系中删除目标物理内存地址与第二目标节点对应的虚拟内存地址区间的一一映射关系,并提取已使用文件中除新的空闲文件之外的剩余文件,建立剩余文件与对应的虚拟内存地址区间的一一映射关系。
示例性的,图6为本公开实施例提供的一种虚拟红黑树的示意图,如图6所示,图中展示了一种示例性的虚拟红黑树,该虚拟红黑树中包括6个节点,每个节点表示一个已分配的虚拟内存的虚拟内存地址区间,本公开实施例中内存大小以页为单位,图中6个节点对应虚拟内存地址区间分别为30-35、40-45、50-55、60-65、70-80、90-100的6个已分配的虚拟内存。
假设待释放虚拟内存地址为63以及待释放内存大小为2页,释放虚拟内存地址区间为63-65,通过访问图6的虚拟红黑树,可以查找到虚拟内存地址区间为60-65的第二目标节点,从该第二目标节点对应的已使用文件中提取该待释放虚拟内存地址区间对应的待释放物理内存地址对应的部分文件标记为空闲,确定为新的空闲文件。
上述方案中,通过将已分配的虚拟内存采用虚拟红黑树表示,在进行内存释放时可以快速通过该虚拟红黑树定位需要进行内存释放的部分文件并将其释放,有效提升了内存释放的效率。
可选的,本公开实施例的内存管理方法还可以包括:基于新的空闲文件在文件红黑树中增加新的节点,以更新文件红黑树。
内存管理装置确定新的空闲文件之后,可以在上述文件红黑树中增加一个新的节点,该新的节点表示新的空闲文件的内存大小,并更新文件红黑树的节点的排序,得到最新的文件红黑树,以备后续内存分配使用。
在一些实施例中,本公开实施例的内存管理方法还可以包括:基于双向链表确定新的空闲文件的两个相邻文件,其中,双向链表中各文件的信息按照其在物理内存的物理内存地址顺序排列;根据两个相邻文件的状态确定待合并文件,并将待合并文件与新的空闲文件进行合并,得到合并空闲文件;基于合并空闲文件更新文件红黑树。
双向链表是一种链式数据结构,每个节点包含了一个指向前一个节点的指针和一个指向下一个节点的指针。本公开实施例中可以通过双向链表存储多个文件的信息,一个文件的信息表示一个节点,多个文件的信息对应的多个节点按照其在物理内存的物理内存地址顺序排列,一个文件的信息包括该文件对应的物理内存地址、虚拟内存地址区间以及红黑树节点信息,红黑树节点信息包括该文件在上述文件红黑树和虚拟红黑树的节点信息。
内存管理装置在确定新的空闲文件之后,可以通过双向链接中该新的空闲文件的节点查找确定两个相邻文件;之后可以确定该两个相邻文件的状态,也即确定是否为空闲状态,并将空闲的相邻文件确定为待合并文件,之后可以将该待合并文件与上述新的空闲文件合并,得到合并空闲文件;之后可以基于该合并空闲文件更新上述文件红黑树,通过修改得到一个新的节点,该新的节点表示合并空闲文件的内存大小,并更新文件红黑树的节点的排序,得到最新的文件红黑树,以备后续内存分配使用。
示例性的,图7为本公开实施例提供的一种合并前的物理内存的示意图,如图7所示,图中展示了合并之前的物理内存700,该物理内存700中包括4个空闲文件和2个已经分配的文件(图中斜线填充的区域),空闲文件702为内存释放之后新的空闲文件,空闲文件701和空闲文件703为空闲文件702的两个相邻文件。
示例性的,图8为本公开实施例提供的一种合并后的物理内存的示意图,如图8所示,图中展示了合并之后的物理内存800,相较于图7,由于空闲文件701和空闲文件703的状态均为空闲,可以将空闲文件701和空闲文件703均确定为待合并文件,之后将待合并文件与空闲文件702合并得到图8中空闲文件801。
上述方案中,内存释放之后物理内存中对应的文件会变为可复用的空闲状态,通过对文件的合并,能够提升文件整体的利用率,降低碎片数量;并且随着物理内存中文件的状态变化,可以不断更新上述文件红黑树和虚拟红黑树,使这两个红黑树保持准确的结构,有助于提升后续内存分配和释放的准确性和效率。
示例性的,图9为本公开实施例提供的一种内存管理的示意图,如图9所示,可以将堆内存的系统接口(System API)替换为文件映射分配器(MmapAllocator),用于将相关技术中通过系统接口实现的内存映射管理方案替换为本公开实施例的内存管理方案。
本公开实施例提供了一种基于mmap文件映射的内存管理方案,负责应用程序的堆内存向系统申请内存以及释放内存的管理,mmap文件映射的本质是映射完整的磁盘文件到虚拟内存中,虚拟内存和文件是一一对应的关系。内存分配和内存释放的具体流程如下:内存分配时可以根据传入的待分配内存大小在文件中找到对应的空闲文件并返回对应的虚拟内存地址区间实现对应虚拟内存的分配;在内存释放时可以通过传输的待释放虚拟内存地址和待释放内存大小找到在文件中映射的部分文件,解除该部分文件的占用,将其标记为空闲。
本公开实施例的内存管理方案,基于mmap文件映射方式以及红黑树提供了有效合理的方式来实现内存的分配和/或释放的管理,由于文件映射的内存不会统计到进程的物理内存中,实现了应用程序的内存不计入内存占用,可以有效防止应用程序因为内存超过上限而被系统强制退出的OOM问题,从根源上缓解了OOM问题,提升了应用程序的稳定性,并且通过红黑树的查找方式,提升内存管理的效率和性能,进而提升了数据访问效率。
图10为本公开实施例提供的一种内存管理装置的结构示意图,该装置可由软件和/或硬件实现,一般可集成在电子设备中。如图10所示,该装置包括:
分配请求模块1001,用于获取目标应用程序的内存分配请求;
地址确定模块1002,用于基于所述内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,所述文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树;
分配模块1003,用于将所述待分配虚拟内存地址区间返回至所述目标应用程序,以将所述待分配虚拟内存地址区间对应的目标虚拟内存分配给所述目标应用程序。
可选的,所述文件映射关系表示所述物理内存中各文件的物理内存地址与进程的虚拟内存的虚拟内存地址区间的一一映射关系;
所述文件红黑树的每个节点表示一个所述空闲文件的内存大小。
可选的,所述地址确定模块用于:
基于所述待分配内存大小访问所述文件红黑树,将内存大小大于所述待分配内存大小并且内存大小与所述待分配内存大小的差值最小的节点确定为第一目标节点;
从所述第一目标节点对应的空闲文件中提取与所述待分配内存大小对应的部分文件确定为待分配文件;
基于所述待分配文件的物理内存地址在所述文件映射关系中进行匹配,将匹配成功的虚拟内存地址区间确定为待分配虚拟内存地址区间。
可选的,所述装置还包括内存释放模块,用于:
获取所述目标应用程序的内存释放请求;
基于所述内存释放请求对应的待释放虚拟内存地址以及待释放内存大小确定待释放虚拟内存地址区间,并基于所述待释放虚拟内存地址通过访问虚拟红黑树确定第二目标节点,其中,所述第二目标节点对应的已分配的虚拟内存的虚拟内存地址区间包括所述待释放虚拟内存地址;
基于所述释放虚拟内存地址区间、所述第二目标节点的虚拟内存地址区间以及所述文件映射关系,确定待释放物理内存地址以及目标物理内存地址;
从所述目标物理内存地址对应的已使用文件中提取与待释放物理内存地址对应的部分文件确定为新的空闲文件。
可选的,所述虚拟红黑树是将已分配的虚拟内存按照红黑树的数据结构存储得到的红黑树,所述虚拟红黑树的每个节点表示一个已分配的虚拟内存的虚拟内存地址区间。
可选的,所述装置还包括第一更新模块,用于:
基于所述新的空闲文件在所述文件红黑树中增加新的节点,以更新所述文件红黑树。
可选的,所述装置还包括第二更新模块,用于:
基于双向链表确定所述新的空闲文件的两个相邻文件,其中,所述双向链表中各文件的信息按照其在所述物理内存的物理内存地址顺序排列;
根据两个所述相邻文件的状态确定待合并文件,并将所述待合并文件与所述新的空闲文件进行合并,得到合并空闲文件;
基于所述合并空闲文件更新所述文件红黑树。
本公开实施例所提供的内存管理装置可执行本公开任意实施例所提供的内存管理方法,具备执行方法相应的功能模块和有益效果。
本公开实施例还提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现本公开任意实施例所提供的内存管理方法。
图11为本公开实施例提供的一种电子设备的结构示意图。下面具体参考图11,其示出了适于用来实现本公开实施例中的电子设备1100的结构示意图。本公开实施例中的电子设备1100可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图11示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图11所示,电子设备1100可以包括处理装置(例如中央处理器、图形处理器等)1101,其可以根据存储在只读存储器(ROM)1102中的程序或者从存储装置1108加载到随机访问存储器(RAM)1103中的程序而执行各种适当的动作和处理。在RAM 1103中,还存储有电子设备1100操作所需的各种程序和数据。处理装置1101、ROM 1102以及RAM 1103通过总线1104彼此相连。输入/输出(I/O)接口1105也连接至总线1104。
通常,以下装置可以连接至I/O接口1105:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置1106;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置1107;包括例如磁带、硬盘等的存储装置1108;以及通信装置1109。通信装置1109可以允许电子设备1100与其他设备进行无线或有线通信以交换数据。虽然图11示出了具有各种装置的电子设备1100,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置1109从网络上被下载和安装,或者从存储装置1108被安装,或者从ROM 1102被安装。在该计算机程序被处理装置1101执行时,执行本公开实施例的内存管理方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取目标应用程序的内存分配请求;基于所述内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,所述文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树;将所述待分配虚拟内存地址区间返回至所述目标应用程序,以将所述待分配虚拟内存地址区间对应的目标虚拟内存分配给所述目标应用程序。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
可以理解的是,在使用本公开各实施例公开的技术方案之前,应当依据相关法律法规通过恰当的方式对本公开所涉及的信息的类型、使用范围、使用场景等告知用户并获得用户的授权。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

Claims (10)

1.一种内存管理方法,其特征在于,包括:
获取目标应用程序的内存分配请求;
基于所述内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,所述文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树;
将所述待分配虚拟内存地址区间返回至所述目标应用程序,以将所述待分配虚拟内存地址区间对应的目标虚拟内存分配给所述目标应用程序。
2.根据权利要求1所述的方法,其特征在于,所述文件映射关系表示所述物理内存中各文件的物理内存地址与进程的虚拟内存的虚拟内存地址区间的一一映射关系;
所述文件红黑树的每个节点表示一个所述空闲文件的内存大小。
3.根据权利要求2所述的方法,其特征在于,基于所述内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,包括:
基于所述待分配内存大小访问所述文件红黑树,将内存大小大于所述待分配内存大小并且内存大小与所述待分配内存大小的差值最小的节点确定为第一目标节点;
从所述第一目标节点对应的空闲文件中提取与所述待分配内存大小对应的部分文件确定为待分配文件;
基于所述待分配文件的物理内存地址在所述文件映射关系中进行匹配,将匹配成功的虚拟内存地址区间确定为待分配虚拟内存地址区间。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述目标应用程序的内存释放请求;
基于所述内存释放请求对应的待释放虚拟内存地址以及待释放内存大小确定待释放虚拟内存地址区间,并基于所述待释放虚拟内存地址通过访问虚拟红黑树确定第二目标节点,其中,所述第二目标节点对应的已分配的虚拟内存的虚拟内存地址区间包括所述待释放虚拟内存地址;
基于所述释放虚拟内存地址区间、所述第二目标节点的虚拟内存地址区间以及所述文件映射关系,确定待释放物理内存地址以及目标物理内存地址;
从所述目标物理内存地址对应的已使用文件中提取与待释放物理内存地址对应的部分文件确定为新的空闲文件。
5.根据权利要求4所述的方法,其特征在于,所述虚拟红黑树是将已分配的虚拟内存按照红黑树的数据结构存储得到的红黑树,所述虚拟红黑树的每个节点表示一个已分配的虚拟内存的虚拟内存地址区间。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
基于所述新的空闲文件在所述文件红黑树中增加新的节点,以更新所述文件红黑树。
7.根据权利要求4所述的方法,其特征在于,所述方法还包括:
基于双向链表确定所述新的空闲文件的两个相邻文件,其中,所述双向链表中各文件的信息按照其在所述物理内存的物理内存地址顺序排列;
根据两个所述相邻文件的状态确定待合并文件,并将所述待合并文件与所述新的空闲文件进行合并,得到合并空闲文件;
基于所述合并空闲文件更新所述文件红黑树。
8.一种内存管理装置,其特征在于,包括:
分配请求模块,用于获取目标应用程序的内存分配请求;
地址确定模块,用于基于所述内存分配请求对应的待分配内存大小以及文件映射关系,通过访问文件红黑树确定待分配虚拟内存地址区间,其中,所述文件红黑树是将物理内存中空闲文件按照红黑树的数据结构存储得到的红黑树;
分配模块,用于将所述待分配虚拟内存地址区间返回至所述目标应用程序,以将所述待分配虚拟内存地址区间对应的目标虚拟内存分配给所述目标应用程序。
9.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1-7中任一所述的内存管理方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1-7中任一所述的内存管理方法。
CN202311021053.7A 2023-08-14 2023-08-14 一种内存管理方法、装置、设备及介质 Pending CN117056244A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311021053.7A CN117056244A (zh) 2023-08-14 2023-08-14 一种内存管理方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311021053.7A CN117056244A (zh) 2023-08-14 2023-08-14 一种内存管理方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN117056244A true CN117056244A (zh) 2023-11-14

Family

ID=88663895

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311021053.7A Pending CN117056244A (zh) 2023-08-14 2023-08-14 一种内存管理方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN117056244A (zh)

Similar Documents

Publication Publication Date Title
CN112035529A (zh) 缓存方法、装置、电子设备及计算机可读存储介质
US9389997B2 (en) Heap management using dynamic memory allocation
CN113553300B (zh) 文件的处理方法、装置、可读介质和电子设备
CN111857720B (zh) 用户界面状态信息的生成方法、装置、电子设备及介质
CN111813666B (zh) 一种内存泄露定位的方法、装置、介质和电子设备
CN112306685B (zh) 任务隔离方法、装置、电子设备及计算机可读介质
CN110545313B (zh) 消息推送控制方法、装置及电子设备
CN117112215A (zh) 内存分配方法、设备及存储介质
WO2023273564A1 (zh) 虚拟机内存管理方法、装置、存储介质及电子设备
CN116633900A (zh) 逻辑地址分配方法、装置、电子设备及存储介质
CN116302271A (zh) 一种页面展示方法、装置及电子设备
CN117056244A (zh) 一种内存管理方法、装置、设备及介质
CN116974732A (zh) 一种内存处理方法、装置、终端设备及介质
CN111143355B (zh) 数据处理方法及装置
CN110502891B (zh) 一种获取进程内存泄露的方法、装置、介质和电子设备
CN111581930A (zh) 在线表格数据处理方法、装置、电子设备和可读介质
CN111008178A (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
CN111831655B (zh) 一种数据处理的方法、装置、介质和电子设备
CN115220910B (zh) 一种资源调度方法、装置及设备
CN113448550B (zh) 实现类的收集管理方法、装置、电子设备及计算机介质
CN110716885B (zh) 数据管理方法、装置、电子设备和存储介质
CN111209042B (zh) 一种建立函数栈的方法、装置、介质和电子设备
CN111835848B (zh) 数据分片方法、装置、电子设备及计算机可读介质
CN116820354A (zh) 数据存储方法、数据存储装置和数据存储系统
CN117828381A (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