CN108108258B - 一种内存泄露的修复方法和装置 - Google Patents

一种内存泄露的修复方法和装置 Download PDF

Info

Publication number
CN108108258B
CN108108258B CN201711480364.4A CN201711480364A CN108108258B CN 108108258 B CN108108258 B CN 108108258B CN 201711480364 A CN201711480364 A CN 201711480364A CN 108108258 B CN108108258 B CN 108108258B
Authority
CN
China
Prior art keywords
memory
red
black tree
node
total
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
CN201711480364.4A
Other languages
English (en)
Other versions
CN108108258A (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.)
Hangzhou DPTech Technologies Co Ltd
Original Assignee
Hangzhou DPTech Technologies 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 Hangzhou DPTech Technologies Co Ltd filed Critical Hangzhou DPTech Technologies Co Ltd
Priority to CN201711480364.4A priority Critical patent/CN108108258B/zh
Publication of CN108108258A publication Critical patent/CN108108258A/zh
Application granted granted Critical
Publication of CN108108258B publication Critical patent/CN108108258B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提供了一种内存泄露的修复方法,通过组织两种红黑树记录内存申请过程中的多种信息,其中,第一红黑树以进程ID为键值,记录申请内存的总次数和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;在两种情况下进行内存释放处理:1.当第一红黑树中有节点申请的总内存值大于第一阈值,且所述节点的申请内存的总次数值大于第二阈值时,释放预设申请次数的内存值并对应修改红黑树中的申请内存的总次数值信息;2.当某个进程退出后,根据退出进程的ID释放该进程占用的内存并对应删除该进程在红黑树中的信息。

Description

