内存缓存对象自动管理方法技术

技术编号:14874749 阅读:54 留言:0更新日期:2017-03-23 22:28
本发明专利技术公开了一种内存缓存对象自动管理方法,包括如下步骤:对于放入内存缓存的对象,将该对象同时放入强引用队列和弱引用队列中,当访问该对象时,首先寻找强引用队列中是否有该对象,如有,则返回,如没有,继续寻找弱引用队列中是否有该对象,如在该弱引用队列中找到该对象,则将该对象由该弱引用队列中加入到该强引用队列中,如在该弱引用队列中未找到该对象,则创建该对象并将其缓存至该强引用队列中。依照,本发明专利技术的方法,同一时间只有一个对象存在内存中,避免对象的重复创建。本发明专利技术提供一种内存的自动回收机制,不需要外部主动释放对象。本发明专利技术通过监控弱引用队列,可以发现内存泄露的对象。

【技术实现步骤摘要】

本专利技术属于自动管理
,涉及一种内存缓存对象自动管理方法
技术介绍
内存泄漏(memoryleak)是指某些对象在生命周期结束的时候没有被回收,仍然占用内存。内存泄露是应用开发过程中比较常见的问题,严重的泄露会大量消耗内存,对应用本身的体验也会造成极大影响,甚至触发OOM(内存溢出,即内存占用量超过所分配的最大值)等异常行为。对于基于对象回收的语言来说,对于单例对象来说,一般都常驻内存,这有时会导致内存泄漏。
技术实现思路
本专利技术的一个目的是解决至少上述问题和/或缺陷,并提供至少后面将说明的优点。本专利技术还有一个目的是提供一种内存缓存对象自动管理方法。为此,本专利技术提供的技术方案为:一种内存缓存对象自动管理方法,包括:对于放入内存缓存的对象,将该对象同时放入强引用队列和弱引用队列中,当访问该对象时,首先寻找强引用队列中是否有该对象,如有,则返回,如没有,继续寻找弱引用队列中是否有该对象,如在该弱引用队列中找到该对象,则将该对象由该弱引用队列中加入到该强引用队列中,如在该弱引用队列中未找到该对象,则创建该对象并将其缓存至该强引用队列中。优选的是,所述的内存缓存对象自动管理方法中,在找到该对象或创建该对象时,把该对象的访问时间设置为当前时间。优选的是,所述的内存缓存对象自动管理方法,还包括:每隔一定时间还对该对象的访问时间进行一次检查,若检测到该对象的访问时间超过预设阈值,则将该对象从该强引用队列中移出。优选的是,所述的内存缓存对象自动管理方法,还包括:若该对象存在于不只一个强引用队列中,则其他的强引用序列及弱引用队列中的该对象不会释放。优选的是,所述的内存缓存对象自动管理方法中,所述一定时间为10s。优选的是,所述的内存缓存对象自动管理方法,还包括:为每个对象分别配置一唯一的标识符,当该对象进入弱引用队列时,建立该弱引用队列与该每个对象的标识符之间的映射关系,当该对象响应于内存回收的通知时,根据该对象的标识符找到弱引用队列与该每个对象的标识符之间的映射关系,确定该被回收的对象的内存访问事件;删除该被回收的对象的内存访问事件。本专利技术至少包括以下有益效果:1.同一时间只有一个对象存在内存中,避免对象的重复创建。2.提供一种内存的自动回收机制,不需要外部主动释放对象。3.通过监控弱引用队列,可以发现内存泄露的对象。本专利技术的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本专利技术的研究和实践而为本领域的技术人员所理解。附图说明图1为本专利技术其中一个实施例中的内存缓存的流程示意图;图2为本专利技术其中一个实施例中的内存缓存对象自动管理方法的流程示意图;图3为本专利技术其中一个实施例中的内存缓存对象自动管理方法的流程示意图图4为本专利技术其中一个实施例中的对象被访问时的示意图。具体实施方式下面结合附图对本专利技术做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。应当理解,本文所使用的诸如“具有”、“包含”以及“包括”术语并不配出一个或多个其它元件或其组合的存在或添加。如图1所示,本专利技术提供一种内存缓存对象自动管理方法,包括如下步骤:对于放入内存缓存的对象,将该对象同时放入强引用队列和弱引用队列中,当访问该对象时,首先寻找强引用队列中是否有该对象,如有,则返回,如没有,继续寻找弱引用队列中是否有该对象,如在该弱引用队列中找到该对象,则将该对象由该弱引用队列中加入到该强引用队列中,如在该弱引用队列中未找到该对象,则创建该对象并将其缓存至该强引用队列中。在上述方案中,作为优选,在找到该对象或创建该对象时,把该对象的访问时间设置为当前时间。在上述方案中,作为优选,还包括:每隔一定时间还对该对象的访问时间进行一次检查,若检测到该对象的访问时间超过预设阈值,则将该对象从该强引用队列中移出。在上述方案中,作为优选,还包括:若该对象存在于不只一个强引用队列中,则其他的强引用序列及弱引用队列中的该对象不会释放。在上述方案中,作为优选,所述一定时间为10s。在本专利技术的其中一个实施例中,作为优选,还包括:为每个对象分别配置一唯一的标识符,当该对象进入弱引用队列时,建立该弱引用队列与该每个对象的标识符之间的映射关系,当该对象响应于内存回收的通知时,根据该对象的标识符找到弱引用队列与该每个对象的标识符之间的映射关系,确定该被回收的对象的内存访问事件;删除该被回收的对象的内存访问事件。这样,可快速对缓存对象进行彻底的回收,以释放内存。在本专利技术的其中一个实施例中,如图1~4所示,一种内存缓存对象的机制管理方法,包括:1、对于放入内存缓存的对象,除了放入强引用外,还将该对象放入弱引用队列。2、当访问该对象时,首先寻找强引用队列中是否有该对象,有则返回,同时更新该对象的访问时间为当前时间,没有就继续寻找弱引用队列,找到就由弱引用队列中加入到强引用队列中,同时记录最近访问时间。如果弱引用队列中没有,就创建对象并重新放入强引用队列中,并把对象的访问时间设置为当前时间。3、启动一个循环,每10s启动做一次检查,检查访问时间超过阈值的对象,并由强引用队列中去掉。如果对象有除了强引用队列外其他的强引用,弱应用队列中的对象也不会释放。如图4所示,内存管理框架内不引用,外部对对象有引用,该对象也释放不了,只要释放不了,弱引用就可以访问到。这里说明的模块数量和处理规模是用来简化本专利技术的说明的。对本专利技术的内存缓存对象自动管理方法的应用、修改和变化对本领域的技术人员来说是显而易见的。尽管本专利技术的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本专利技术的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本专利技术并不限于特定的细节和这里示出与描述的图例。本文档来自技高网...
内存缓存对象自动管理方法

