CN115934302A - 一种内存泄漏处理方法及电子设备 - Google Patents
一种内存泄漏处理方法及电子设备 Download PDFInfo
- Publication number
- CN115934302A CN115934302A CN202110886939.2A CN202110886939A CN115934302A CN 115934302 A CN115934302 A CN 115934302A CN 202110886939 A CN202110886939 A CN 202110886939A CN 115934302 A CN115934302 A CN 115934302A
- Authority
- CN
- China
- Prior art keywords
- memory
- leak
- storage area
- temporary storage
- rate
- 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
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请实施例提供一种内存泄漏处理方法及电子设备,涉及终端技术领域,可以增加电子设备的内存可用量,以提高电子设备的使用性能。电子设备包括至少一个进程,至少一个进程包括第一进程,包括:若确定内存满足第一预设条件,则获取第一进程对应的内存数据;满足第一预设条件包括第一进程存在内存泄漏;将第一进程对应的内存数据转存至暂存区域;其中,暂存区域为内存以外的存储区域。
Description
技术领域
本申请涉及终端技术领域,尤其涉及一种内存泄漏处理方法及电子设备。
背景技术
随着电子设备的发展,各类应用(application,APP)层出不穷,使得用户可以在电子设备上通过应用处理很多事情,为用户提供了方便。但是,应用申请了对应的内存之后,长时间占据不使用,也不进行释放,则将导致整个系统内存存量持续不足、影响系统运行的问题,存在内存泄漏问题严重这一现象。这样一来,将会导致用户在使用应用的过程中产生卡顿等性能问题,从而影响整个电子设备的使用性能。
然而,相关技术中,在检测到电子设备中存在内存泄漏的应用后,如何进行处理是一个需要解决的重要问题。
发明内容
本申请实施例提供了一种内存泄漏处理方法及电子设备,通过将存在内存泄漏的应用的进程对应的内存数据换出到Swap分区或外存等内存以外的其他位置,可以使得电子设备的内存量充足,从而能够提高电子设备的使用性能。
为达到上述目的,本申请采用如下技术方案:
一方面,本申请实施例提供一种内存泄漏处理方法,应用于电子设备,电子设备包括至少一个进程,至少一个进程包括第一进程,方法包括:若确定内存满足第一预设条件,则获取第一进程对应的内存数据;满足第一预设条件包括所述第一进程存在内存泄漏;将第一进程对应的内存数据转存至暂存区域;其中,暂存区域为内存以外的存储区域。
由此,在确定第一进程存在内存泄漏后,将第一进程的内存数据转存出内存,提高了电子设备的内存存储空间,从而能够提高电子设备的使用性能。
在一种可能的实现方式中,满足第一预设条件包括:系统的可用存储量、暂存区域的可用存储量以及第一进程的内存占用率中至少一个满足第一预设条件。
由此,在确定第一进程存在内存泄漏后,确定满足上述第一预设条件时,将第一进程的内存数据转存至暂存区域,提高了电子设备的内存存储空间,从而能够提高电子设备的使用性能。
在另一种可能的实现方式中,满足第一预设条件包括:系统的可用存储量小于或等于第一存储量阈值。
由此,确定当前系统的可用存储量较小,将会影响电子设备的使用性能时,将第一进程的内存数据转存至暂存区域,提高了电子设备的系统的可用存储量。
在另一种可能的实现方式中,满足第一预设条件还包括:暂存区域的可用存储量大于第二存储量阈值和/或占用率小于占用率阈值。
由此,确定暂存区域有足够的空间用于存储第一进程的内存数据和/或第一进程的内存占用率较低时,将第一进程的内存数据转存至暂存区域,在保证电子设备正常运行的情况下,提高电子设备的使用性能。
在另一种可能的实现方式中,方法还包括:若系统的可用存储量大于第一存储量阈值或暂存区域的可用存储量小于或等于第二存储量阈值或占用率大于或等于占用率阈值,则上报未对第一进程对应的内存数据进行转存的状态。
由此,在不满足第一预设条件的情况下,不将第一进程对应的内存数据进行转存,以确保电子设备正常运行。
在另一种可能的实现方式中,将第一进程对应的内存数据转存至暂存区域,包括:获取第一进程的内存信息;其中,内存信息包括内存获取时间及对应的内存占用量;根据第一进程的内存泄漏速率和/或内存占用量,确定第一进程对应的内存数据的内存量;其中,内存泄漏速率是根据内存获取时间及对应的内存占用量确定的;以单位内存量为存储单元对第一进程对应的内存数据进行转存,直至存储至暂存区域的第一进程对应的内存数据的数据量大于或等于内存数据的内存量。
由此,通过批量转存第一进程对应的内存数据,有利于提高数据转存的效率。
在另一种可能的实现方式中,内存数据包括匿名页,将第一进程对应的内存数据转存至暂存区域,包括:按照匿名页的优先级顺序,将匿名页转存至暂存区域;其中,优先级顺序为预设时长内未被调用的匿名页的优先级高于最先添加至二次回收链表的匿名页的优先级,最先添加至二次回收链表的匿名页的优先级高于未被多个进程同时调用的匿名页的优先级。
由此,根据匿名页的优先级顺序将匿名页转存,优先转存长时间未被调用的匿名页,使得电子设备能够正常运行。
在另一种可能的实现方式中,在将第一进程对应的内存数据转存至暂存区域之后,方法还包括:将第一进程对应的内存数据从暂存区域转存至内存。
由此,在确定存储在暂存区域的第一进程对应的内存数据再次被调用时,将第一进程对应的内存数据从暂存区域转存至内存,从而使得电子设备的正常运行。
在另一种可能的实现方式中,将第一进程对应的内存数据从暂存区域转存至内存,包括:若第一进程对应的内存数据被调用,则查询内存地址表以获取内存数据在暂存区域的第二存储地址;其中,内存地址表中记录了内存数据在内存的第一存储地址与暂存区域的第二存储地址之间的对应关系;从第二存储地址中获取内存数据后,将内存数据转存至内存的存储区域。其中,内存的存储区域可以为第一存储地址对应的存储区域,也可以不是第一存储地址对应的存储区域,在此不做限定。
由此,在存储至暂存区域的内存数据再次被调用时,通过将内存数据从暂存区域转存至内存的存储区域中,使得电子设备能够正常运行。
在另一种可能的实现方式中,将第一进程对应的内存数据转存至暂存区域之前,还包括:对第一进程对应的内存数据进行数据压缩。由此,通过对转存至暂存区域的内存数据进行压缩,以减少占用暂存区域的存储空间。
在另一种可能的实现方式中,从第二存储地址中获取内存数据后,将内存数据转存至内存的存储区域,包括:对从第二存储地址中获取到的内存数据进行解压缩;将解压缩后的内存数据转存至内存的存储区域。由此,若暂存区域中存储的内存数据进行了数据压缩,在将内存数据转存至内存之前,对内存数据进行解压缩,以获取到第一进程的内存数据。
在另一种可能的实现方式中,在将第一进程对应的内存数据转存至暂存区域之后,方法还包括:获取暂存区域的可用存储量;若暂存区域的可用存储量小于或等于第三存储量阈值,则将暂存区域中存储的内存数据转存至缓冲区。
由此,在暂存区域的可用存储量较小时,对暂存区域中存储的数据进行二次转存,可以释放暂存区域的存储空间,以提高暂存区域的可用存储量。
在另一种可能的实现方式中,将第一进程对应的内存数据转存至暂存区域之前,还包括:显示提示信息;其中,提示信息用于提示用户是否将第一进程对应的内存数据转出内存。
由此,通过在电子设备的显示界面提示用户是否对存在内存泄漏的进程进行处理,以便用户根据提示进行相应处理,避免了电子设备出现内存不足或卡顿等性能问题。
在另一种可能的实现方式中,至少一个进程还包括第二进程,确定内存满足第一预设条件,满足第一预设条件包括第一进程存在内存泄漏,包括:获取第一进程对应的第一内存信息以及第二进程对应的第二内存信息;根据第一进程对应的第一内存信息以及第二进程对应的第二内存信息,确定第一进程符合第二预设条件以及第二进程不符合第二预设条件;获取第一进程对应的第三内存信息;根据第一进程对应的第三内存信息,确定第一进程存在内存泄漏。
由此,可以首先确定电子设备中可能存在内存泄漏的第一进程后,根据第一进程对应的内存信息,确定第一进程存在内存泄漏,能够准确的检测出存在内存泄漏的进程,以便可以针对存在内存泄漏的进程进行相应的处理,提高了电子设备的使用性能。
在另一种可能的实现方式中,第一内存信息包括第一内存获取时间及对应的第一内存占用量,确定第一进程符合第二预设条件,包括:根据第一进程的第一内存增加速率和/或第一内存总占用量,确定第一进程符合第二预设条件;其中,第一内存增加速率是根据第一进程的至少两个第一内存获取时间及对应的第一内存占用量确定的;第一内存总占用量是根据第一内存占用量确定的。
由此,通过第一进程的第一内存增加速率和/或第一内存总占用量,确定第一进程存在内存泄漏,能够准确的检测出电子设备中可能存在内存泄漏的进程。
在另一种可能的实现方式中,根据第一进程的第一内存增加速率和/或第一内存总占用量,确定第一进程符合第二预设条件,包括:若第一进程的第一内存增加速率大于第一速率阈值和/或第一内存总占用量大于占用量阈值,则确定第一进程符合第二预设条件。
由此,通过将内存增加速率过大和/或内存总占用量较多的进程确定为可能存在内存泄漏的进程,能够准确的检测出电子设备中可能存在内存泄漏的进程。
在另一种可能的实现方式中,第三内存信息包括第二内存获取时间及对应的第二内存占用量,根据第一进程对应的第三内存信息,确定第一进程存在内存泄漏,包括:根据第一进程的第二内存增加速率、平均内存增加速率和第二内存总占用量中至少一个,确定第一进程存在内存泄漏;其中,第二内存增加速率是根据第一进程的至少两个第二内存获取时间及对应的第二内存占用量确定的;平均内存增加速率是根据至少一个第二内存增加速率确定的;第二内存总占用量是根据第二内存占用量确定的。
由此,通过第一进程的内存增加速率和/或内存总占用量,能够准确的确定出第一进程存在内存泄漏。
在另一种可能的实现方式中,根据第一进程的第二内存增加速率、平均内存增加速率和第二内存总占用量中至少一个,确定第一进程存在内存泄漏,包括:若第一进程的平均内存增加速率大于或等于第二速率阈值,则确定第一进程存在内存泄漏。
由此,将持续在短时间内申请了大量的内存的第一进程确定存在内存泄漏,能够准确的确定出第一进程存在内存泄漏。
在另一种可能的实现方式中,根据第一进程的第二内存增加速率、平均内存增加速率和第二内存总占用量中至少一个,确定第一进程存在内存泄漏,还包括:若第一进程的平均内存增加速率小于第二速率阈值,且第二内存增加速率的个数大于第一个数阈值,且连续预设个数的第二内存增加速率均大于第三速率阈值,则确定第一进程存在内存泄漏;其中,第三速率阈值小于第二速率阈值。
由此,通过确定第一进程虽然未在短时间内申请了大量的内存,但是该第一进程持续向系统申请内存,并且申请的内存数量在持续增长,实现了准确的确定出第一进程存在内存泄漏。
在另一种可能的实现方式中,根据第一进程的第二内存增加速率、平均内存增加速率和第二内存总占用量中至少一个,确定第一进程存在内存泄漏,还包括:若第一进程的平均内存增加速率小于第二速率阈值,且第二内存增加速率的个数大于第一个数阈值,且连续预设个数的第二内存增加速率中存在至少一个小于第三速率阈值,且第二内存总占用量大于内存阈值,则确定第一进程存在内存泄漏。
由此,通过确定第一进程虽然并未在短时间内申请大量的内存,但是该第一进程持续向系统申请内存,并且申请的内存总量较大,也实现了准确的确定出第一进程存在内存泄漏。
另一方面,本申请提供一种电子设备,包括:内存回收模块,用于确定第一进程存在内存泄漏且满足第一预设条件,则获取第一进程对应的内存数据;将第一进程对应的内存数据转存至暂存区域;其中,暂存区域为内存以外的存储区域。
又一方面,本申请提供一种电子设备,包括:存储器、显示屏和一个或多个处理器;存储器、显示屏与处理器耦合。其中,存储器用于存储计算机程序代码,计算机程序代码包括计算机指令;当电子设备运行时,该处理器用于执行该存储器存储的一个或多个计算机指令,以使电子设备执行如上述一方面中任一项的内存泄漏处理方法。
又一方面,本申请提供一种计算机存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行如上述一方面中任一项的内存泄漏处理方法。
又一方面,本申请提供一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行如上述一方面中任一项的内存泄漏处理方法。
可以理解地,上述提供的电子设备、计算机存储介质,以及计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
附图说明
图1为本申请实施例提供的内存泄漏的应用场景的示例图一;
图2为本申请实施例提供的内存泄漏的应用场景的示例图二;
图3为本申请实施例提供的电子设备的一种结构示意图;
图4为本申请实施例提供的电子设备的一种软件结构图;
图5为本申请实施例提供的内存泄漏处理方法的应用场景的示例图一;
图6为本申请实施例提供的一种内存泄漏处理方法的流程示例图一;
图7为本申请实施例提供的一种内存泄漏处理方法的流程示例图二;
图8为本申请实施例提供的一种接口调用的示例图;
图9A为本申请实施例提供的内存泄漏处理方法的应用场景的示例图二;
图9B为本申请实施例提供的内存泄漏处理方法的应用场景的示例图三;
图10为本申请实施例提供的内存换入的流程示例图;
图11为本申请实施例提供的内存泄漏处理方法的应用场景的示例图四;
图12为本申请实施例提供的电子设备的另一种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在描述本申请实施例之前,先对本申请涉及到的名词进行解释。
内存:又称为内部存储器,是指中央处理器(central processing unit/Processor,CPU)能直接寻址的存储空间,具有存取速率快的优点。内存包括随机存储器(random access memory,RAM)、只读存储器(read only memory image,ROM)和高级缓存存储器(Cache memory,Cache)。
外存:又称为外部存储器,是指除电子设备内存及CPU缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U盘等。
内存压缩:是指将内存页进行压缩,从而释放内存空间的行为。比如系统在内存占用率过高的时候,将大量调用量较低或暂时不用的内存页进行压缩,从而释放内存空间。例如,假设内存页A原本占用1G的内存,经过内存压缩后,该内存页仅占用500M内存,从而释放了部分内存空间,节约了系统的内存。
Swap分区:又称为交换分区,是指在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap空间。Swap分区可以为虚拟内存的部分区域,也可以为外存的部分区域,在此不做限定。
页面:是指把内存空间按页的大小划分成片或者页面。一个页面可以对应多个内存段,根据内存管理机制不同,最小的段可以为8K至128K不等。
示例性的,假设一个页面的内存页为0001,该页面可以包括多个内存段,如0x0001、0x0002和0x0003,等等。
目前,电子设备中的应用在短时间内申请了内存后,在使用完毕或者应用进入后台后,已经不需要这些内存了。但是,该应用并未对申请的内存进行释放,依旧占用这些内存,导致应用出现内存泄漏的情况。此时,电子设备中其他的应用启动时,导致可用内存不足或卡顿等性能问题。
示例性的,如图1所示,为内存泄漏的应用场景的示例图。假设图1中电子设备的最大可用内存为8G,在启动腾讯的时候,腾讯短时间(例如3分钟)内向系统申请了高达5G的内存,此时,电子设备的可用内存还剩3G。在腾讯使用完毕或者进入后台后,已经不需要高达5G的内存。但是,腾讯依旧长时间占用这些内存,不使用也不进行释放。此时,腾讯出现了内存泄漏。在电子设备中其他应用被启动之后,电子设备可能存在可用内存不足的情况。如图1中,用户启动了腾讯之后,又启动了 和在启动的时候向系统申请了1G内存,在启动的时候向系统申请了2G内存。此时,电子设备已经启动的应用有腾讯和其中,腾讯占用了电子设备的5G内存,占用了电子设备的1G内存,占用了电子设备的2G内存。这种情况下,电子设备中已经启动的应用一共占用了8G的内存,电子设备的可用内存为0G,从而导致电子设备的可用内存不足,和或其他新启动的应用在运行过程中可能出现卡顿等性能问题。
相关技术中,在检测到电子设备中存在内存泄漏的应用后,传统的处理方法大多是直接释放应用长期占用的内存。但是,应用的内存被释放后,系统并不知道该应用占用的内存已经被释放,导致应用再次调用该内存时存在应用寻址发生错误的情况。这种情况下,不仅会导致数据的丢失,还会影响电子设备的正常使用。
示例性的,如图2所示,电子设备中的腾讯发生内存泄漏后,腾讯直接释放了2G的内存。腾讯释放2G内存后,系统并不知道该2G内存已经被释放了,腾讯再次调用内存时,若直接调用已经释放的2G内存,会出现寻址错误,影响腾讯正常运行的情况。
本申请实施例提供一种内存泄漏处理方法,该方法通过将存在内存泄漏的应用的进程对应的内存数据转存到Swap分区或外存等内存以外的其他位置,在该部分内存数据再次被调用时,再将该部分内存数据转存到内存。其中,应用可以是系统应用,也可以是第三方应用(例如第三方应用可以为用户在电子设备的应用商店,或者在应用市场下载的应用)。该方法可以对存在内存泄漏的进程的内存进行恢复,避免了存在内存泄漏的应用无法正常运行,有利于提高电子设备的使用性能。
示例性的,本申请实施例提供内存泄漏处理方法可应用于手机、平板电脑、个人计算机(personal computer,PC)、个人数字助理(personal digital assistant,PDA)、智能手表、上网本、可穿戴电子设备、增强现实技术(augmented reality,AR)设备、虚拟现实(virtual reality,VR)设备、车载设备、智能汽车、智能音响等具有显示屏的电子设备,本申请实施例对此不做任何限制。
示例性的,图3为本申请实施例提供的电子设备100的一种结构示意图。如图3所示,电子设备100可以包括:处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
ISP用于处理摄像头193反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将电信号传递给ISP处理,转化为肉眼可见的图像。ISP还可以对图像的噪点,亮度,肤色进行算法优化。ISP还可以对拍摄场景的曝光,色温等参数优化。在一些实施例中,ISP可以设置在摄像头193中。
摄像头193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给ISP转换成数字图像信号。ISP将数字图像信号输出到DSP加工处理。DSP将数字图像信号转换成标准的RGB,YUV等格式的图像信号。在一些实施例中,电子设备100可以包括1个或N个摄像头193,N为大于1的正整数。
数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
NPU为神经网络(neural-network,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备100的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
内部存储器121也可以称为内存,内存用于系统运行时存储信息。在本申请实施例中,用户启动电子设备中的应用时,应用会向系统申请相应的内存。应用向系统申请了内存后,确定应用存在内存泄漏后,系统可以将应用的部分内存数据转存到暂存区域中。例如,在用户启动的时候,会向系统申请3G的内存;在用户启动的时候,会向系统申请1.5G的内存,等等。假设系统确定存在内存泄漏,则可以将的部分内存转存到暂存区域。
需要解释的是,上述应用启动时向系统申请的内存量仅作为示例性表述,应用启动时申请的内存量以实际情况而定,在此不做限定。
在本申请实施例中,处理器110通过运行存储在内部存储器121的指令,可以先将存在内存泄漏的应用的内存数据转存到Swap分区或外存等内存以外的其他位置,以释放应用的内存空间。在应用再次调用该部分内存数据时,再将该部分内存数据转存到电子设备的内存。由此,通过对存在内存泄漏的应用的内存进行恢复,以便应用再次调用该部分内存数据时能够正常运行。
电子设备的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本发明实施例以分层架构的Android系统为例,示例性说明电子设备100的软件结构。
图4为本申请实施例提供的电子设备的一种软件结构图。
可以理解的是,分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,Android系统可以包括应用程序层(简称为应用层)、应用程序框架层(简称为框架层)、安卓运行时(Android runtime)和系统库以及内核层(Kernel)。上述应用程序层可以包括一系列应用程序包。
如图4所示,应用程序包包括系统应用。其中,系统应用是指手机在出厂之前设置在手机内的应用。示例性的,系统应用可以包括设置、手机管家、相机、图库、日历、音乐、短信息以及通话等程序。
应用程序包还可以包括第三方应用,第三方应用是指用户从应用商店(或者应用市场)下载安装包后安装的应用。例如,地图类应用(例如等)、外卖类应用(例如等)、阅读类应用(例如)、社交类应用(例如)以及出行类应用(例如)等。
上述应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。
如图4所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。
资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
本申请实施例中,通知管理器可以在存在内存泄漏的内存已经换出时,在状态栏中显示通知信息。Android Runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
如图4所示,系统库可以包括多个功能模块。例如:守护进程模块、泄漏进程下发模块、调度模块和日志处理模块。
其中,守护进程模块是用于维护测试的关键模块,独立于Android原生系统,作为守护进程(daemon)存在,随整个系统开机一同启动,并运行至关机。其中,守护进程模块架构放在内核层之上,应用层之下的本地框架层(Native)。
其中,守护进程是脱离于控制电子设备并且在后台周期性地执行某种任务或等待处理某些事件的进程,脱离终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的中断信息所终止。
在另一种情况下,若系统层没有设置守护进程模块,会重新构建一个类似于守护进程的机制,放在内核层之上,应用层之下的本地框架层,不与Android原生的代码及能力发生冲突。
本申请实施例以设置了守护进程模块的Android系统为例,示例性说明电子设备的软件结构。
如图4所示,守护进程模块包括运行时管理模块,运行时管理模块包括内存泄漏检测模块。
其中,内存泄漏检测模块用于对电子设备的进程进行内存泄漏检测,以确定运行中的进程是否存在内存泄漏。
泄漏进程下发模块用于对存在内存泄漏的进程对应的进程标识(如,进程号和/或进程名称)进行下发。
在本申请实施例中,内存泄漏检测模块检测到电子设备的进程存在内存泄漏后,将存在内存泄漏进程的进程标识发送至泄漏进程下发模块,泄漏进程下发模块将存在内存泄漏的进程对应的进程标识下发至内存回收模块。
调度模块用于将内存回收模块发送的存在内存泄漏的进程的内存数据回收状态和二次回收链表上报至服务器侧。日志处理模块用于在内存回收模块回收泄漏的内存时,生成日志并上报至服务器侧。
内核层是硬件和软件之间的层。内核层至少包含:内存回收模块、页面错误处理模块、页面管理模块、对象管理模块、输入/输出(input/output,IO)调度器等等。其中,内存回收模块包括内存守护进程模块、泄漏页面统计上报模块和泄漏页面交换管理模块。
内存回收模块,用于对存在内存泄漏的进程的内存数据进行回收。内存守护进程模块,用于在系统内存不足时,开始进行内存数据回收。
在本申请实施例中,内存回收模块接收到泄漏进程下发模块发送的存在内存泄漏的进程对应的进程标识后,内存守护进程模块开始对存在内存泄漏的进程的内存数据进行回收。
页面错误处理模块,用于主导内存换入的流程。页面管理模块,用于定位待换入内存对应的内存段。IO调度器,用于读取待换入内存对应的内存段。对象管理模块,用于对待换入内存对应的内存段进行解压。
在本申请实施例中,页面错误处理模块主导内存换入时,页面管理模块定位到用于换入到内存的内存段后,IO调度器读取页面管理模块定位到的内存段。然后,对象管理模块对IO调度器读取到的内存段进行解压,最后换入到系统的内存中。
泄漏页面统计上报模块,用于对存在内存泄漏的页面进行统计并进行上报。
在本申请实施例中,内存守护进程模块将存在内存泄漏的进程对应的内存数据换出到暂存区域时,泄漏页面统计上报模块可以记录一个内存地址表,以使用该内存地址表记录内存数据换出前的内存地址以及换出到暂存区域的内存地址之间的对应关系。其中,该暂存区域为内存以外的其他存储区域,比如为Swap或外存等。
泄漏页面交换管理模块,用于对存在内存泄漏的页面进行换入和换出管理。
以下实施例中所涉及到的技术方案均可以在具有上述硬件结构和软件架构的电子设备100中实现。以下以电子设备100为手机为例,对本方案进行示例性说明。
手机开机时,守护进程模块随着手机的系统启动,内存泄漏检测模块随着守护进程模块启动。在手机开机后,如果用户启动了手机中的应用,则应用会向系统申请内存,应用对应的进程也相应占用了内存。应用申请了内存后,可能存在一些应用在内存使用完毕或者应用进入后台后,已经不需要这些内存了,也并未对这些内存进行释放,从而导致应用存在了内存泄漏的情况。因此,内存泄漏检测模块需要对手机中启动的应用对应的进程的内存占用情况进行检测,以根据检测结果确定是否存在内存泄漏的进程。
可以理解的是,手机中的应用在实际运行时,可能存在一个应用对应于一个进程,或者,一个应用对应于多个进程的情况。在一个应用对应于一个进程时,内存泄漏检测模块可以根据该进程的内存占用情况确定进程对应的应用是否为存在内存泄漏。在一个应用对应于多个进程时,内存泄漏检测模块可以根据多个进程的内存占用情况确定进程所属的应用是否存在内存泄漏。内存泄漏检测模块在确定应用对应的多个进程中的任意一个进程发生内存泄漏时,可以确定该应用存在内存泄漏。
在一种可能的情况下,内存泄漏检测模块的一个检测周期结束后,并未检测到手机中存在内存泄漏的进程。这种情况下,内存泄漏检测模块进入下一个检测周期,继续检测手机中是否存在内存泄漏的进程。
在另一种可能的情况下,内存泄漏检测模块的一个检测周期结束后,确定手机中存在内存泄漏的进程。这种情况下,内存泄漏检测模块将存在内存泄漏的进程对应的进程标识发送至泄漏进程下发模块。泄漏进程下发模块接收到内存泄漏检测模块发送的存在内存泄漏的进程标识后,将该进程标识发送至内存回收模块的内存守护进程模块。
示例性的,如图5中(a)所示,假设内存泄漏检测模块确定腾讯存在内存泄漏,内存泄漏检测模块可以将腾讯对应的进程标识(如,进程号为1111,进程名称为腾讯QQ)发送至泄漏进程下发模块。进一步的,泄漏进程下发模块接收到内存泄漏检测模块发送的腾讯的进程标识后,将该进程标识发送至内存回收模块的内存守护进程模块。
在本申请实施例的一种可能的实现方式中,内存泄漏检测模块确定手机中是否存在内存泄漏的进程时可以先确定可能存在内存泄漏的可疑进程,再根据可疑进程的内存信息确定可疑进程是否存在内存泄漏。具体的实现过程如下。
在本申请实施例中,内存泄漏检测模块获取到进程的内存信息后,内存泄漏检测模块根据进程的内存信息确定进程的内存增加速率和/或内存总占用量。进而,内存泄漏检测模块根据进程的内存增加速率和/或内存总占用量确定该进程是否为可疑进程,包括但不限于以下三种方式:
在一种可能的方式中,内存泄漏检测模块根据进程的内存信息,确定进程的内存增加速率大于第一速率阈值。这种情况下,说明该进程在短时间内申请了大量的内存,该进程存在内存泄漏的可能,因而将该进程添加至灰名单中。
在另一种可能的方式中,内存泄漏检测模块根据进程的内存信息,确定进程的内存总占用量大于占用量阈值(比如进程的内存占用量大于预设阈值,或者进程的内存占用系统内存的比率大于预设比例)。这种情况下,说明该进程占用了系统的内存总量过高,该进程存在内存泄漏的可能,因而将该进程添加至灰名单中。
在又一种可能的方式中,内存泄漏检测模块根据进程的内存信息同时确定进程的内存增加速率和内存总占用量后,确定进程的内存增加速率大于第一速率阈值,且进程的内存总占用量大于占用量阈值。这种情况下,说明该进程在短时间内申请了大量的内存,同时该进程的占用了系统的内存总量过高,该进程存在内存泄漏的可能,因而将该进程添加至灰名单中。
需要解释的是,上述第一速率阈值和占用量阈值可以根据进程的内存占用情况而设定,也可以为系统内置的值,在此不做限定。
在本申请实施例中,内存泄漏检测模块根据进程的内存信息确定该进程是否为可疑进程时,可以根据进程的内存增加速率、内存总占用量和进程的内存是否长时间未被调用中至少一个确定该进程是否为可疑进程。例如,假设内存泄漏检测模块根据进程的内存信息确定该进程在预设时长内未被调用,则可以确定该进程为可疑进程。
在本申请实施例中,内存泄漏检测模块根据采集的可疑进程的内存信息确定可疑进程是否存在内存泄漏时,包括但不限于以下六种情况。
第一种情况,若可疑进程的平均内存增加速率大于或等于第二速率阈值,则说明该可疑进程持续在短时间内申请了大量的内存,可以确定该可疑进程存在内存泄漏。这种情况下,系统可以返回第一标识(例如返回1)。作为一种示例,假设内存泄漏检测模块当前计算的可疑进程的平均内存增加速率大于500KB/s,则确定该可疑进程存在内存泄漏,系统返回1。
在本申请实施例中,内存泄漏检测模块确定可疑进程是否存在内存泄漏后,返回对应的标识后,电子设备的系统可以根据内存泄漏检测模块返回的标识确定当前是否有应用存在内存泄漏。例如,内存泄漏检测模块确定可疑进程存在内存泄漏,返回第一标识后,系统根据第一标识确定当前电子设备的应用存在内存泄漏的情况。
第二种情况,若可疑进程的平均内存增加速率小于第二速率阈值,且已经计算的内存增加速率的个数大于第一个数阈值,且最后计算的连续预设个数的内存增加速率均大于第三速率阈值,其中,第三速率阈值小于第二速率阈值。这种情况下,说明该可疑进程虽然并未在短时间内申请了大量的内存,但是该可疑进程持续向系统申请内存,并且申请的内存数量在持续增长,也可以确定该可疑进程存在内存泄漏。这种情况下,系统也返回第一标识(例如返回1)。例如,第二速率阈值设定为500KB/s,第三速率阈值设定为30KB/s。
作为一种示例,假设内存泄漏检测模块当前计算的可疑进程的平均内存增加速率小于500KB/s,且速率计算达到10次及以上,且最后的连续4次计算的内存增加速率都大于30KB/s,则确定该可疑进程存在内存泄漏,系统返回1。
第三种情况,若可疑进程的平均内存增加速率小于第二速率阈值,且已经计算的内存增加速率的个数大于第一个数阈值,且最后计算的连续预设个数的内存增加速率中存在一个内存增加速率小于第三速率阈值,且内存总占用量大于内存阈值。这种情况下,说明该可疑进程虽然并未在短时间内申请了大量的内存,但是该可疑进程持续向系统申请内存,并且申请的内存总量较大,也可以确定该可疑进程存在内存泄漏。这种情况下,系统可以返回第一标识(例如返回1)。
作为一种示例,假设内存泄漏检测模块当前计算的可疑进程的平均内存增加速率小于500KB/s,且速率计算达到10次及以上,且最后的连续4次计算的内存增加速率存在一个内存增加速率小于30KB/s,且内存总占用量超过200MB,则确定该可疑进程存在内存泄漏,系统返回1。
第四种情况,若可疑进程的平均内存增加速率小于第二速率阈值,且已经计算的内存增加速率的个数大于第一个数阈值,且最后计算的连续预设个数的内存增加速率中存在一个内存增加速率小于第三速率阈值,且内存总占用量小于或等于内存阈值。这种情况下,说明该可疑进程并未在短时间内申请了大量的内存,虽然该可疑进程持续向系统申请内存,但是该可疑进程申请的内存占用系统内存总量较少,可以确定该可疑进程未存在内存泄漏。这种情况下,系统可以返回第二标识(例如返回2)。
作为一种示例,假设内存泄漏检测模块当前计算的可疑进程的平均内存增加速率小于500KB/s,且速率计算达到10次及以上,且最后的连续4次计算的内存增加速率存在一个内存增加速率小于30KB/s,且内存总占用量未超过200MB,则确定该可疑进程未存在内存泄漏,系统返回2。
第五种情况,若内存泄漏处理模块采集可疑进程的内存信息的周期数小于第二个数阈值,这种情况下,内存泄漏检测模块获取到的可疑进程的内存信息的数量小于第二个数阈值。即内存泄漏检测模块并未获取到充足的可疑进程的内存信息,可以确定数据不足,无法确定可疑进程是否存在内存泄漏。这种情况下,系统可以返回第三标识(例如返回0)。例如,内存泄漏处理模块采集可疑进程的内存信息的采集点不足5次,则认为数据不足。
第六种情况,若内存泄漏检测模块确定采集得到的可疑进程的内存信息的数量小于采集周期数,这种情况下,内存泄漏处理模块并未获取到充足的可疑进程的内存信息,则可以确定数据不足,无法确定可疑进程是否存在内存泄漏。这种情况下,系统可以返回第三标识(例如返回0)。
需要解释的是,上述示例中第二速率阈值、第三速率阈值、第一个数阈值、第二个数阈值以及内存阈值的取值仅作为示例性描述,可以根据可疑进程的不同设定为不同的值,即不同的进程对应的第二速率阈值、第三速率阈值、第一个数阈值、第二个数阈值以及内存阈值可能相同,也可能不相同,在此不做限定。例如,若可疑进程为的进程,可以设定第二速率阈值为500KB/s、第三速率阈值为30KB/s、第一个数阈值为10次、第二个数阈值为4次以及内存阈值为200MB;若可疑进程为的进程,可以设定第二速率阈值为400KB/s、第三速率阈值为25KB/s、第一个数阈值为8次、第二个数阈值为4次以及内存阈值为180MB。
需要解释的是,本申请实施例中对内存泄漏检测方法不限于上述实现过程,任意可以用于检测内存泄漏的方法均可以适用于本申请实施例中。
在内存泄漏检测模块确定手机中存在内存泄漏的进程后,内存泄漏检测模块将存在内存泄漏的进程对应的进程标识发送至泄漏进程下发模块。泄漏进程下发模块接收到内存泄漏检测模块发送的进程标识后,将该进程标识发送至内存回收模块的内存守护进程模块,以使得内存守护进行模块对存在内存泄漏的进程的内存数据进行恢复。
需要解释的是,内存泄漏检测模块检测到手机中多个进程存在内存泄漏时,内存守护进行模块可以根据内存泄漏检测模块检测到的存在内存泄漏的进程的先后顺序,对存在内存泄漏的进程的内存数据进行恢复。例如,内存泄漏检测模块检测到手机中的进程1存在内存泄漏后,内存守护进程模块开始对进程1的内存数据进行回收。内存守护进程模块对进程1的内存数据进行回收的过程中,内存泄漏检测模块检测到进程2存在内存泄漏。内存守护进程模块在对进程1的内存数据回收满足待换出内存数据量时,内存守护进程模块开始对进程2的内存数据进行回收,直至内存守护进程模块回收进程2的内存数据满足待换出内存数据量。
内存守护进程模块开始对存在内存泄漏的进程的内存数据进行恢复时,可以根据进程的内存泄漏速率和/或进程当前占用内存大小确定该进程对应的待换出内存数据的内存量大小,即回收该进程对应的内存数据的内存量。然后,内存守护进程模块以单位内存量为一次换出的数量开始进行批量换出该进程的内存数据,直至换出的该进程的内存数据的数据量达到待换出内存数据的内存量,此次内存转存过程结束。例如,待换出内存数据的内存量可以为进程泄漏速率*300与1/10*进程当前占用内存大小之间的最小值。
可以理解的是,内存守护进程模块确定进程的待换出内存数据的内存量时,考虑了进程的内存泄漏速率和/或进程当前占用内存大小。其中,当内存守护进程模块确定进程的内存泄漏速率较大或者进程当前占用内存较大时,可以换出较多的内存数据,即待换出内存数据量取值较大。由此,不仅解决了进程的内存泄漏问题,还使得进程保留有部分可用内存以供应用进行调用。内存泄漏检测模块检测到存在内存泄漏的进程后,内存守护进程模块需要根据系统的可用存储量是否大于阈值1判断是否需要进行内存回收。其中,阈值1可以根据系统的总可用存储量而设定,在此不做限定。如手机A的系统的总可用存储量较大,可以设定较大的阈值1,手机B的系统的总可用存储量较小,可以设定较小的阈值1。示例性的,如图6所示,内存守护进程模块对存在内存泄漏的进程的内存进行内存恢复(如,内存回收)时,包括但不限于以下几种情况。
第一种情况下,内存守护进程模块确定系统的可用存储量大于阈值1,其中,阈值1可以为第一存储量阈值,即内存守护进程模块确定系统的可用存储量较大时,不会影响手机的使用性能。这种情况下,内存守护进程模块无需对存在内存泄漏的进程的内存数据进行内存转存。内存守护进程模块将未对该进程的内存数据进行回收的状态发送至调度模块,调度模块将未对该进程的内存数据进行转存的状态和二次回收链表发送至服务器侧,以使得服务器侧统计当前系统是否回收了进程的内存数据。其中,二次回收链表是指由Linux原生接口(如/proc/pid/smaps接口)获取到存在内存泄漏的进程的内存块组成的一个链表。
第二种情况下,内存守护进程模块确定系统的可用存储量小于或等于阈值1,即系统的可用存储量较小,将会影响手机的使用性能。这种情况下,内存守护进程模块需要对存在内存泄漏的进程对应的内存数据进行转存。
但是,在一些实施例中,内存守护进程模块确定当前进程的占用率大于阈值2,其中,阈值2可以为占用量阈值,即该进程被调用的频率过高。这种情况下,内存守护进程模块暂时不对该进程的内存数据进行转存,内存守护进程模块同样将未对该进程的内存数据进行回收的状态发送至调度模块。调度模块接收到内存守护进程模块发送的未对该进程的内存数据进行转存的状态后,将未对该进程的内存数据进行回收的状态和二次回收链表发送至服务器侧,结束内存恢复流程。其中,占用率是指进程对应的页面被调用的频率。此处,占用率还能够反应数据颠簸率,即该进程的内存数据仍被间隔性的调用。这种情况下,内存守护进程模块暂时不对该进程的内存数据进行回收,以提高电子设备的使用性能。
在另一些实施例中,内存守护进程模块确定当前进程的占用率小于或等于阈值2,内存守护进程模块确定暂存区域的可用存储量小于或等于阈值3。这种情况下,内存守护进程模块确定暂存区域没有足够的存储空间以用于存储待回收的内存数据,内存守护进程模块暂时不对该进程的内存数据进程转存,内存守护进程模块同样将未对该进程的内存数据进行回收的状态发送至调度模块。调度模块接收到内存守护进程模块发送的未对该进程的内存数据进行回收的状态后,调度模块将未对该进程的内存数据进行回收的状态和二次回收链表发送至服务器侧,以使得服务器侧统计当前系统是否回收了进程的内存数据。
其中,暂存区域,是指用于存储存在内存泄漏的进程的内存数据的存储空间,即内存守护进程模块可以将存在内存泄漏的进程的内存数据换出到暂存区域。在本申请实施例中,暂存区域可以为内存以外的其他存储区域,比如Swap分区或外存等,在此不做限定。阈值3可以为第二存储量阈值,即暂存区域的可用储存量的低临界值。例如,阈值3可以为SWP_TOTAL*1/10,其中,SWP_TOTAL为min(系统的总可用内存大小*1/12,系统当前可用外存大小*1/10)。
需要解释的是,本申请中对上述阈值2和阈值3的取值不做限定,如,存在内存泄漏的进程不同时,可以设定不同的阈值2。
在一些实施例中,内存守护进程模块确定当前进程的占用率小于或等于阈值2后,进一步的,内存守护进程模块确定暂存区域的可用存储量大于阈值3,则内存守护进程模块开始执行内存交换操作(如,转存存在内存泄漏的进程的匿名页)。内存守护进程模块在转存内存数据时,生成或更新二次回收链表,确定内存数据转出时,结束内存恢复流程。其中,匿名页是指应用程序动态分配的堆内存,匿名页很可能还要再次被访问,不能直接释放。
在本申请的一些实施例中,内存守护进程模块执行内存交换操作时,内存守护进程模块可以将存在内存泄漏的进程的匿名页转存至暂存区域中。内存守护进程模块在换出匿名页时,生成或更新二次回收链表。内存守护进程模块确定匿名页换出时,结束内存恢复流程。下面结合图7详细解释内存守护进程模块将匿名页转存至暂存区域的过程。
示例性的,如图7所示,内存回收模块接收到内存泄漏检测模块发送的内存泄漏的进程标识后,内存守护进程模块被唤醒。内存守护进程模块首先判断系统的可用存储量是否小于阈值4,以确定是否需要对存在内存泄漏的进程的匿名页进行转存。若内存守护进程模块确定系统的可用存储量小于阈值4,这种情况下,说明系统的可用存储量较小,内存守护进程模块开始回收匿名页。内存守护进程模块确定系统的可用存储量小于阈值4时,确定暂存区域的可用存储量的大小。
在一种可能的情况下,内存守护进程模块确定暂存区域的可用存储量大于阈值5,则暂存区域有足够的存储空间存储匿名页,则内存守护进程模块开始回收匿名页。内存守护进程模块在转存匿名页时,如果内存守护进程模块确定暂存区域的可用存储量大于阈值6,即暂存区域中没有足够的存储空间可以存储匿名页,则内存守护进程模块将该暂存区域的数据转存至内存缓冲区。然后,内存守护进程模块确定系统的可用存储量小于阈值4,则匿名页换出过程结束。
在一些实施例中,暂存区域可以为压缩内存区域(如,zRAM)。在内存守护进程模块回收匿名页的过程中,内存守护进程模块确定zRAM的可用存储量大于阈值6,即zRAM中没有足够的存储空间可以存储匿名页,则内存守护进程模块可以将该zRAM中存储的数据转存至内存缓冲区(如,eswap等)。其中,zRAM是Linux内核的一项功能,可提供虚拟内存压缩。zRAM可以用内存替代硬盘为系统提供交换空间。
在另一种可能的情况下,内存守护进程模块确定暂存区域的可用存储量小于或等于阈值5,这种情况下,说明暂存区域没有足够的存储空间存储匿名页,内存守护进程模块暂时不对该匿名页进行回收。此时,内存守护进程模块可以将未对该进程的内存数据进行回收的状态上报至调度模块。
在内存守护进程模块确定暂存区域的可用存储量小于或等于阈值5或者系统的可用存储量大于或等于阈值3时,内存守护进程模块暂时不对该匿名页进行回收。内存守护进程模块可以将暂时不对该匿名页进行回收的状态上报至调度模块。调度模块将暂时不对该匿名页进行回收的状态上报至服务器侧,以使得服务器侧对匿名页是否回收的状态是否统计。
需要解释的是,内存守护进程模块将存在内存泄漏的进程的匿名页换出时,并非换出进程对应的所有的匿名页。在本申请实施例中,内存守护进程模块确定换出进程的匿名页时包括但不限于以下几种情况。
第一种情况,内存守护进程模块可以优先释放存在于二次回收链表,预设时长内未被调用的页面。由此,内存守护进程模块优先释放长时间未被调用的页面,提高了电子设备的内存可用量。例如,假设二次回收链表中包括页面1、页面2和页面3,内存守护进程模块确定页面2长时间未被调用,在换出进程的匿名页时,内存守护进程模块优先将页面2换出,以对电子设备的内存进行释放。
第二种情况,若内存守护进程模块确定二次回收链表中不存在一直未被调用的页面,则释放最先添加至二次回收链表的页面。例如,假设二次回收链表中包括页面1、页面2和页面3,内存守护进程模块确定页面1最先添加至二次回收链表中,在换出进程的匿名页时,内存守护进程模块优先将页面1换出,以对电子设备的内存进行释放。
第三种情况,内存守护进程模块还可以优先释放未被多个进程同时调用,仅被内存泄漏的进程调用的页面。例如,假设二次回收链表中包括页面1、页面2和页面3,内存守护进程模块确定页面1仅被内存泄漏的进程调用,并未被其他进程调用。内存守护进程模块优先将页面1换出,以对电子设备的内存进行释放。
可以理解的是,内存守护进程模块可以根据匿名页的优先级顺序确定待转出的匿名页。其中,优先级顺序为预设时长内未被调用的匿名页的优先级高于最先添加至二次回收链表的匿名页的优先级,最先添加至二次回收链表的匿名页的优先级高于未被多个进程同时调用的匿名页的优先级。
在一些实施例中,内存守护进程模块将存在内存泄漏的匿名页换出到暂存区域的Swap分区后,可能存在Swap分区的存储空间存在内存不足的情况。这种情况下,内存守护进程模块可以进行二次回收,即内存守护进程模块可以将Swap分区里的内存数据释放到外存。
在本申请实施例中,在内存守护进程模块对存在内存泄漏的进程进行内存数据回收时,内存守护进程模块接收到泄漏进程下发模块发送的进程标识后,根据Linux原生接口(如/proc/pid/smaps接口)获取到存在内存泄漏的进程对应的内存信息。然后,内存守护进程模块根据获取到存在内存泄漏的进程对应的内存信息后,将该进程对应的内存数据进行换出,以将该内存数据换出到外存。其中,进程对应的内存信息可以包括进程的内存占用情况、内存头、内存地址以及内存调用次数。例如,内存占用情况包括常驻内存集(residentset size,RSS)和/或ION内存等。其中,RSS是指对应进程申请后获得分配的,包含共享库在内的内存空间,可以视为对应进程实际占用的所有内存空间。ION内存是指位于交换分区的共享内存,主要用于应用间的快速数据交互,是Android独有的一种内存管理模式。
下面结合示例对根据Linux原生接口(如/proc/pid/smaps接口)获取到存在内存泄漏的进程对应的内存信息进行介绍。
例如,/proc/pid/smaps是了解进程的内存信息的接口,通过调用/proc/pid/smaps可以查询到进程地址(pid)对应的进程的内存信息。以图8作为示例,图8中示出了pid为1的进程的内存信息,Rss是指系统为pid为1的进程当前占用内存大小,Rss为276KB;Size是指虚拟内存空间大小,为1388KB;内存头为0006c000;内存调用次数为14次;内存地址为556bde7000-556bf42000,等等。需要解释的是,图8中仅示出了/proc/smaps文件中的部分内容,全部的内容以实际调用/proc/smaps接口获取到的进程对应的内存信息为准,在此不做限定。
内存守护进程模块通过上述接口获取到存在内存泄漏的进程对应的内存地址后,将该内存地址存储的内存数据进行换出,以将该内存数据换出到暂存区域。由此,内存守护进程模块将电子设备中存在内存泄漏的进程进行内存数据换出,解决了电子设备中应用对应的进程存在内存泄漏,导致电子设备出现内存不足或卡顿的问题,提高了电子设备的使用性能。
示例性的,如图5中(b)所示,内存泄漏检测模块检测到腾讯存在内存泄漏后,将腾讯对应的进程号和进程名称发送至内存守护进程模块的内存守护进程模块。内存守护进程模块启动后,内存守护进程模块针对接收到腾讯的进程号和进程名称,根据Linux原生接口(如/proc/pid/smaps接口)对腾讯中存在内存泄漏的进程对应的内存数据进行换出,以将该内存数据换出到暂存区域。
内存守护进程模块将存在内存泄漏的进程对应的内存数据换出到暂存区域时,可以根据暂存区域的可用存储量确定是否需要对存在内存泄漏的进程对应的内存数据进行内存压缩。可以理解为,当手机的暂存区域对应的可用存储量较大,无需对存在内存泄漏的进程对应的内存数据进行内存压缩时,可以不对该内存数据进行内存压缩。但是,当手机的暂存区域的可用存储量较小时,为了节约暂存区域的可用存储量,需要对存在内存泄漏的进程对应的内存数据进行内存压缩。因此,在内存守护进程模块将存在内存泄漏的进程对应的内存数据换出到暂存区域时,是否需要对存在内存泄漏的进程对应的内存数据进行内存压缩,可以根据暂存区域的可用存储量而确定,在此不做限定。
在一些实施例中,内存守护进程模块将存在内存泄漏的进程对应的内存数据转出到暂存区域时,泄漏页面统计上报模块还可以记录内存数据转出前的内存地址与转出到暂存区域的内存地址之间的对应关系。例如,泄漏页面统计上报模块可以通过内存地址表来记录该对应关系。由此,通过泄漏页面统计上报模块记录的内存地址表对内存数据换出前后的内存地址进行存储,以使得存储在暂存区域的那部分内存数据再次被需要时,可以从内存地址表中查询到对应的内存地址。
示例性的,如图5中(c)所示,内存守护进程模块将腾讯中存在内存泄漏的进程对应的内存数据换出到外存时,泄漏页面统计上报模块可以记录一个内存地址表,以使用该内存地址表记录内存数据换出前内存地址以及换出到外存的内存地址。如下表1所示,假设将腾讯的进程号为1111的进程的内存数据在换出前的内存地址为556bde7000-556bf42000,该进程的内存数据换出到外存的内存地址为556bce3200-556be52100,则可以记录一个内存地址表,以存储该内存泄漏的进程对应的内存数据换出前的内存地址以及换出到暂存区域的内存地址。
表1
进程号 | 在内存中的内存地址 | 在暂存区域中的内存地址 |
1111 | 556bde7000-556bf42000 | 556bce3200-556be52100 |
在本申请的一些实施例中,内存守护进程模块确定将存在内存泄漏的进程的内存数据转存至暂存区域之前,手机可以提示用户是否将该进程对应的内存数据转出内存。由此,通过用户根据提示信息确定是否将内存数据进行转存,提高了手机的使用性能。例如,手机的显示界面显示提示信息,以提示用户某些应用存储内存泄漏,用户可以根据提示,主动指示手机释放该应用占用的内存。
在一些实施例中,参见图9A,手机可以提示用户“腾讯QQ存在内存泄漏,是否释放腾讯QQ占用的内存”。若检测到用户点击“是”控件的操作,则手机将腾讯QQ的进程对应的内存数据转出内存,以避免手机出现内存不足或卡顿等性能问题。
在本申请的一些实施例中,内存守护进程模块确定将存在内存泄漏的进程的内存数据转出到暂存区域后,手机可以提示用户某些应用的泄漏内存的内存数据已经被转出。由此,提醒了用户已经对存在内存泄漏的应用进行处理,提高了手机的使用性能。例如,手机的显示界面显示提示信息,以提示用户某些应用的泄漏内存已经被转出。
在本申请的一些实施例中,内存守护进程模块确定手机中多个应用的进程存在内存泄漏后,手机可以通过显示提示信息的方式提示用户存在内存泄漏的多个应用,使得用户可以设置对存在内存泄漏的多个应用中的哪些应用的内存数据进行转存。
此后,内存守护进程模块确定转出到暂存区域的内存数据再次被调用时,还可以将存储在暂存区域的内存数据转存到内存中。例如,内存守护进程模块确定存在内存泄漏的进程对应的应用需要再次调用转出到暂存区域的那部分内存数据时,则可以将暂存区域存储的内存数据再次转存到内存中。下面结合图10对页面的换入过程进行示例性描述。
示例性的,如图10所示,页面的换入过程由页面错误处理模块进行控制。当页面管理模块定位到用于换入到内存的内存段后,页面管理模块向页面错误处理模块返回标识1。进一步的,IO调度器读取页面管理模块定位到的内存段后,IO调度器向页面错误处理模块返回标识2。然后,对象管理模块对IO调度器读取到的内存段进行解压,对象管理模块向页面错误处理模块返回标识3。最后,页面错误处理模块将解压后的内存段换入到当前内存,整个换入流程结束。
需要解释的是,图10中的对象管理模块对IO调度器读取到的内存段进行解压并非必须的流程。若需要换出的内存段在换入时并未被压缩,对象管理模块在将该内存段转出时,无需对该内存段进行解压。
示例性的,如图11所示,内存守护进程模块将腾讯中存在内存泄漏的进程对应的内存数据进行转出后,腾讯需要再次调用该内存数据时,页面错误处理模块从内存换出时记录的内存地址表中读取到该内存数据换出到暂存区域的内存地址后,可以将暂存区域中存储的腾讯的部分内存数据换入到内存中。如图11所示,由于腾讯中换出的那部分内存数据的存储空间已经被调用了,系统需要为从暂存区域换入的那部分内存数据重新分配内存地址。
综上所述,本申请实施例中,内存泄漏检测模块确定电子设备中的进程中存在内存泄漏后,内存回收模块对存在内存泄漏的进程的泄漏内存进行回收,由此,通过对存在内存泄漏的进程进行内存回收处理,解决了电子设备可用内存不足的问题,提高了电子设备的使用性能。
相较于现有的内存泄漏处理方法中直接对泄漏内存进行释放,导致泄漏内存再次被应用调用时,存在应用寻址发生错误的情况。本申请实施例中的内存泄漏处理方法通过将存在内存泄漏的进程的内存数据进行转出到暂存区域,在该内存数据再次被调用时,再将该内存数据换入到暂存区域,避免了存在内存泄漏的应用无法正常运行,有利于提高电子设备的使用性能。
如图12所示,本申请实施例公开了一种电子设备,该手机可以为上述手机。该手机具体可以包括:触摸屏1201,所述触摸屏1201包括触摸传感器1206和显示屏1207;一个或多个处理器1202;存储器1203;一个或多个应用程序(未示出);以及一个或多个计算机程序1204,上述各器件可以通过一个或多个通信总线1205连接。其中,上述一个或多个计算机程序1204被存储在上述存储器1203中并被配置为被该一个或多个处理器1202执行,该一个或多个计算机程序1204包括指令,该指令可以用于执行上述实施例中的相关步骤。
可以理解的是,上述终端等为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。
本申请实施例可以根据上述方法示例对上述终端等进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,上述实施例中涉及的电子设备的一种可能的组成示意图,该电子设备可以包括:显示单元、传输单元和处理单元等。需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本申请实施例还提供一种电子设备,包括一个或多个处理器以及一个或多个存储器。该一个或多个存储器与一个或多个处理器耦合,一个或多个存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当一个或多个处理器执行计算机指令时,使得电子设备执行上述相关方法步骤实现上述实施例中的内存泄漏处理方法。
本申请的实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的内存泄漏处理方法。
本申请的实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中电子设备执行的内存泄漏处理方法。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使装置执行上述各方法实施例中电子设备执行的内存泄漏处理方法。
其中,本实施例提供的电子设备、计算机可读存储介质、计算机程序产品或装置均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:快闪存储器、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (23)
1.一种内存泄漏处理方法,应用于电子设备,所述电子设备包括至少一个进程,所述至少一个进程包括第一进程,其特征在于,所述方法包括:
若确定内存满足第一预设条件,则获取所述第一进程对应的内存数据;所述满足第一预设条件包括所述第一进程存在内存泄漏;
将所述第一进程对应的内存数据转存至暂存区域;其中,所述暂存区域为所述内存以外的存储区域。
2.根据权利要求1所述的方法,其特征在于,所述满足第一预设条件还包括:系统的可用存储量、所述暂存区域的可用存储量以及所述第一进程的内存占用率中至少一个满足所述第一预设条件。
3.根据权利要求2所述的方法,其特征在于,所述满足第一预设条件还包括:
所述系统的可用存储量小于或等于第一存储量阈值。
4.根据权利要求2所述的方法,其特征在于,所述满足第一预设条件还包括:
所述暂存区域的可用存储量大于第二存储量阈值和/或所述占用率小于占用率阈值。
5.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述系统的可用存储量大于所述第一存储量阈值或所述暂存区域的可用存储量小于或等于所述第二存储量阈值或所述占用率大于或等于所述占用率阈值,则上报未对所述第一进程对应的内存数据进行转存的状态。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述将所述第一进程对应的内存数据转存至暂存区域,包括:
获取所述第一进程的内存信息;其中,所述内存信息包括内存获取时间及对应的内存占用量;
根据所述第一进程的内存泄漏速率和/或所述内存占用量,确定所述第一进程对应的内存数据的内存量;其中,所述内存泄漏速率是根据所述内存获取时间及对应的内存占用量确定的;
以单位内存量为存储单元对所述第一进程对应的内存数据进行转存,直至存储至所述暂存区域的所述第一进程对应的内存数据的数据量大于或等于所述内存数据的内存量。
7.根据权利要求1-5任一项所述的方法,其特征在于,所述内存数据包括匿名页,所述将所述第一进程对应的内存数据转存至暂存区域,包括:
按照所述匿名页的优先级顺序,将所述匿名页转存至所述暂存区域;其中,所述优先级顺序为预设时长内未被调用的所述匿名页的优先级高于最先添加至二次回收链表的所述匿名页的优先级,最先添加至二次回收链表的所述匿名页的优先级高于未被多个进程同时调用的所述匿名页的优先级。
8.根据权利要求1-5任一项所述的方法,其特征在于,在所述将所述第一进程对应的内存数据转存至暂存区域之后,所述方法还包括:
将所述第一进程对应的内存数据从所述暂存区域转存至所述内存。
9.根据权利要求8所述的方法,其特征在于,将所述第一进程对应的内存数据从所述暂存区域转存至所述内存,包括:
若所述第一进程对应的内存数据被调用,则查询内存地址表以获取所述内存数据在所述暂存区域的第二存储地址;其中,所述内存地址表中记录了所述内存数据在所述内存的第一存储地址与所述暂存区域的第二存储地址之间的对应关系;
从所述第二存储地址中获取所述内存数据后,将所述内存数据转存至所述内存的存储区域。
10.根据权利要求1-5任一项所述的方法,其特征在于,所述将所述第一进程对应的内存数据转存至暂存区域之前,还包括:
对所述第一进程对应的内存数据进行数据压缩。
11.根据权利要求10所述的方法,其特征在于,所述从所述第二存储地址中获取所述内存数据后,将所述内存数据转存至所述内存的存储区域,包括:
对从所述第二存储地址中获取到的所述内存数据进行解压缩;
将解压缩后的所述内存数据转存至所述内存的存储区域。
12.根据权利要求1-5任一项所述的方法,其特征在于,在所述将所述第一进程对应的内存数据转存至暂存区域之后,所述方法还包括:
获取所述暂存区域的可用存储量;
若所述暂存区域的可用存储量小于或等于第三存储量阈值,则将所述暂存区域中存储的内存数据转存至缓冲区。
13.根据权利要求1-5任一项所述的方法,其特征在于,所述将所述第一进程对应的内存数据转存至暂存区域之前,还包括:
显示所述提示信息;其中,所述提示信息用于提示用户是否将所述第一进程对应的内存数据转出内存。
14.根据权利要求1-5任一项所述的方法,其特征在于,所述至少一个进程还包括第二进程,所述确定内存满足第一预设条件,所述满足第一预设条件包括所述第一进程存在内存泄漏,包括:
获取所述第一进程对应的第一内存信息以及所述第二进程对应的第二内存信息;
根据所述第一进程对应的所述第一内存信息以及所述第二进程对应的所述第二内存信息,确定所述第一进程符合第二预设条件以及所述第二进程不符合所述第二预设条件;
获取所述第一进程对应的第三内存信息;
根据所述第一进程对应的所述第三内存信息,确定所述第一进程存在内存泄漏。
15.根据权利要求14所述的方法,其特征在于,所述第一内存信息包括第一内存获取时间及对应的第一内存占用量,所述确定所述第一进程符合第二预设条件,包括:
根据所述第一进程的第一内存增加速率和/或第一内存总占用量,确定所述第一进程符合所述第二预设条件;其中,所述第一内存增加速率是根据所述第一进程的至少两个所述第一内存获取时间及对应的第一内存占用量确定的;所述第一内存总占用量是根据所述第一内存占用量确定的。
16.根据权利要求15所述的方法,其特征在于,所述根据所述第一进程的第一内存增加速率和/或第一内存总占用量,确定所述第一进程符合所述第二预设条件,包括:
若所述第一进程的所述第一内存增加速率大于第一速率阈值和/或所述第一内存总占用量大于占用量阈值,则确定所述第一进程符合所述第二预设条件。
17.根据权利要求14所述的方法,其特征在于,所述第三内存信息包括第二内存获取时间及对应的第二内存占用量,所述根据所述第一进程对应的第三内存信息,确定所述第一进程存在内存泄漏,包括:
根据所述第一进程的第二内存增加速率、平均内存增加速率和第二内存总占用量中至少一个,确定所述第一进程存在内存泄漏;其中,所述第二内存增加速率是根据所述第一进程的至少两个所述第二内存获取时间及对应的第二内存占用量确定的;所述平均内存增加速率是根据所述至少一个所述第二内存增加速率确定的;所述第二内存总占用量是根据所述第二内存占用量确定的。
18.根据权利要求17所述的方法,其特征在于,所述根据所述第一进程的第二内存增加速率、平均内存增加速率和第二内存总占用量中至少一个,确定所述第一进程存在内存泄漏,包括:
若所述第一进程的所述平均内存增加速率大于或等于第二速率阈值,则确定所述第一进程存在内存泄漏。
19.根据权利要求17所述的方法,其特征在于,所述根据所述第一进程的第二内存增加速率、平均内存增加速率和第二内存总占用量中至少一个,确定所述第一进程存在内存泄漏,还包括:
若所述第一进程的所述平均内存增加速率小于所述第二速率阈值,且所述第二内存增加速率的个数大于第一个数阈值,且连续预设个数的第二内存增加速率均大于第三速率阈值,则确定所述第一进程存在内存泄漏;其中,所述第三速率阈值小于所述第二速率阈值。
20.根据权利要求17所述的方法,其特征在于,所述根据所述第一进程的第二内存增加速率、平均内存增加速率和第二内存总占用量中至少一个,确定所述第一进程存在内存泄漏,还包括:
若所述第一进程的所述平均内存增加速率小于所述第二速率阈值,且所述第二内存增加速率的个数大于所述第一个数阈值,且连续预设个数的第二内存增加速率中存在至少一个小于所述第三速率阈值,且所述第二内存总占用量大于内存阈值,则确定所述第一进程存在内存泄漏。
21.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器;
其中,所述存储器中存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令,当所述指令被所述电子设备执行时,使得所述电子设备执行如权利要求1-20中任一项所述的内存泄漏处理方法。
22.一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,其特征在于,当所述指令在电子设备上运行时,使得所述电子设备执行如权利要求1-20中任一项所述的内存泄漏处理方法。
23.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1-20中任一项所述的内存泄漏处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110886939.2A CN115934302A (zh) | 2021-08-03 | 2021-08-03 | 一种内存泄漏处理方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110886939.2A CN115934302A (zh) | 2021-08-03 | 2021-08-03 | 一种内存泄漏处理方法及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115934302A true CN115934302A (zh) | 2023-04-07 |
Family
ID=86647739
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110886939.2A Pending CN115934302A (zh) | 2021-08-03 | 2021-08-03 | 一种内存泄漏处理方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115934302A (zh) |
-
2021
- 2021-08-03 CN CN202110886939.2A patent/CN115934302A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114443277A (zh) | 内存管理方法、装置、电子设备以及计算机可读存储介质 | |
CN114116191B (zh) | 内存冷页的处理方法及电子设备 | |
CN110888746A (zh) | 内存管理方法、装置、存储介质及电子设备 | |
CN115292052B (zh) | 内存回收方法、电子设备及计算机可读存储介质 | |
CN115757193B (zh) | 一种内存的管理方法及电子设备 | |
CN116680153B (zh) | 应用帧率平滑方法、电子设备及存储介质 | |
CN115687035A (zh) | 一种内存泄漏的检测方法及电子设备 | |
CN111381996B (zh) | 内存异常处理方法及装置 | |
CN116126744B (zh) | 一种内存回收方法、装置及终端设备 | |
CN117130541A (zh) | 存储空间配置方法及相关设备 | |
CN114253737B (zh) | 电子设备及其内存回收方法、介质 | |
CN113760191B (zh) | 数据读取方法、装置、存储介质和程序产品 | |
CN114461589B (zh) | 读取压缩文件的方法、文件系统及电子设备 | |
CN117130824A (zh) | 一种处理异常的方法、电子设备及存储介质 | |
CN113760192B (zh) | 数据读取方法、装置、存储介质和程序产品 | |
CN115934302A (zh) | 一种内存泄漏处理方法及电子设备 | |
CN115904297A (zh) | 屏幕显示检测方法、电子设备及存储介质 | |
CN112783418B (zh) | 一种存储应用程序数据的方法及移动终端 | |
CN115794361A (zh) | 管理内存的方法和电子设备 | |
CN114489469A (zh) | 一种数据读取方法、电子设备及存储介质 | |
CN114168065B (zh) | 调整内存配置参数的方法和装置 | |
CN116662150B (zh) | 应用启动耗时检测方法及相关装置 | |
CN117093278B (zh) | 内核关机方法、电子设备及存储介质 | |
CN117632446A (zh) | 管理内存的方法和电子设备 | |
CN117724828A (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 |