一种内存泄露的修复方法和装置
技术领域
本申请涉及内存领域,特别是涉及一种内存泄露的修复方法和装置。
背景技术
内存是各种智能设备的常用器件,高效的内存管理能够给系统提供稳定的运行环境。但系统有时会发生内存泄漏。内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏得越多,就会造成内存占用越多。
系统中内存处理的一般步骤是申请内存,使用内存,释放内存。内存泄露就是申请了内存,却没有释放内存。现有技术只能对内存泄漏做出检测,以便查看内存泄漏的地址,定位系统异常提供信息等,现在并没有一种较好的内存泄漏的修复方法,无法使系统在发生内存泄漏后也可以长时间稳定运行。
发明内容
为解决上述技术问题,本申请提供了一种内存泄露的修复方法和装置,技术方案如下:
一种内存泄露的修复方法,所述方法包括:
根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
判断第一红黑树的各个节点数据,确定是否有节点申请内存的总值大于第一阈值;
若有节点申请内存的总值大于第一阈值,则继续判断所述节点的申请内存的总次数是否大于第二阈值;
若所述节点的申请内存的总次数大于第二阈值,则进行内存释放,以使内存被回收利用。
一种内存泄露的修复方法,所述方法包括:
根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
当进程退出后,确定所述退出进程的ID,遍历第二红黑树中的各个节点,确定第二红黑树中进程ID和退出进程的ID相同的多个节点,释放所述多个节点对应的内存,并删除节点以及节点对应的结构体;
遍历第一红黑树中的各个节点,确定第一红黑树中进程ID和退出进程的ID相同的节点,删除所述节点以及节点对应的结构体。
一种内存泄露的修复装置,所述装置包括:
数据更新模块:用于根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
第一判断模块:用于判断第一红黑树的各个节点数据,确定是否有节点申请内存的总值大于第一阈值;
第二判断模块:若有节点申请内存的总值大于第一阈值,则继续判断所述节点的申请内存的总次数是否大于第二阈值;
第一内存释放模块:若所述节点的申请内存的总次数大于第二阈值,则进行内存释放,以使内存被回收利用。
一种内存泄露的修复装置,所述装置包括:
数据更新模块:用于根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
第二内存释放模块:用于当进程退出后,确定所述退出进程的ID,遍历第二红黑树中的各个节点,确定第二红黑树中进程ID和退出进程的ID相同的多个节点,释放所述多个节点对应的内存,并删除节点以及节点对应的结构体;
节点删除模块:用于遍历第一红黑树中的各个节点,确定第一红黑树中进程ID和退出进程的ID相同的节点,删除所述节点以及节点对应的结构体。
本申请通过组织两种红黑树记录内存申请过程中的多种信息,其中,第一红黑树以进程ID为键值,记录申请内存的总次数和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;根据两个红黑树获取每次内存的申请和释放时的相关信息,并在两种情况下进行内存释放处理:1.当第一红黑树中有节点申请的总内存值大于第一阈值,且所述节点的申请内存的总次数值大于第二阈值时,释放预设申请次数的内存值并对应修改红黑树中的申请内存的总次数值信息;2.当某个进程退出后,根据退出进程的ID释放该进程占用的内存并对应删除该进程在红黑树中的信息。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本申请实施例第一红黑树结构体的一种示意图;
图2为本申请实施例第二红黑树结构体的一种示意图;
图3为本申请实施例内存泄露的修复方法的一种流程图;
图4为本申请实施例内存泄露的修复方法的另一种流程图;
图5为本申请实施例内存泄露的修复方法的另一种流程图;
图6为本申请实施例内存泄露的修复装置的一种示意图;
图7为本申请实施例内存泄露的修复装置的另一种示意图;
图8为本申请实施例一种计算机设备的结构示意图。
具体实施方式
系统中内存处理的一般步骤是申请内存,使用内存,释放内存。内存泄露就是申请了内存,却没有释放内存。现有技术只能对内存泄漏做出检测,以便查看内存泄漏的地址,定位系统异常提供信息等,现在并没有一种较好的内存泄漏的修复方法,无法使系统在发生内存泄漏后也可以长时间稳定运行。
有鉴于此,本申请在内存泄漏检测的基础上提供一种方法来保证泄漏的内存可以被记录并被正常释放,使泄漏的内存可以重新被系统管理,从而保证系统的稳定运行。
为了使本领域技术人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行详细地描述。
首先介绍本申请中的两种红黑树,在每一次内存动态申请时需要记录以下信息:申请内存的释放地址,申请内存的空间大小,申请内存代码所属进程的进程ID。
为了记录上述信息,本申请将内存申请数据组织成第一红黑树与第二红黑树,包含第一红黑树节点的结构体参见附图1,第一红黑树以附图1中的进程ID作为键值来组织红黑树;包含第二红黑树节点的结构体参见附图2,第二红黑树以附图2中申请内存的释放地址作为键值来组织红黑树。
参考附图3,为本申请实施例内存泄露的修复方法的一种流程图,其可以包括以下基本步骤:
S301,根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据;
这里的第一红黑树与第二红黑树是本申请根据每一次内存的申请与释放信息组织的两种红黑树。第一红黑树以进程ID为键值,记录申请内存的总次数和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值。
其中,第一红黑树与第二红黑树根据内存申请与释放信息进行更新的具体方法为:
在进行内存申请时触发第一红黑树与第二红黑树的更新,将节点插入第二红黑树并初始化对应结构体,判断申请内存代码是否为第一次申请内存;若为第一次申请内存,将节点插入第一红黑树并初始化对应结构体,将所述结构体中的申请内存的总次数值置为1;若不为第一次申请内存,将相应节点对应的结构体中的申请内存的总次数值加1。
在进行内存释放时触发第一红黑树与第二红黑树的更新,根据申请内存的释放地址搜索并确定第二红黑树的对应节点;根据所述节点对应的第二红黑树结构体中的进程ID,搜索并确定第一红黑树中的对应节点,并删除第二红黑树的所述节点以及节点对应的结构体数据;将第一红黑树中对应节点的结构体中的申请内存的总次数值减1,判断所述申请内存的总次数值是否为0;若所述申请内存的总次数值不为0,删除对应节点以及节点对应的结构体数据。
S302,判断第一红黑树的各个节点数据,确定是否有节点申请内存的总值大于第一阈值;如果大于第一阈值,执行步骤S303,如果不大于第一阈值,执行步骤S305;
即判断是否有进程申请内存的总量过多,该第一阈值可以由开发人员自行设定,举例说明:将总内存的30%设定为第一阈值,当某节点的申请内存的总值大于总内存的30%时,判定该节点大于第一阈值。
S303,若有节点申请内存的总值大于第一阈值,则继续判断所述节点的申请内存的总次数是否大于第二阈值?如果大于第二阈值,执行步骤S304,如果不大于第二阈值,执行步骤S305;
查询到某进程申请内存的总量过多后,继续获取所述节点中的申请内存的总次数值进行判断,若总次数值过多,则判定发生内存泄露。
S304,进行内存释放,以使内存被回收利用;
S305,流程结束。
至此,完成附图3所示的流程。
参考附图4,为本申请实施例内存泄露的修复方法的另一种流程图,其可以包括以下基本步骤:
S401,根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据;与步骤S301所述相同;
S402,判断第一红黑树的各个节点数据,确定是否有节点申请内存的总值大于第一阈值;如果大于第一阈值,执行步骤S403,如果不大于第一阈值,执行步骤S411;
S403,若有节点申请内存的总值大于第一阈值,则继续判断所述节点的申请内存的总次数是否大于第二阈值?如果大于第二阈值,执行步骤S404,如果不大于第二阈值,执行步骤S411;
S404,根据第一红黑树对应节点中的申请内存的总次数确定用于释放内存的总目标次数和当前次数值范围,所述当前次数值范围包括次数上限值与次数下限值,其中,当前次数值范围位于申请内存的总次数的中间范围;
S405,获取第二红黑树中的各个节点数据,确定第二红黑树中进程ID和第一红黑树所述节点进程ID相同的多个节点;
S406,在所述多个节点数据中获取多个当前次数值,分别判断节点数据中当前次数值是否大于次数上限值?如果大于次数上限值,执行步骤S407,如果不大于次数上限值,执行步骤S408;
S407,将所述当前次数值信息减去总目标次数值;
S408,节点数据中当前次数值是否小于次数下限值?如果小于次数下限值,执行步骤S411,如果不小于次数下限值,执行步骤S409;
S409,释放所述节点对应的内存,并删除节点及节点对应的结构体;
S410,将第一红黑树中的所述节点减去目标次数值;
S411,流程结束;
举例说明步骤S404到步骤S406的内存释放流程:
当前述步骤确定第一红黑树中的待释放内存节点后,确定该节点的进程ID,遍历第二红黑树的各个节点,在第二红黑树中筛选出与第一红黑树待释放节点的进程ID相同的多个节点。
确定需要释放的目标次数值,在第一红黑树的待释放内存节点中确定这个进程申请内存的总次数,假设申请内存的总次数为30次,确定需要释放的目标次数值为10次。第二红黑树中筛选出的则是该进程第1次申请内存创建的第1个节点,第2次申请内存创建的第2个节点…第30次申请内存创建的第30个节点,共30个节点。
确定需要释放的次数范围,在本实施例中,释放中间申请的N次内存,即释放10-20次申请的内存。判断第二红黑数的多个节点,若节点的当前次数值在11次以下,则不作改变,若节点的当前次数值在20次以上,则将当前次数值信息减去总目标次数值,若节点的当前次数值在11-20次之间,则释放节点对应的内存,并删除节点及节点对应的结构体。最后将第一红黑树申请内存的总次数信息减去11。
需要注意的是,上述仅是对本申请实施例的举例说明,不应对本申请构成限定,根据实际情况,释放的N次内存可能为开始申请的N次内存,中间申请的N次内存,最后申请的N次内存,数值N也可由用户自行设定。
至此,完成附图4所示的流程。
参考附图5,为本申请实施例内存泄露的修复方法的另一种流程图,其可以包括以下基本步骤:
S501,根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的结构体数据;同步骤S301。
S502,当进程退出后,确定所述退出进程的ID,遍历第二红黑树中的各个节点,确定第二红黑树中进程ID和退出进程的ID相同的节点,释放所述节点对应的内存,删除所述节点以及节点对应的结构体数据;
S503,遍历第一红黑树中的各个节点,确定第一红黑树中进程ID和退出进程的ID相同的节点,删除所述节点以及节点对应的结构体数据;
在本实施例中,检测到一个进程退出后,根据该进程的ID在第二红黑树中进行查找,确定包含该进程ID的多个节点,将这些节点对应的内存释放并删除这些节点以及节点对应的结构体数据。同理,根据该进程的ID在第一红黑树中进行查找,确定包含该进程ID的一个节点,删除该节点以及节点对应的结构体数据。
即,当进程退出后,根据退出进程的ID释放该进程占用的内存并对应删除该进程在两个红黑树中的信息,本实施例中的方法能有效避免进程退出但内存未释放的情况。
至此,完成附图5所示的流程。
参考附图6,为本申请实施例内存泄露的修复装置的一种示意图。包括:数据更新模块610,第一判断模块620,第二判断模块630,内存释放模块640。
数据更新模块610:用于根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
第一判断模块620:用于判断第一红黑树的各个节点数据,确定是否有节点申请内存的总值大于第一阈值;
第二判断模块630:用于当有节点申请内存的总值大于第一阈值时,继续判断所述节点的申请内存的总次数是否大于第二阈值;
第一内存释放模块640:用于当所述节点的申请内存的总次数大于第二阈值,进行内存释放,以使内存被回收利用。
至此,完成图6所示的装置结构描述。
参考附图7,为本申请实施例内存泄露的修复装置的另一种示意图。包括:数据更新模块710,第二内存释放模块720,节点删除模块730。
数据更新模块710:用于根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
第二内存释放模块720:用于当进程退出后,确定所述退出进程的ID,遍历第二红黑树中的各个节点,确定第二红黑树中进程ID和退出进程的ID相同的多个节点,释放所述多个节点对应的内存,并删除节点以及节点对应的结构体;
节点删除模块730:用于遍历第一红黑树中的各个节点,确定第一红黑树中进程ID和退出进程的ID相同的节点,删除所述节点以及节点对应的结构体。
至此,完成图7所示的装置结构描述。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述内存泄露的修复方法。该方法包括:
根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
判断第一红黑树的各个节点数据,确定是否有节点申请内存的总值大于第一阈值;
若有节点申请内存的总值大于第一阈值,则继续判断所述节点的申请内存的总次数是否大于第二阈值;
若所述节点的申请内存的总次数大于第二阈值,则进行内存释放,以使内存被回收利用。
本申请实施例还提供另一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述内存泄露的修复方法。该方法包括:
根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
当进程退出后,确定所述退出进程的ID,遍历第二红黑树中的各个节点,确定第二红黑树中进程ID和退出进程的ID相同的多个节点,释放所述多个节点对应的内存,并删除节点以及节点对应的结构体;
遍历第一红黑树中的各个节点,确定第一红黑树中进程ID和退出进程的ID相同的节点,删除所述节点以及节点对应的结构体。
计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本申请实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述内存泄露的修复方法,该方法至少包括:
根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
判断第一红黑树的各个节点数据,确定是否有节点申请内存的总值大于第一阈值;
若有节点申请内存的总值大于第一阈值,则继续判断所述节点的申请内存的总次数是否大于第二阈值;
若所述节点的申请内存的总次数大于第二阈值,则进行内存释放,以使内存被回收利用。
本申请实施例还提供另一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述内存泄露的修复方法,该方法至少包括:
根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
当进程退出后,确定所述退出进程的ID,遍历第二红黑树中的各个节点,确定第二红黑树中进程ID和退出进程的ID相同的多个节点,释放所述多个节点对应的内存,并删除节点以及节点对应的结构体;
遍历第一红黑树中的各个节点,确定第一红黑树中进程ID和退出进程的ID相同的节点,删除所述节点以及节点对应的结构体。
图8示出了本申请实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本申请实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本申请实施例方案所必需的组件,而不必包含图中所示的全部组件。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