【技术保护点】
一种内存缓存对象自动管理方法,其特征在于,包括如下步骤:对于放入内存缓存的对象,将该对象同时放入强引用队列和弱引用队列中,当访问该对象时,首先寻找强引用队列中是否有该对象,如有,则返回,如没有,继续寻找弱引用队列中是否有该对象,如在该弱引用队列中找到该对象,则将该对象由该弱引用队列中加入到该强引用队列中,如在该弱引用队列中未找到该对象,则创建该对象并将其缓存至该强引用队列中。

【技术特征摘要】
1.一种内存缓存对象自动管理方法,其特征在于,包括如下步骤:对于放入内存缓存的对象,将该对象同时放入强引用队列和弱引用队列中,当访问该对象时,首先寻找强引用队列中是否有该对象,如有,则返回,如没有,继续寻找弱引用队列中是否有该对象,如在该弱引用队列中找到该对象,则将该对象由该弱引用队列中加入到该强引用队列中,如在该弱引用队列中未找到该对象,则创建该对象并将其缓存至该强引用队列中。2.如权利要求1所述的内存缓存对象自动管理方法,其特征在于,在找到该对象或创建该对象时,把该对象的访问时间设置为当前时间。3.如权利要求2所述的内存缓存对象自动管理方法,其特征在于,还包括:每隔一定时间还对该对象的访问时间进行一次检查,若检测到该对象的...

【专利技术属性】
技术研发人员:张楠
申请(专利权)人:北京金和网络股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1