CN100590598C - 内存泄露检查方法及装置 - Google Patents
内存泄露检查方法及装置 Download PDFInfo
- Publication number
- CN100590598C CN100590598C CN200710179478A CN200710179478A CN100590598C CN 100590598 C CN100590598 C CN 100590598C CN 200710179478 A CN200710179478 A CN 200710179478A CN 200710179478 A CN200710179478 A CN 200710179478A CN 100590598 C CN100590598 C CN 100590598C
- Authority
- CN
- China
- Prior art keywords
- internal memory
- memory
- module
- resource
- recycling module
- 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.)
- Expired - Fee Related
Links
Images
Abstract
本发明涉及一种内存泄漏检查方法及装置,该方法包括:将过程的唯一标识通知内存回收模块;在执行所述过程中,通过内存回收模块申请所需的内存,该内存回收模块记录该过程所申请的内存信息及与该内存信息对应的过程的唯一标识,且该过程主动释放已经使用完的内存资源,并将释放的内存信息通知内存回收模块;在该过程执行结束,通知内存回收模块;所述内存回收模块根据该过程的唯一标识查找出该过程还没有释放的内存,所述还没有释放的内存即为泄漏的内存。上述方法和装置可以高效地回收各种计算机资源,较好地解决内存泄漏问题,且使用简单、效率高、兼容性好。
Description
技术领域
本发明涉及计算机领域,特别涉及一种内存泄漏检查方法及装置。
背景技术
目前,计算机及通信行业中,对于要求长时间不停机使用的设备来说,及时地释放不需要的资源、充分地利用已有资源是保证系统的运行效率及运行质量的一个重要因素。
但是,目前各种资源的回收方法并不能完全地、高效率地回收各种资源,例如内存泄漏问题就是一个比较严重的问题,内存泄漏是指在程序中动态分配的内存在使用后没有及时的释放掉而造成的系统无法再次使用,这种情况在使用C/C++等语言开发的系统中尤其严重。
目前,针对内存泄漏主要是通过以下三种方式发现的:
1、利用专用工具进行检查,如PC-LINT、Purify等。这种方法主要通过静态扫描代码或者通过监控系统运行来发现存在的潜在内存漏泄问题。
2、利用通用内存回收机制进行检查,目前,Java等语言提供了通用内存回收机制,该方法主要是通过扫描系统所使用的内存,没有被引用的内存即认为是垃圾内存,可以回收重新使用。
3、通过编写高质量的源代码来避免内存泄漏。
但是,在实现本发明的过程中,发明人发现现有技术中至少存在如下问题:第一种方法检查不全面、系统正常运行时无法使用,因为无论是静态工具或者动态工具,都无法全面的分析代码各种运行路径,所以不可能发现所有可能的内存泄漏问题,并且专用工具一般是在系统测试过程中使用,系统在运行时无法发现并解决内存泄漏问题;第二种方法回收效率低,虽然有各种优化算法,但由于需要扫描全系统的内存使用情况,所以效率无法满足实时系统的响应时间的要求(一般要求为毫秒级),回收机制无法控制,由于实时系统要求必须对消息在指定的时间作出响应,而回收机制要求挂起整个系统,同时因为回收时间较长,这个是实时系统无法接受的,过于依赖于系统运行的环境,只能运用于Java等语言开发的系统,无法运用于其它语言开发的系统;采用第三种方法,由于系统复杂,处理流程分支特别多,需要处理的异常情况也是千差万别,很容易出现在某些场景下开发人员因考虑不周导致申请了内存却没有释放,因此这种方法给开发人员带来了很大的负担,并且问题也很难得到彻底解决。
综上所述,目前缺少一种使用简单、效率高、兼容性好、人员及开发环境依赖度低、能较好运用于实时系统的资源回收方法和内存泄漏检查方法。
发明内容
本发明实施例提供了一种资源回收方法及装置和内存泄漏检查方法及装置,以高效地回收各种计算机资源,较好地解决内存泄漏问题,且使用简单、效率高、兼容性好。
本发明实施例提供了一种资源回收方法,该方法具体包括:
将过程的唯一标识通知资源回收模块;
在执行该过程时,通过资源回收模块申请所需资源,该资源回收模块记录该过程所申请的资源信息及与该资源信息对应的过程的唯一标识;
在该过程执行结束,通知资源回收模块;
所述资源回收模块查找该过程所使用的资源信息,并释放所有对应的资源。
该方法,采用基于过程的资源回收方法,使用简单、运行效率高、兼容性好,且能较好地避免资源长期未被使用而没有释放的情况,适于有资源管理的各种实时系统。
本发明实施例提供了一种资源回收装置,该装置具体包括:资源管理模块、过程管理模块和资源回收模块;
其中,过程管理模块包括:通知模块,用于将过程的唯一标识或在该过程执行结束,通知资源回收模块;申请模块,用于在执行该过程中,通过资源回收模块向资源管理模块申请所需的资源;
其中,资源回收模块包括:记录模块,用于记录该过程所申请的资源信息及与该资源信息对应的过程的唯一标识;释放模块,用于查找该过程中所使用的资源信息,并释放所有对应的资源。
该装置,采用基于过程的资源回收机制,使用简单、运行效率高、兼容性好,且能较好地避免资源长期未被使用而没有释放的情况,适于有资源管理的各种实时系统。
本发明实施例提供了一种内存泄漏检查方法,该方法具体包括:
将过程的唯一标识通知内存回收模块;
在执行所述过程中,通过内存回收模块申请所需的内存,该内存回收模块记录该过程所申请的内存信息及与该内存信息对应的过程的唯一标识,且该过程主动释放已经使用完的内存资源,并将释放的内存信息通知内存回收模块;
在该过程执行结束,通知内存回收模块;
所述内存回收模块根据该过程的唯一标识查找出该过程还没有释放的内存,所述还没有释放的内存即为泄漏的内存。
该方法,采用基于过程的机制查找泄漏的内存,能完全地发现内存泄漏问题,也可以较好地回收查找到的泄漏的内存,同时,该方法使用简单、运行效率高、兼容性好,且适合实时系统。
本发明实施例提供了一种内存泄漏检查装置,该装置具体包括:内存管理模块、过程管理模块和内存回收模块;
其中,过程管理模块包括:通知模块,用于将过程的唯一标识通知内存回收模块和在该过程执行结束,通知内存回收模块;申请模块,用于在执行该过程中,通过内存回收模块向内存管理模块申请所需的内存;主动释放模块,用于主动释放已经使用完的内存资源;
其中,内存回收模块包括:记录模块,用于记录该过程所申请的内存信息及与该内存信息对应的过程的唯一标识和主动释放的内存信息;查找模块,用于查找出该过程还没有释放的内存。
该装置,采用基于过程的内存回收机制,在回收资源时,不需要扫描全系统的内存使用情况,运行效率高;可以兼容所有的内存分配算法,兼容性好;能完全地解决内存泄漏问题,同时可以避免重复释放内存的问题和其它常见的内存问题。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1为本发明资源回收方法实施例的流程图;
图2为本发明资源回收方法另一实施例的流程图;
图3为本发明资源回收装置实施例的结构示意图;
图4为本发明内存泄漏检查方法实施例的流程图;
图5为本发明内存泄漏检查装置实施例的结构示意图。
具体实施方式
如图1所示,为本发明资源回收方法实施例的流程图,该方法具体包括:
步骤101、将过程的唯一标识通知资源回收模块;
在该步骤之前还可以包括:在首次创建过程时,为该过程分配唯一的标识,且通过向资源回收模块注册过程标识来将该过程的标识通知资源回收模块,上述过程是一个通用的概念,包括所有具有开始、结束的处理流程,例如一次呼叫、链路或数据的一次连接使用、一次事务处理、一次会话等等,上述唯一标识可以是过程名等信息,只要保证在全系统内唯一即可;
步骤102、在执行该过程时,通过资源回收模块申请所需资源,该资源回收模块记录该过程所申请的资源信息及与该资源信息对应的过程的唯一标识;
在执行该过程时,通过资源回收模块向资源管理模块申请所需资源,该资源回收模块记录该过程所申请的资源信息及该过程的唯一标识,并将二者关联起来,上述资源信息包括资源的大小、资源的类型等信息;
步骤103、在该过程执行结束,通知资源回收模块;
步骤104、资源回收模块查找该过程所使用的资源信息,并释放所有对应的资源。
当资源回收模块获知该过程结束时,根据该过程的唯一标识查找该过程所使用的资源信息,并释放对应的资源。
另外,上述实施例中的资源可以为各种计算机资源,如内存、硬盘、带宽或句柄等。
上述方法,采用基于过程的资源回收方法,在每个过程结束后,统一释放资源,可以避免过早地释放资源而造成访问无效的问题,也可以避免同一资源释放多次的问题,由于每次过程执行结束后都会自动释放资源,所有资源的回收时机是受控的,很适合实时系统,同时,该方法是基于过程的资源管理,资源回收效率很高,且使用简单。
如图2所示,本发明资源回收方法另一实施例的流程图,该方法具体包括:
步骤201、将过程的唯一标识通知内存回收模块;
在步骤201之前还可以包括:在首次创建过程时,为该过程分配唯一的标识,且通过向内存回收模块注册过程标识来将该过程的标识通知内存回收模块;
步骤202、在执行该过程中,通过内存回收模块申请所需的内存,该内存回收模块记录该过程所申请的内存信息;
在执行该过程时,通过内存回收模块向内存管理模块申请所需资源,该内存回收模块记录该过程所申请的内存信息,上述内存信息包括内存地址、内存大小、对应的过程唯一标识等信息,另外,关于管理申请的内存和过程唯一标识的对应关系,可以根据系统的需要,采用不同的数据结构,以减少存储容量和提高查找效率;
步骤203、在该过程执行结束,通知内存回收模块;
步骤204、内存回收模块查找该过程所使用的内存信息,并释放所有对应的内存。
当内存回收模块获知该过程结束时,根据该过程的唯一标识查找该过程所使用的内存信息,并释放对应的内存。
该方法是由系统负责内存的管理与释放,不会出现内存长期未被使用而没有释放的情况,因而可以避免内存泄漏问题的出现;基于过程的内存管理,不需要扫描全系统的内存,大大提高了内存回收的效率;同时,该方法可以兼容所有的内存分配算法,兼容性好;可以避免重复释放内存的问题和其它常见的内存问题,且使用简单。
如图3所示,为本发明资源回收装置实施例的结构示意图,该装置具体包括:过程管理模块11、资源回收模块12和资源管理模块13,其中,上述过程管理模块11包括:通知模块111,用于将过程的唯一标识或在该过程执行结束,通知资源回收模块;申请模块112,用于在执行该过程中,通过资源回收模块向资源管理模块申请所需的资源。上述资源回收模块12包括:记录模块121,用于记录该过程的唯一标识及与该唯一标识对应的过程所申请的资源信息;释放模块122,用于查找该过程中所使用的资源信息,并释放所有对应的资源。
另外,上述过程管理模块还包括:分配模块,用于在创建过程时,为该过程分配唯一的标识;上述资源可以为各种计算机资源,如内存、硬盘、带宽或句柄等。
上述装置利用过程管理模块中的通知模块将过程的唯一标识发送给资源管理模块的记录模块,然后利用过程管理模块中的申请模块通过资源回收模块向资源管理模块申请所需的资源,同时,资源回收模块中的记录模块记录该过程申请的资源信息,并将二者关联起来,当该过程执行结束时,利用过程管理模块中的通知模块通知资源管理模块中的释放模块,释放模块根据该过程的唯一标识从记录模块记录的信息中查找该过程所使用的资源信息,并释放所有对应的资源。
上述装置,采用基于过程的资源回收机制,使用简单、运行效率高、兼容性好,且能较好地避免资源长期未被使用而没有释放的情况,适于有资源管理的各种实时系统。
如图4所示,为本发明内存泄漏检查方法实施例的流程图,该方法具体包括:
步骤301、将过程的唯一标识通知内存回收模块;
步骤302、在执行该过程中,通过内存回收模块申请所需的内存,该内存回收模块记录该过程所申请的内存信息;
上述步骤301和步骤302与内存回收方法实施例中的步骤201和步骤202的操作一样;
步骤303、在执行该过程中,该过程主动释放已经使用完的内存资源;
该方法与内存回收方法实施例的最大区别之一就在于该方法在执行该过程的过程中,主动释放已经使用完的内存资源;
步骤304、在该过程执行结束,通知内存回收模块;
步骤305、内存回收模块查找出该过程还没有释放的内存,上述还没有释放的内存即为泄漏的内存。
当内存回收模块获知该过程结束时,根据该过程的唯一标识查找出该过程还没有释放的内存,上述还没有释放的内存即为泄漏的内存;在发现泄漏的内存之后,可以通过主动修改该过程来消除内存泄露问题,也可以通过释放上述泄漏的内存来回收内存资源。
上述方法,采用基于过程的机制查找泄漏的内存,能完全地发现内存泄漏问题,也可以较好地回收查找到的泄漏的内存,同时,该方法使用简单、运行效率高、兼容性好,且适合实时系统。
如图5所示,为本发明内存泄漏检查装置实施例的结构示意图,该装置具体包括:过程管理模块21、内存回收模块22和内存管理模块23,其中,上述过程管理模块21包括:通知模块111,用于将过程的唯一标识或在该过程执行结束,通知内存回收模块;申请模块112,用于在执行该过程中,向内存管理模块申请所需的内存;主动释放模块211,用于主动释放已经使用完的内存资源;上述内存回收模块22包括:记录模块121,用于记录该过程的唯一标识及与该唯一标识对应的过程所申请的内存信息和主动释放的内存信息;查找模块221,用于查找出该过程还没有释放的内存。
上述过程管理模块还包括:分配模块,用于在创建过程时,为该过程分配唯一的标识;另外,当查找模块查找到还没有释放的内存时,即发现内存泄漏时,可以重新修改该过程以避免内存泄漏问题,或再次释放还没有释放完的内存,因此上述过程管理模块还可以包括:修改模块,用于修改该过程;上述内存回收模块还可以包括:释放模块,用于将还没有释放的内存释放完。
上述装置利用过程管理模块中的通知模块将过程的唯一标识发送给内存管理模块的记录模块,然后利用过程管理模块中的申请模块通过内存回收模块向内存管理模块申请所需的内存,同时,内存回收模块中的记录模块记录该过程申请的内存信息,并将二者关联起来,在执行该过程中,会主动释放已经使用完的内存,并将释放的内存信息通知记录模块,当该过程执行结束时,利用过程管理模块中的通知模块通知内存管理模块中的查找模块,查找模块根据该过程的唯一标识从记录模块记录的信息中查找出该过程还没有释放的内存,上述还没有释放的内存即为泄漏的内存,当查找模块查找到泄漏的内存后可通过修改模块修改该过程,以消除内存泄漏问题,也可以再释放泄漏的内存,以回收这些内存资源。
上述装置,采用基于过程的机制查找泄漏的内存,能完全地发现内存泄漏问题,也可以较好地回收查找到的泄漏的内存,同时,该方法使用简单、运行效率高、兼容性好,且适合实时系统。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1、一种内存泄漏检查方法,其特征在于包括:
将过程的唯一标识通知内存回收模块;
在执行所述过程中,通过内存回收模块申请所需的内存,该内存回收模块记录该过程所申请的内存信息及与该内存信息对应的过程的唯一标识,且该过程主动释放已经使用完的内存资源,并将释放的内存信息通知内存回收模块;
在该过程执行结束,通知内存回收模块;
所述内存回收模块根据该过程的唯一标识查找出该过程还没有释放的内存,所述还没有释放的内存即为泄漏的内存。
2、根据权利要求1所述的内存泄漏检查方法,其特征在于所述将过程的唯一标识通知内存回收模块之前还包括:在创建过程时,为该过程分配唯一的标识。
3、根据权利要求1或2所述的内存泄漏检查方法,其特征在于所述内存回收模块查找出该过程还没有释放的内存之后还包括:修改该过程。
4、根据权利要求1或2所述的内存泄漏检查方法,其特征在于所述内存回收模块查找出该过程还没有释放的内存之后还包括:将还没有释放的内存释放完。
5、一种内存泄漏检查装置,包括内存管理模块,其特征在于还包括:过程管理模块和内存回收模块,所述过程管理模块包括:
通知模块,用于将过程的唯一标识通知内存回收模块和在该过程执行结束,通知内存回收模块;
申请模块,用于在执行该过程中,通过内存回收模块向内存管理模块申请所需的内存;
主动释放模块,用于主动释放已经使用完的内存资源;
所述内存回收模块包括:
记录模块,用于记录该过程的唯一标识及与该唯一标识对应的过程所申请的内存信息和主动释放的内存信息;
查找模块,用于根据该过程的唯一标识查找出该过程还没有释放的内存。
6、根据权利要求5所述的内存泄漏检查装置,其特征在于所述过程管理模块还包括:分配模块,用于在创建过程时,为该过程分配唯一的标识。
7、根据权利要求5或6所述的内存泄漏检查装置,其特征在于所述过程管理模块还包括:修改模块,用于修改该过程。
8、根据权利要求5或6所述的内存泄漏检查装置,其特征在于所述内存回收模块还包括:释放模块,用于将还没有释放的内存释放完。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710179478A CN100590598C (zh) | 2007-12-13 | 2007-12-13 | 内存泄露检查方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710179478A CN100590598C (zh) | 2007-12-13 | 2007-12-13 | 内存泄露检查方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101178669A CN101178669A (zh) | 2008-05-14 |
CN100590598C true CN100590598C (zh) | 2010-02-17 |
Family
ID=39404930
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710179478A Expired - Fee Related CN100590598C (zh) | 2007-12-13 | 2007-12-13 | 内存泄露检查方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100590598C (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101414272B (zh) * | 2008-10-17 | 2011-06-08 | 上海华为技术有限公司 | 内存泄漏的检测方法和装置 |
CN103942077B (zh) * | 2014-04-15 | 2018-06-15 | 清华大学 | 一种驱动资源回收分析方法 |
CN105224469A (zh) * | 2014-06-16 | 2016-01-06 | 陈宏达 | 主动式内存管理方式 |
CN108536537B (zh) * | 2018-03-29 | 2019-05-28 | 北京白山耘科技有限公司 | 一种进程资源回收方法及装置 |
CN109144902A (zh) * | 2018-07-10 | 2019-01-04 | 北京佳讯飞鸿电气股份有限公司 | 内存的申请使用方法及装置 |
CN110442404B (zh) * | 2019-08-13 | 2022-07-05 | 武汉斗鱼鱼乐网络科技有限公司 | 一种对象释放方法、装置、设备和存储介质 |
CN110688217A (zh) * | 2019-09-04 | 2020-01-14 | 广东浪潮大数据研究有限公司 | 资源释放方法及装置 |
CN113326120B (zh) * | 2020-02-29 | 2023-12-26 | 杭州迪普科技股份有限公司 | 管理内存的装置和方法 |
CN113626181B (zh) * | 2021-06-30 | 2023-07-25 | 苏州浪潮智能科技有限公司 | 一种内存清理方法、装置、设备及可读存储介质 |
CN114679393B (zh) * | 2022-05-30 | 2022-09-09 | 凯睿星通信息科技(南京)股份有限公司 | 基于流量分析的卫星互联网带宽控制方法、系统及装置 |
-
2007
- 2007-12-13 CN CN200710179478A patent/CN100590598C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101178669A (zh) | 2008-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100590598C (zh) | 内存泄露检查方法及装置 | |
US9213623B2 (en) | Memory allocation with identification of requesting loadable kernel module | |
US8656412B2 (en) | Pipeline across isolated computing environments | |
US8336033B2 (en) | Method and system for generating a hierarchical tree representing stack traces | |
US7467278B2 (en) | Memory tuning for garbage collection and central processing (CPU) utilization optimization | |
US20150269196A1 (en) | Managing object lifetime in a cyclic graph | |
US20090307292A1 (en) | Dynamically changing a garbage collector in a managed runtime system | |
CN101373450B (zh) | 处理cpu异常的方法及系统 | |
US9396014B2 (en) | Data swap in virtual machine environment | |
US10521149B2 (en) | Memory poisoning support for free page hinting | |
KR101401523B1 (ko) | 복수의 가상 머신들 간 조립 공유 gpu 스케줄링 방법 및 장치 | |
US20170351606A1 (en) | Persistent memory garbage collection | |
CN106528071B (zh) | 目标代码的选取方法及装置 | |
WO1999000733A1 (en) | Method and apparatus for managing hashed objects | |
CN106557427B (zh) | 共享内存数据库的内存管理方法及装置 | |
US10031843B2 (en) | Managing memory in a computer system | |
CN105022678A (zh) | 虚拟机数据备份的方法和装置 | |
US7991807B2 (en) | Method and system for garbage collection | |
CN100571160C (zh) | 软件升级方法和装置、以及网元 | |
CN103914355A (zh) | 对内存重复释放进行定位的方法和装置 | |
US20110238713A1 (en) | Per thread garbage collection | |
US20090150465A1 (en) | Object Deallocation System and Method | |
US20140317609A1 (en) | Automatic reference counting | |
US20060161913A1 (en) | Method and apparatus for marking code for data versioning | |
US20100262954A1 (en) | Method for Locating Resource Leaks during Software Development |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100217 Termination date: 20131213 |