Claims (8)

1.一种内存泄露的修复方法,其特征在于,所述方法包括:
根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
判断第一红黑树的各个节点数据,确定是否有节点申请内存的总值大于第一阈值;
若有节点申请内存的总值大于第一阈值,则继续判断所述节点的申请内存的总次数是否大于第二阈值;
若所述节点的申请内存的总次数大于第二阈值,则进行内存释放,以使内存被回收利用,包括:根据第一红黑树对应节点中的申请内存的总次数确定用于释放内存的总目标次数和当前次数值范围,所述当前次数值范围包括次数上限值与次数下限值,其中,当前次数值范围位于申请内存的总次数的中间范围;获取第二红黑树中的各个节点数据,确定第二红黑树中进程ID和第一红黑树所述节点进程ID相同的多个节点;在所述多个节点数据中获取多个当前次数值,分别判断所述多个当前次数值,节点数据中当前次数值大于次数上限值时,将所述当前次数值信息减去总目标次数值,节点数据中当前次数值在次数上限值与次数下限值之间时,释放所述节点对应的内存,并删除节点及节点对应的结构体;将第一红黑树对应节点的申请内存的总次数信息减去总目标次数值。
2.一种内存泄露的修复方法,其特征在于,所述方法包括:
根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
当进程退出后,确定所述退出进程的ID,遍历第二红黑树中的各个节点,确定第二红黑树中进程ID和退出进程的ID相同的多个节点,释放所述多个节点对应的内存,并删除节点以及节点对应的结构体;
遍历第一红黑树中的各个节点,确定第一红黑树中进程ID和退出进程的ID相同的节点,删除所述节点以及节点对应的结构体。
3.根据权利要求1或2所述的方法,其特征在于,所述根据内存申请与释放消息实时更新第一红黑树与第二红黑树中的数据,包括:
在进程发起内存申请时触发第一红黑树与第二红黑树的更新,将节点插入第二红黑树并初始化对应结构体;
判断所述进程是否第一次申请内存,若是第一次申请内存,将节点插入第一红黑树并初始化对应结构体,将所述结构体中的申请内存的总次数置为1;
若不是第一次申请内存,修改第一红黑树对应所述进程的节点数据,将其中的申请内存的总次数加1。
4.根据权利要求1或2所述的方法,其特征在于,所述根据内存申请与释放消息实时更新第一红黑树与第二红黑树中的结构体数据,包括:
在进行内存释放时触发第一红黑树与第二红黑树的更新,根据申请内存的释放地址搜索并确定第二红黑树的对应节点;
在第二红黑树的对应节点数据中确定进程ID,根据所述进程ID搜索并确定第一红黑树中的对应节点;
删除第二红黑树中对应节点以及节点对应的结构体;
将第一红黑树中对应节点的结构体数据的申请内存的总次数值减1,判断所述申请内存的总次数值是否为0;
若所述申请内存的总次数值为0,删除第一红黑树中对应节点以及节点对应的结构体。
5.一种内存泄露的修复装置,其特征在于,所述装置包括:
数据更新模块:用于根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
第一判断模块:用于判断第一红黑树的各个节点数据,确定是否有节点申请内存的总值大于第一阈值;
第二判断模块:用于当有节点申请内存的总值大于第一阈值时,继续判断所述节点的申请内存的总次数是否大于第二阈值;
第一内存释放模块:用于当所述节点的申请内存的总次数大于第二阈值,进行内存释放,以使内存被回收利用,包括:根据第一红黑树对应节点中的申请内存的总次数确定用于释放内存的总目标次数和当前次数值范围,所述当前次数值范围包括次数上限值与次数下限值,其中,当前次数值范围位于申请内存的总次数的中间范围;获取第二红黑树中的各个节点数据,确定第二红黑树中进程ID和第一红黑树所述节点进程ID相同的多个节点;在所述多个节点数据中获取多个当前次数值,分别判断所述多个当前次数值,节点数据中当前次数值大于次数上限值时,将所述当前次数值信息减去总目标次数值,节点数据中当前次数值在次数上限值与次数下限值之间时,释放所述节点对应的内存,并删除节点及节点对应的结构体;将第一红黑树对应节点的申请内存的总次数信息减去目标次数值。
6.一种内存泄露的修复装置,其特征在于,所述装置包括:
数据更新模块:用于根据内存申请与释放信息实时更新第一红黑树与第二红黑树中的数据,其中,第一红黑树以进程ID为键值,记录申请内存的总次数值和申请内存的总值;第二红黑树以申请内存的释放地址为键值,记录进程ID和对应第一红黑树申请内存的总次数的当前次数值;
第二内存释放模块:用于当进程退出后,确定所述退出进程的ID,遍历第二红黑树中的各个节点,确定第二红黑树中进程ID和退出进程的ID相同的多个节点,释放所述多个节点对应的内存,并删除节点以及节点对应的结构体;
节点删除模块:用于遍历第一红黑树中的各个节点,确定第一红黑树中进程ID和退出进程的ID相同的节点,删除所述节点以及节点对应的结构体。
7.根据权利要求5或6所述的装置,其特征在于,所述数据更新模块,具体包括:
在进程发起内存申请时触发第一红黑树与第二红黑树的更新,将节点插入第二红黑树并初始化对应结构体;
判断所述进程是否第一次申请内存,若是第一次申请内存,将节点插入第一红黑树并初始化对应结构体,将所述结构体中的申请内存的总次数值置为1;
若不是第一次申请内存,修改第一红黑树对应所述进程的节点数据,将其中的申请内存的总次数值加1。
8.根据权利要求5或6所述的装置,其特征在于,所述数据更新模块,具体包括:
在进行内存释放时触发第一红黑树与第二红黑树的更新,根据申请内存的释放地址搜索并确定第二红黑树的对应节点;
在第二红黑树的对应节点数据中确定进程ID,根据所述进程ID搜索并确定第一红黑树中的对应节点;
删除第二红黑树中对应节点以及节点对应的结构体;
将第一红黑树中对应节点的结构体数据的申请内存的总次数值减1,判断所述申请内存的总次数值是否为0;
若所述申请内存的总次数值为0,删除第一红黑树中对应节点以及节点对应的结构体。
CN201711480364.4A 2017-12-29 2017-12-29 一种内存泄露的修复方法和装置 Active CN108108258B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711480364.4A CN108108258B (zh) 2017-12-29 2017-12-29 一种内存泄露的修复方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711480364.4A CN108108258B (zh) 2017-12-29 2017-12-29 一种内存泄露的修复方法和装置

Publications (2)

Publication Number Publication Date
CN108108258A CN108108258A (zh) 2018-06-01
CN108108258B true CN108108258B (zh) 2020-11-06

Family

ID=62214992

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711480364.4A Active CN108108258B (zh) 2017-12-29 2017-12-29 一种内存泄露的修复方法和装置

Country Status (1)

Country Link
CN (1) CN108108258B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457150B (zh) * 2019-07-10 2023-03-21 锐捷网络股份有限公司 一种内存故障检测方法及装置
CN114327917A (zh) * 2022-03-11 2022-04-12 武汉深之度科技有限公司 内存管理方法、计算设备及可读存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101539870A (zh) * 2008-03-21 2009-09-23 中兴通讯股份有限公司 内存泄漏检测装置及方法
CN101908018A (zh) * 2010-07-20 2010-12-08 北京海泰方圆科技有限公司 一种判断内存泄露的系统及方法
CN102053868A (zh) * 2009-11-04 2011-05-11 突触计算机系统(上海)有限公司 一种内存泄露检测方法和装置
CN104750563A (zh) * 2013-12-26 2015-07-01 北京大学 一种基于控制流图的内存泄漏自动修复方法
CN106610892A (zh) * 2015-10-23 2017-05-03 腾讯科技(深圳)有限公司 内存泄漏检测方法和装置
CN106649134A (zh) * 2016-12-30 2017-05-10 郑州云海信息技术有限公司 一种内存分配调度的方法和装置
CN106708616A (zh) * 2016-11-29 2017-05-24 深圳天珑无线科技有限公司 进程控制方法和进程控制装置
CN106844216A (zh) * 2017-01-25 2017-06-13 深圳怡化电脑股份有限公司 一种内存泄露的定位方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7500079B2 (en) * 2006-07-31 2009-03-03 Microsoft Corporation Detection of memory leaks

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101539870A (zh) * 2008-03-21 2009-09-23 中兴通讯股份有限公司 内存泄漏检测装置及方法
CN102053868A (zh) * 2009-11-04 2011-05-11 突触计算机系统(上海)有限公司 一种内存泄露检测方法和装置
CN101908018A (zh) * 2010-07-20 2010-12-08 北京海泰方圆科技有限公司 一种判断内存泄露的系统及方法
CN104750563A (zh) * 2013-12-26 2015-07-01 北京大学 一种基于控制流图的内存泄漏自动修复方法
CN106610892A (zh) * 2015-10-23 2017-05-03 腾讯科技(深圳)有限公司 内存泄漏检测方法和装置
CN106708616A (zh) * 2016-11-29 2017-05-24 深圳天珑无线科技有限公司 进程控制方法和进程控制装置
CN106649134A (zh) * 2016-12-30 2017-05-10 郑州云海信息技术有限公司 一种内存分配调度的方法和装置
CN106844216A (zh) * 2017-01-25 2017-06-13 深圳怡化电脑股份有限公司 一种内存泄露的定位方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《浅谈在C++中如何实现垃圾自动回收》;陈龙得;《电脑知识与技术》;20090310;第4卷(第34期);第2007-2008页 *

Also Published As

Publication number Publication date
CN108108258A (zh) 2018-06-01

Similar Documents

Publication Publication Date Title
KR100890546B1 (ko) 메모리 오류 검출 방법
CN108717374B (zh) Java虚拟机启动时预热的方法、装置、及计算机设备
CN107608609B (zh) 一种事件对象发送方法与装置
CN107092491B (zh) 一种配置加载方法和系统
CN108108258B (zh) 一种内存泄露的修复方法和装置
CN109033365B (zh) 一种数据处理方法及相关设备
CN112181663A (zh) 一种内存调度方法、装置及计算机设备
CN114840426A (zh) 一种代码测试的方法及装置
CN112650692A (zh) 堆内存分配方法、装置及存储介质
CN111367710B (zh) 一种eMMC问题还原方法和装置
CN108205559B (zh) 一种数据管理方法及其设备
CN107908500B (zh) 一种坏块识别方法及装置
CN111159298A (zh) 业务请求处理方法、装置、电子设备及存储介质
US20150310207A1 (en) Method for analysing program code of electronic device and electronic device
CN115185458A (zh) 一种数据写入方法、装置、存储介质和计算机设备
CN106202262B (zh) 一种信息处理方法及电子设备
CN113051105A (zh) 数据处理方法、装置、设备及存储介质
CN114691496A (zh) 单元测试方法、装置、计算设备及介质
CN111209062A (zh) 信息获取方法、装置、电子设备及计算机存储介质
CN109144415B (zh) 节点检测方法及共享存储装置
CN109582938B (zh) 报表生成方法和装置
CN105094935A (zh) 一种在电子设备中写固件的方法及电子设备
CN111158873A (zh) 系统状态机实现方法、装置、存储介质及处理器
CN116431376B (zh) 一种核心转储方法、系统、设备及计算机可读存储介质
CN111124712A (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