CN108287761B - 内存回收方法及装置、终端设备及计算机可读存储介质 - Google Patents

内存回收方法及装置、终端设备及计算机可读存储介质 Download PDF

Info

Publication number
CN108287761B
CN108287761B CN201710676690.6A CN201710676690A CN108287761B CN 108287761 B CN108287761 B CN 108287761B CN 201710676690 A CN201710676690 A CN 201710676690A CN 108287761 B CN108287761 B CN 108287761B
Authority
CN
China
Prior art keywords
physical page
target
application program
activity
memory
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
CN201710676690.6A
Other languages
English (en)
Other versions
CN108287761A (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.)
Wuhan Xingji Meizu Technology Co ltd
Original Assignee
Meizu 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 Meizu Technology Co Ltd filed Critical Meizu Technology Co Ltd
Priority to CN201710676690.6A priority Critical patent/CN108287761B/zh
Publication of CN108287761A publication Critical patent/CN108287761A/zh
Application granted granted Critical
Publication of CN108287761B publication Critical patent/CN108287761B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种内存回收方法及装置、终端设备及计算机可读存储介质,该方法包括获取对目标应用程序执行软重启的指令,目标应用程序执行软重启操作;判断目标应用程序是否执行完毕软重启操作,如是,目标应用程序执行内存回收操作。该装置包括获取模块,用于获取对目标应用程序执行软重启的指令;软重启模块,用于对目标应用程序执行软重启操作;内存回收模块,用于确定目标应用程序执行完毕软重启操作后,对目标应用程序执行内存回收操作。本发明的终端设备具有处理器以及存储器,处理器执行计算机程序时可以实现上述的内存回收方法。本发明的计算机可读存储介质上存储有用于实现上述方法计算机程序。本发明可以回收软重启后的应用程序的内存。

Description

内存回收方法及装置、终端设备及计算机可读存储介质
技术领域
本发明涉及电子设备的控制领域,具体地,是在一种在终端设备上实现内存回收方法以及实现这种方法的装置,还涉及一种实现上述方法的终端设备以及计算机可读存储介质。
背景技术
智能手机、平板电脑等终端设备成为人们日常生活中最经常使用的电子设备,人们喜欢在智能电子设备上安装各种应用程序,并且在终端设备上同时运行大量的应用程序。应用程序运行过程中,可能会出现异常情况,如同时接收到大量的指令而无法及时响应,导致应用程序崩溃。如果应用程序出现异常后仍让应用程序继续运行,将导致应用程序占用大量的内存,且应用程序所占用的内存往往无法释放。另一方面,崩溃的应用程序还可能占用CPU等资源,最终导致终端设备运行缓慢,出现卡顿现象设置死机。因此,当应用程序出现异常情况时,系统通常需要强行关闭应用程序,或者,应用程序自己执行关闭操作,从而避免占用大量的硬件资源。
然而,如果出现异常的应用程序是后台运行的应用程序,并且此时将后台运行的应用程序关闭,用户是不清楚该应用程序已被关闭,用户会认为该应用程序一直在后台运行。为了不影响用户的使用,在应用程序出现异常关闭后,需要对重新启动应用程序。由于现在对应用程序启动的方式都是依赖于用户发出的指令,如点击应用程序的图标或者发出声控指令等,因此当应用程序被系统关闭或者自己关闭后,难以自动的重新启动。
为此,现有技术提出了一种对应用程序执行软重启的操作,也就是在判断应用程序因异常而被关闭后,在后台静默的启动,这样,应用程序的启动过程并不会在前台显示,用户感觉不到应用程序执行了重启的操作,从而不影响用户的使用。在应用程序软重启时,操作系统将发出对应用程序执行软重启的指令,也就是模拟用户点击应用程序图标的指令,操作系统将根据该指令执行应用程序的启动操作,并且在软重启后,应用程序仍在后台运行,并不会在前台显示,因此用户感觉不到应用程序已经重启,从而不影响用户的操作。
另一方面,终端设备的操作系统中,为了加快对磁盘进行读写操作的速度,通常会将大量的数据缓存在内存中。进程在使用内存前,需要提出申请并开始占用内存,当使用完内存后再及时回收内存。由于用户在使用终端应用的过程中,经常会频繁更换应用,为了减少用户的等待时长,操作系统通常会为转入后台的应用进程保留其占用的内存。但是,当后台应用过多,内存被大量占用而得不到回收时,会因为内存分配不足导致操作系统运行出现异常。
为了避免因内存分配不足导致的系统异常,操作系统引入了对内存的回收机制。例如,当内存不足时,系统会关闭一些后台进程来回收其占用的内存。但是,当用户需要使用这些进程对应的应用程序时,这些进程需要完全的进行重新加载,耗时长,降低用户体验。因此,现有技术提出在不关闭进程的情况下进行内存回收的方法。近期最少使用链表LRU,将物理页按照近期的使用情况进行排列,当内存不足时,系统会优先对其中的INACTIVE_ANON和INACTIVE_FILE这两个链表中的物理页进行回收。ANON代表匿名映射,没有后备存储器,FILE代表文件映射,INACTIVE代表处于非活动状态。当进程需要使用回收的物理页上的内容时,只要从磁盘中加载相应内容即可,减少耗时。但是,前台运行的应用进程或者后台运行的优先级高的应用进程,其占用的物理页也可能处于INACTIVE_ANON和INACTIVE_FILE这两个链表中,对这两个链表中的物理页进行回收可能会影响这两类应用的正常运行,降低用户体验。
为了保证前台应用进程和后台运行的优先级高的应用进程的正常运行,现有技术提出针对进程进行内存回收的方法,首先获取目标进程的物理页,之后查找未被目标进程使用的目标物理页并回收目标物理页。但是在现有的对进程进行内存回收的方法中,其回收的目标物理页仅仅针对未被目标进程使用的目标物理页,目标物理页主要是目标进程在INACTIVE_ANON和INACTIVE_FILE这两个链表中的物理页,也就是非活动状态的物理页,这种方法的内存回收效率很低。
此外,在应用程序软重启后,将产生大量的碎片,也就是占用大量的内存,如果不及时回收这些内存,将导致终端设备可使用的内存量减小,影响终端设备的运行速度。
发明内容
本发明的第一目的是提供一种及时对软重启后的应用程序执行内存回收的内存回收方法。
本发明的第二目的是提供一种避免软重启后的应用程序占用大量内存的内存回收装置。
本发明的第三目的是提供一种能够实现上述内存回收方法的终端设备。
本发明的第四目的是提供一种被处理器读取并执行时能够实现上述内存回收方法的计算机可读存储介质。
为了实现上述的第一目的,本发明提供的内存回收方法应用于终端设备,该方法包括获取对目标应用程序执行软重启的指令,目标应用程序执行软重启操作;判断目标应用程序是否执行完毕软重启操作,如是,目标应用程序执行内存回收操作。
由上述方案可见,在目标应用程序执行软重启操作以后,对目标应用程序执行一次内存回收操作,可以有效的对软重启后的应用程序所占用的内存进行回收,确保目标应用程序软重启后的碎片能够得到及时的清理。
一个优选的方案是,确定目标应用程序执行完毕软重启操作后,目标应用程序执行内存回收操作包括:确定目标应用程序执行完毕软重启操作后开启计时器,并判断是否到达第一计时时间,如是,目标应用程序执行第一轮内存回收操作。
由此可见,在目标应用程序执行软重启后经过一个预定的时间才执行内存回收操作,可以确保执行内存回收操作时,目标应用程序的软重启操作已经完成,从而避免目标应用程序的内存回收操作影响软重启操作。
进一步的方案是,确定到达第一计时时间后,目标应用程序执行第一轮内存回收操作前,还执行:确定在第一计时时间内,未收到对目标应用程序的用户操作指令或者目标应用程序未置于前台运行。
如果在第一计时时间内,目标应用程序接收到用户操作指令或者置于前台运行,则表示目标应用程序当前有活跃的运行操作,因此不能对目标应用程序执行内存回收操作,以避免影响目标应用程序的运行。
优选的,目标应用程序执行第一轮内存回收操作后,还执行:开启计时器,并判断是否到达第二计时时间,如是,目标应用程序执行第二轮内存回收操作;第二计时时间的时间长度大于第一计时时间的时间长度。
优选的,确定到达第二计时时间后,目标应用程序执行第二轮内存回收操作前,还执行:确定在第二计时时间内,未收到对目标应用程序的用户操作指令或者目标应用程序未置于前台运行。并且,目标应用程序执行第一轮内存回收操作时,目标应用程序执行第一预设次数的内存回收操作,目标应用程序执行第二轮内存回收操作时,目标应用程序执行不少于第二预设次数的内存回收操作;且第一预设次数小于第二预设次数。
由此可见,在应用程序执行软重启后,先后两次执行内存回收操作,例如,第一轮执行内存回收操作时可回收的内存量较少,而经过第二计时时间后,可以执行深度的内存回收操作,如连续执行二次或者三次的内存回收操作,从而回收更多的内存。
进一步的方案是,对目标应用程序执行内存回收操作包括:获取目标应用程序正在运行的目标进程,并获取目标进程对应的目标物理页;读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关;若目标物理页的活跃度的值高于回收标准,且活跃度的值高于回收标准的物理页处于活动状态,则降低目标物理页的活跃度;再次读取目标物理页的活跃度的值;若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。
由上述方案可见,在获取目标进程对应的目标物理页之后,若目标物理页的活跃度的值高于回收标准,可以降低目标物理页的活跃度,并在目标物理页的活跃度不高于回收标准时,对目标物理页进行回收。这样,即使目标物理页为活动状态的物理页,本发明也有机会对目标物理页进行回收,相比于现有技术,本发明大大扩展了内存回收的对象,提高了内存回收效率。
进一步的,在降低目标物理页的活跃度之后,在读取目标物理页的活跃度的值之前,开启计时器;当计时器记录的时长到达预设时长时,触发读取目标物理页的活跃度的值的步骤。
进一步的,开启计时器之前,根据内存占用率设置预设时长,预设时长与内存占用率负相关;或者,根据目标进程的优先级设置预设时长,预设时长与目标进程的优先级正相关。
进一步的,活跃度的可选值至少包括第一值、第二值和第三值,第一值不高于回收标准,第二值低于第三值,且高于回收标准。
进一步的,降低目标物理页的活跃度包括:当目标物理页的活跃度为第三值时,将目标物理页的活跃度设置为第二值;当目标物理页的活跃度为第二值时,将目标物理页的活跃度设置为第一值。
进一步的,降低目标物理页的活跃度包括:当目标物理页为匿名页时,按照第一幅度降低目标物理页的活跃度;当目标物理页为文件页时,按照第二幅度降低目标物理页的活跃度;第一幅度低于第二幅度。
为实现上述的第二目的,本发明提供的内存回收装置应用于终端设备,该装置包括获取模块,用于获取对目标应用程序执行软重启的指令;软重启模块,用于对目标应用程序执行软重启操作;内存回收模块,用于确定目标应用程序执行完毕软重启操作后,对目标应用程序执行内存回收操作。
优选的方案是,还包括计时模块,用于在确定目标应用程序执行完毕软重启操作后开启计时器,并判断是否到达第一计时时间;内存回收模块具体用于:在到达第一计时时间后,对目标应用程序执行第一轮内存回收操作。
进一步的,内存回收模块包括:获取模块,用于获取目标进程对应的目标物理页;第一读取模块,用于读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关;降低模块,用于当目标物理页的活跃度的值高于回收标准时,降低目标物理页的活跃度,活跃度的值高于回收标准的物理页处于活动状态;第二读取模块,用于在降低模块降低目标物理页的活跃度之后,再次读取目标物理页的活跃度的值;回收模块,用于当目标物理页的活跃度的值不高于回收标准时,回收目标物理页。
进一步的,内存回收模块还包括第一设置模块,用于在计时模块开启计时器之前,根据内存占用率设置预设时长,预设时长与内存占用率负相关;或者,第二设置模块,用于在计时模块开启计时器之前,根据目标进程的优先级设置预设时长,预设时长与目标进程的优先级正相关。
进一步的,活跃度的可选值至少包括第一值、第二值和第三值,第一值不高于回收标准,第二值低于第三值,且高于回收标准。
进一步的,降低模块包括:设置单元,用于当目标物理页的活跃度为第三值时,将目标物理页的活跃度设置为第二值;当目标物理页的活跃度为第二值时,将目标物理页的活跃度设置为第一值。
进一步的,降低模块包括:降低单元,用于当目标物理页为匿名页时,按照第一幅度降低目标物理页的活跃度;当目标物理页为文件页时,按照第二幅度降低目标物理页的活跃度;第一幅度低于第二幅度。
为实现上述的第三目的,本发明提供的终端设备包括处理器,处理器用于执行存储器中存储的计算机程序时实现上述内存回收方法的各个步骤。
为实现上述的第四目的,本发明提供的计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述内存回收方法的各个步骤。
附图说明
图1是本发明内存回收方法实施例的流程图。
图2是本发明内存回收方法实施例中对目标应用程序执行内存回收操作的流程图。
图3是本发明内存回收方法实施例中的对目标应用程序的目标进程内存回收的第一种方式的流程图。
图4是本发明内存回收方法实施例中的对目标应用程序的目标进程内存回收的第二种方式的流程图。
图5是本发明内存回收方法实施例中的对目标应用程序的目标进程内存回收的第三种方式的流程图。
图6是本发明内存回收方法实施例中的对目标应用程序的目标进程内存回收的第四种方式的流程图。
图7是本发明内存回收装置实施例的结构框图。
图8是本发明内存回收装置实施例的内存回收模块一种方式的结构框图。
图9是本发明内存回收装置实施例的内存回收模块另一种方式的结构框图。
图10是本发明终端设备实施例的结构框图。
以下结合附图及实施例对本发明作进一步说明。
具体实施方式
本发明内存回收方法是应用在诸如智能手机或者平板电脑等终端设备上,用于实现应用程序所占用的内存的回收。本发发明的内存回收装置运行在终端设备上,并且用于实现上述的内存回收方法。
由于用户在使用应用程序的过程中,经常会频繁更换所使用的应用程序,例如利用视频播放软件观看视频的过程中,可能需要频繁的将聊天应用切换到前台,为了减少用户的等待时长,操作系统通常会为转入后台的应用进程保留其占用的内存。但是,当后台运行的应用程序过多,终端设备的内存被大量占用而得不到释放时,会因为内存分配不足导致操作系统运行出现异常。
另外,由于应用程序运行过程中也可能出现异常情况并且有可能导致应用程序崩溃,例如应用程序进入死循环并且无法接收任何指令,也不能响应任何指令,此时需要将应用程序关闭,并且对应用程序执行软重启操作,以不影响用户的使用。并且,为了避免软重启后的目标应用程序占用大量的内存资源,需要对软重启后的目标应用程序进行内存回收。具体的方法如图1所示,包括以下步骤:
步骤S101,获取对目标应用程序执行软重启的指令。
当某一应用程序运行过程中出现异常,例如进入死循环出现崩溃的情况,或者无法接收用户输入的指令,又或者无法响应用户输入的指令等,则应用程序自己可以结束运行,即关闭应用程序。或者,系统监测发现应用程序出现异常,可以主动的关闭该应用程序。如果被关闭的应用程序是后台运行的应用程序,则需要重新启动应用程序,以便于不影响用户的操作。
因此,如果后台运行的应用程序因异常而被关闭后,系统将模拟用户点击该应用程序的图标,实现该应用程序在后台静默的重启,也就是实现对目标应用程序的软重启。为此,系统设置一个软重启模块,用于监控应用程序的运行情况,并且在判断应用程序出现异常时关闭应用程序,并且在关闭应用程序后,发出模拟被关闭的应用程序的图标被点击的指令,也就是发出软重启指令。
因此,步骤S101中,可以在软重启模块中设置一个监听器,监听软重启模块发出的软重启指令。当软重启模块发出对目标应用程序执行软重启的指令后,监听器将获取该指令,同时获取该指令发出的时间、该指令针对的目标应用程序等。
步骤S102,目标应用程序执行软重启操作。
当软重启模块发出了对目标应用程序执行软重启操作的指令后,也就是发出了模拟目标应用程序的图标被点击的指令,则执行目标应用程序的启动操作,例如,加载目标应用程序启动的进程、获取用户数据、为目标应用程序分配硬件资源,包括分配CPU资源、内存资源等。当然,为了不影响用户的操作,软重启的操作是在后台静默的进行,也就是不会在前台显示目标应用程序的欢迎页面,也不会在前台运行,目标应用程序重启后,将执行退到后台运行。
优选的,软重启后,恢复到目标应用程序关闭前的页面,以便于用户重新运行目标应用程序时,目标应用程序运行的页面与用户将目标应用程序置于后台运行时的页面相同。
步骤S103,判断目标应用程序是否执行软重启操作完毕,如是,转入步骤S104,否则,继续等待。
当目标应用程序执行软重启后,软重启模块可以监听目标应用程序的启动情况,例如,获取目标应用程序加载的进程,或者监控目标应用程序所分配的资源情况,根据目标应用程序所加载的进程情况或者目标应用程序所获取的资源分配情况,从而确定目标应用程序是否完成软重启操作。
当然,另一种情况是根据软重启运行时间来确定软重启操作是否完成。通常,应用程序的启动时间不会超过30秒,则可以设置一个计时时间,如30秒,当软重启模块发出软重启指令后,经过该计时时间,则可以认为目标应用程序完成软重启操作。
步骤S104,目标应用程序执行内存回收操作。
如果步骤S103中,确定目标应用程序已经执行软重启操作完毕后,则对目标应用程序执行内存回收操作,以清理目标应用程序在软重启操作时所产生的碎片。由于目标应用程序在执行内存回收操作时,往往被分配大量的内存资源,然而,由于目标应用程序软重启后,将置于后台运行,如果目标应用程序长时间置于后台运行但又占用大量的内存资源,将导致终端设备的内存不能得到有效的利用,因此,需要对软重启后的目标应用程序执行至少一次内存回收操作。
执行内存回收操作的方式有很多种,常见的方式是获取目标应用程序正在运行的目标进程,如获取目标应用程序的进程列表,从进程列表中获取正在执行的目标进程。然后获取目标进程对应的物理页,并且识别出物理页中的非活跃物理页,将非活跃物理页进行回收。但是,如果仅仅对非活跃物理页进行回收,则内存回收的效率很低,往往导致无法充分回收内存,因此,本发明还提出一种对活跃物理页进行内存回收的方法,具体的回收方法将在下文详细论述。
本实施例中,对目标应用程序执行内存回收操作并不是一次执行完毕,而是分多次执行,参见图2,本实施例分多次执行内存回收操作包括以下步骤:
步骤S201,开启计时器。
在确定目标应用程序已经完成软重启后,可以经过一段时间后才执行内存回收操作,目的是为了避免在目标应用程序执行软重启的过程中执行内存回收操作。如果在目标应用程序软重启过程中执行内存回收操作,将导致应用程序启动过程中的内存分配,从而影响应用程序的软启动操作。
因此,需要在目标应用程序软启动完毕后才能执行内存回收操作。优选的,在目标应用程序软启动完成一段时间后才执行内存回收操作,可以确保执行内存回收操作时,目标应用程序的运行处于一个稳定状态,内存的使用也处于稳定的状态,更有利于内存的回收操作。
步骤S202,判断是否到达第一计时时间,如是,转入步骤S203,否则,继续等待。
开启计时器后,将计算当前的时间是否到达第一计时时间,本实施例中,第一计时时间是预先设定的时间,例如,系统默认设置的时间。当然,第一计时时间也可以由用户自行设定。第一计时时间是一个较短的时间,如一分钟或者两分钟,用于确保目标应用程序软重启后不会马上执行内存回收操作,而是在目标应用程序软重启后运行一段较短的时间,以便于目标应用程序处于运行稳定状态时执行内存回收操作。
步骤S203,判断在第一计时时间内,目标应用程序是否未接收到用户操作指令或者未置于前台运行,如是,转入步骤S204,否则,结束流程。
如果步骤S202中,确定已经到达第一计时时间,并不是马上执行内存回收操作,而是判断在第一计时时间内,是否接收到用户发出的对目标应用程序的操作指令,或者在第一计时时间内目标应用程序是否置于前台运行。
如果在第一计时时间内,用户发出针对目标应用程序的操作指令,如点击目标应用程序显示页面手上的图标,或者在目标应用程序的页面上滑动以发出操作指令,表示用户当前需要对目标应用程序执行操作,即用户正在使用目标应用程序,此时,如果对目标应用程序执行内存回收操作,将导致目标应用程序运行缓慢,影响目标应用程序对用户操作指令的响应速度。
相同的,如果在第一计时时间内,目标应用程序置于前台运行,也就是用户在第一计时时间内曾经使用过目标应用程序,或者用户发出了将目标应用程序置于前台运行的指令。如果此时对目标应用程序执行内存回收操作,也会影响目标应用程序的响应速度。因此,需要在对目标应用程序执行内存回收操作前,先判断在第一计时时间内是否接收到用户发出的用户操作指令或者目标应用程序是否置于前台运行。
步骤S204,执行第一轮内存回收操作。
如确定在第一计时时间内,目标应用程序未接收到用户操作指令并且未置于前台运行,在执行第一轮内存回收操作。也就是说,如果在第一计时时间内,目标应用程序接收到用户操作指令或者曾经置于前台运行,则不对目标应用程序执行内存回收操作,以确保目标应用程序能够快速的响应用户的操作指令。本实施例中,第一轮内存回收操作是目标应用程序执行第一预设次数的内存回收操作,例如,第一预设次数是一次,则目标应用程序仅执行一次内存回收操作。
目标应用程序执行内存回收操作主要是对目标应用程序的进程执行内存回收操作,具体的,将目标应用程序的非活跃物理页回收,并且回收目标应用程序的一部分活跃物理页,从而充分回收目标应用程序的内存资源。对目标应用程序的进程进行内存回收的具体操作将在下文详细介绍。
步骤S205,判断是否到达第二计时时间,如是,转入步骤S206,否则,继续等待。
在到达第一计时时间并且执行一次内存回收操作后,还可以对目标应用程序执行第二轮内存回收操作,以充分回收目标应用程序所占用的内存资源。但是,如果两次内存回收操作之间的间隔时间很短,则在执行第一轮内存回收操作后,新产生的非活跃物理页不多,并且可回收的活跃物理页也不多,此时执行第二轮内存回收操作可回收的内存非常少。因此,需要限制两次内存回收操作的执行时间。基于这一考虑,需要设置第二计时时间,优选的,第二计时时间可以是一个长于第一计时时间的时间。例如,第二计时时间的长度是30分钟。当然,第二计时时间可以是系统默认设置的时间长度,也可以是用户自行设定的时间长度。
步骤S206,判断在第二计时时间内,目标应用程序是否未接收到用户操作指令或者未置于前台运行,如是,转入步骤S207,否则,结束流程。
如上描述的,如果在第二计时时间内,用户发出针对目标应用程序的操作指令,表示用户当前需要对目标应用程序执行操作。相同的,如果在第二计时时间内,目标应用程序置于前台运行,也表示用户对目标应用程序执行操作。因此,在第二计时时间内,一旦接收到针对目标应用程序的用户操作指令或者监测到目标应用程序曾经置于前台运行,则不应该对目标应用程序执行内存回收操作。
步骤S207,执行第二轮内存回收操作。
如果步骤S206中,确定在第二计时时间内,目标应用程序未接收到用户操作指令并且未置于前台运行,对目标应用程序执行第二轮内存回收操作。优选的,每一次内存回收操作的具体操作方式相同,都是获取目标应用程序的进程后,针对进程执行内存回收,也就是回收非活跃物理页以及可回收的活跃物理页。第二轮内存回收操作可以是只执行一次内存回收操作,也可以是执行不少于第二预设次数的内存回收操作,第二预设次数大于第一预设次数,如第二预设次数是2次或者3次。
优选的,执行第二轮内存回收操作时,可以连续执行两次以上的内存回收操作,以充分的清理目标应用程序因软重启而产生的碎片,确保目标应用程序可以释放较多的内存,也就是第二轮内存回收操作的多次内存回收操作之间可以不设置间隔时间,或者间隔时间非常短,如一分钟或者两分钟,通过连续多次的内存回收操作以充分回收目标应用程序的内存。这样,可以对目标应用程序执行深度的内存回收操作,从而回收更多的内存。
本发明对目标应用程序进行的内存回收操作首先是获取目标应用程序当前正在运行的目标进程,如获取目标应用程序的进程列表,从而确定目标应用程序当前正在运行的目标进程,然后分别对每一目标进程执行一次内存回收操作。执行内存回收操作主要是对物理页进行回收,而判断物理页存储数据的价值高低可以有很多角度,现有技术通常以物理页的活跃程度(或称活跃度)高低来评价物理页存储数据的价值高低,物理页的活跃度越高,系统通常认为该物理页存储数据的价值越高。为了比较物理页的活跃度,现有技术引入近期最少使用链表LRU,是按照近期的使用情况排列的,最少使用的存在链表末尾。INACTIVE_ANON、ACTIVE_ANON、INACTIVE_FILE和ACTIVE_FILE这 4个链表中的物理页是可以回收的,ANON代表匿名映射,FILE代表文件映射,INACTIVE代表处于非活动状态,ACTIVE代表处于活动状态,ACTIVE链表中的物理页的活跃度高于INACTIVE链表中的物理页,也就是说,处于活动状态的物理页,它的活跃度高于处于非活动状态的物理页。当内存不足时,系统会优先对LRU中的INACTIVE_ANON和INACTIVE_FILE这两个链表中的物理页进行回收,当进程需要使用回收的物理页上的内容时,需要从磁盘中加载相应内容。
但是,前台运行的应用进程或者后台运行的优先级高的应用进程,其占用的物理页也可能处于INACTIVE_ANON和INACTIVE_FILE这两个链表中,对这两个链表中前台进程和后台优先级高的进程对应的物理页进行回收,会更大程度的增加系统磁盘读写的次数,并且,增加用户的等待时长,降低用户体验。
可见,应用进程也应作为评价物理页价值高低的一个权重。为此,现有技术提出针对进程进行内存回收的方法,首先选定作为内存回收对象的目标进程,并获取目标进程的物理页,之后查找未被目标进程使用的目标物理页并回收目标物理页,未被目标进程使用的目标物理页主要指处于非活动状态的物理页。
在实际场景测试中,对于一个退到后台一分钟的进程,对其占用的所有物理页进行回收,其中,该进程在INACTIVE_ANON和INACTIVE_FILE链表中的物理页只占用到所有物理页比例的5%,而大部分物理页是该进程在ACTIVE_ANON和ACTIVE_FILE链表中的物理页。可见,现有的针对进程进行内存回收的方法回收效率很低。
为了提高回收效率,需要对ACTIVE_ANON和ACTIVE_FILE链表中的物理页进行选择性回收,优选的,便是回收其中价值较低的物理页,或者说,活跃度较低的物理页。因此,本实施例针对目标应用程序的目标进行内存回收时,采用如图3所示的步骤:
步骤S301,获取目标进程对应的目标物理页。
获取进程对应的物理页的方式可以根据进程识别号PID,找到进程的虚拟内存空间VMA,遍历VMA可以找到进程对应的物理页,还可以通过其他方式查找进程对应的物理页,此处不做具体限定。目标物理页可以为目标进程对应的全部物理页,也可以为目标进程对应的部分物理页。对目标进程的回收可以通过串行方式进行,也就是说每次回收只选择一个物理页作为目标物理页,执行本发明的回收流程,或者也可以通过并行方式进行,也就是说同时选择多个物理页作为目标物理页,对多个物理页同时执行本发明的回收流程。
步骤S302,读取目标物理页的活跃度的值。
获取目标进程对应的目标物理页之后,可以读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关,也就是说,物理页的活动程度越高,则其活跃度的值越大。并且,物理页的活跃度的可选值应不少于两个。
需要说明的是,活跃度的值可以为数值,此时可以按照数值大小确定活跃度的值的大小,但是,活跃度的值不应仅限为数值,只要根据预设的比较标准能够判定不同值的高低即可。
步骤S303,若目标物理页的活跃度的值高于回收标准,则降低目标物理页的活跃度,活跃度的值高于回收标准的物理页处于活动状态。
读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,回收标准可以视为是活动状态的物理页的活跃度和非活动状态的物理页的活跃度之间边界值。若判定目标物理页的活跃度的值高于回收标准,则可以降低目标物理页的活跃度,若判定目标物理页的活跃度的值不高于回收标准,则可以执行其他操作,比如回收目标物理页。
步骤S304,再次读取目标物理页的活跃度的值。
在步骤S303之后,可以读取目标物理页的活跃度的值。若在步骤S304之前,在步骤S303中所读取的目标物理页被访问,则该目标物理页的活跃度的值会增加。如果在步骤S304之前,在步骤S303中所读取的目标物理页没有被访问,则目标物理页的活跃度的值将维持步骤S303操作后,即被降低活跃度之后的值。
步骤S305,若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。
再次读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。若目标物理页的活跃度的值不高于回收标准时,表明目标物理页处于非活动状态,现有技术有很多对非活动状态的物理页进行回收的方法,因此本实施例不再赘述对非活动状态的物理页的回收方法。
当然,在第一种内存回收方式中,如果步骤S303和步骤S304之间的时间间隔极短,极限情况下,可以理解成步骤S303降低目标物理页的活跃度之后,直接执行步骤S304读取目标物理页的活跃度的值,若活跃度的可选值只有两个,这样,几乎所有目标进程对应的处于活动状态的物理页均被回收,相当于系统自动关闭目标进程,增加用户等待时长。因此,需要在第一实施例中增加反悔机制,比如在步骤S303和步骤S304之间设定适当的时间间隔,作为反悔时长,在设定的时间间隔内若目标物理页被访问,则其活跃度的值升高,降低被回收的可能性,有利于防止活跃度较高的物理页被回收。基于这种思路,本发明对目标应用程序的目标进程内存回收方法第二种方式的流程图如图4所示。
步骤S401,获取目标进程对应的目标物理页。
步骤S402,根据目标进程的优先级设置预设时长,预设时长与目标进程的优先级正相关。
反悔时长也可以称作预设时长,可以是系统默认的固定时长,优选的,在确定针对目标进程进行回收之后,可以读取目标进程优先级,并根据目标进程的优先级设置预设时长,以使得预设时长与目标进程的优先级正相关,也就是说,优先级越高的进程,为其设置的预设时长越长。
或者,也可以根据内存占用率设置预设时长,预设时长与内存占用率负相关,也就是说,内存占用率越高,则预设时长越短,回收效率越高,以尽快回收更多内存。
步骤S403,读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关。
步骤S404,判断目标物理页的活跃度的值是否高于回收标准,若是,则执行步骤S405,若否,则执行步骤S407。
在读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,若是,则执行步骤S405,若否,则执行步骤S407。
步骤S405,降低目标物理页的活跃度。
若判定目标物理页的活跃度的值高于回收标准,则可以降低目标物理页的活跃度。
步骤S406,开启计时器。
降低目标物理页的活跃度之后,可以开启计时器,记录时长。当计时器记录的时长到达预设时长时,重复执行步骤S403至步骤S404可以只重复一次,也就是说,若第一次重复执行步骤S404时,仍然判定目标物理页的活跃度的值高于回收标准,则不再执行步骤S405,而是直接退出对目标物理页的回收流程,也就是说,对活动状态的物理页只进行一次回收尝试。为了提高回收效率,回收更多的内存,优选的,对活动状态的物理页进行两次或两次以上的回收尝试,也就是说,可以对步骤S403至步骤S404重复执行两次或两次以上。
重复次数可以预设为某个有限数值,实际场景测试结果表明,前三次回收尝试的回收效率更高,第四次及之后的回收尝试回收效率很低,因此重复次数可以设置为三次。另外,也可以根据内存占用率设置重复次数,内存占用率越高,回收次数越多。或者,在实际使用中,也可以根据其他考虑对重复次数进行设置,本实施例对此不做限定。
需要说明的是,步骤S402在本发明实施例中的执行顺序并不限于上述描述的顺序,由于预设时长用于步骤S406,因此,只要在步骤S406之前执行即可,具体时序不做限定。
步骤S407,回收目标物理页。
若步骤S404判定目标物理页的活跃度的值不高于回收标准,则回收目标物理页。
本发明所设置的反悔机制,除了如第二种实施方法中,通过设定适当的时间间隔,作为反悔时长,以尽量防止活跃度较高的物理页被回收,还可以对高于回收标准的活跃度设置两个或两个以上可选的值,这样,活跃度更高的物理页在回收尝试中更不容易被回收。因此,本发明对目标应用程序的目标进程进行内存回收方法第三种实施方式的流程如图5所示。
步骤S501,设置物理页活跃度的可选值,包括第一值、第二值、第三值和第四值。
设置物理页活跃度的可选值,比如可以包括第一值、第二值、第三值和第四值,其中,第一值不高于回收标准,第二值低于第三值,且高于回收标准,第三值低于第四值。或者可以说,各个可选值代表了物理页的活跃度的级数,值越高,活跃度的级数越高。
作为举例,可以通过设置标志位来评估物理页的活动程度,假设设置两个标志位,每个标志位的可选值为0和1,活跃度的值可以用(第一标志位数值,第二标志位数值)来代表,那么活跃度的可选值包括(0,0)、(0,1)、(1,0)和(1,1),并预设比较标准(0,0)低于(1,0)低于(0,1)低于(1,1),也就是说(0,0)、(1,0)、(0,1)、(1,1)逐级升高。
在实际使用中,也可以设置可选值的范围,而不具体设置各个值。
步骤S502,获取目标进程对应的目标物理页。
步骤S503,读取目标物理页的活跃度的值。
步骤S502至步骤S503分别与第一种实施方式中的步骤S301至步骤S302相同,此处不再赘述。
步骤S504,判断目标物理页的活跃度的值是否高于回收标准,若是,则执行步骤S505,若否,则执行步骤S507。
在读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,若是,则执行步骤S505,若否,则执行步骤S507。
步骤S505,按照第一幅度降低目标物理页的活跃度。
若判定目标物理页的活跃度的值高于回收标准,则可以按照第一幅度降低目标物理页的活跃度,在本发明实施例中,第一幅度可以为每次降低一级。
步骤S506,开启计时器。
可以设置有预设时长,作为反悔时长,关于预设时长的设置,请参阅第二种实施方式,本实施例中不再赘述。
当计时器记录的时长到达预设时长时,重复执行步骤S503至步骤S504。可以只重复一次,也就是说,若第一次重复执行步骤S504时,仍然判定目标物理页的活跃度的值高于回收标准,则不再执行步骤S505,而是直接退出对目标物理页的回收流程,也就是说,对活动状态的物理页只进行一次回收尝试。为了提高回收效率,回收更多的内存,优选的,对活动状态的物理页进行两次或两次以上的回收尝试,也就是说,可以对步骤S503至步骤S504重复执行两次或两次以上。
重复次数可以预设,实际场景测试结果表明,前三次回收尝试的回收效率更高,第四次及之后的回收尝试回收效率很低,因此重复次数可以设置为三次。另外,也可以根据内存占用率设置重复次数,内存占用率越高,回收次数越多。或者,在实际使用中,也可以根据其他考虑对重复次数进行设置,此处不做限定。
步骤S507,回收目标物理页。
若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。
下面按照第三实施例提供的方法,以首次读取的活跃度的值的不同情况的进行举例说明,假设步骤S503至步骤S504的最大重复执行次数设置为3次:
一、假设在回收尝试的过程中,目标物理页未被访问,其活跃度的值未增加,那么:
若首次读取目标物理页的活跃度的值为第四值,那么执行步骤S505后,目标物理页的活跃度的值被设置为第三值,之后第一次重复执行步骤S503至步骤S504,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低一级,设置为第二值,之后第二次重复执行步骤S503至步骤S504,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低一级,设置为第一值,之后第三次重复执行步骤S503至步骤S504,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第四值,那么该物理页至少需要三次重复执行步骤S503至步骤S504方能被回收。
若首次读取目标物理页的活跃度的值为第三值,那么执行步骤S505后,目标物理页的活跃度的值被设置为第二值,之后第一次重复执行步骤S503至步骤S504,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低一级,设置为第一值,之后第二次重复执行步骤S503至步骤S504,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第三值,那么该物理页至少需要两次重复执行步骤S503至步骤S504方能被回收。
若首次读取目标物理页的活跃度的值为第二值,那么执行步骤S505后,目标物理页的活跃度的值被设置为第一值,之后第一次重复执行步骤S503至步骤S504,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第二值,那么该物理页至少需要一次重复执行步骤S503至步骤S504方能被回收。
若首次读取目标物理页的活跃度的值为第一值,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第一值,那么该物理页不需要重复执行步骤S503至步骤S504就能被回收。
可见,执行本发明的回收步骤之前,活跃度的值越高的物理页,其越不容易被回收,也就是说,本发明能够优先回收活跃度较低的物理页,实现对活动状态的物理页的精细化分类回收。
二、假设在回收尝试的过程中,目标物理页被访问,则其活跃度的值会增加,那么和第一种情况相比,系统需要更多次的回收尝试才能对目标物理页进行回收。在实际应用中,系统通常对物理页进行有限次数的回收尝试,若在有限次数的回收尝试后,目标物理页的活跃度的值仍然高于回收标准,则表明目标物理页的活跃度很高,对于目标进程来说是价值更高的物理页,系统不会回收目标物理页,在进程运行效果与内存资源充足之间取得更加合理的平衡。
进一步的,目标进程需要进行回收尝试的活动物理页包括目标进程在ACTIVE_ANON链表中的物理页(即活动状态的匿名页)和ACTIVE_FILE链表中对应的物理页(即活动状态的文件页)。其中,匿名页的回收方式为页交换,回收耗时长,效率低;而文件页的回收方式为页丢弃或页回写,回收耗时短,效率高。可见,对活动状态的匿名页的回收代价更高,因此,和活动状态的匿名页相比,可以降低对活动状态的文件页的回收难度,提高文件页的回收几率,更多的对文件页进行回收,以提高对活动物理页的整体回收效率。
增加对活动状态的匿名页的回收难度,可以采用多种方法,比如,可以增加匿名页的反悔时长,比如可以减少活跃度的可选值,或者也可以增加对活跃度的降低幅度。这里,我们对第三种方式进行举例说明,若第三实施例用于匿名页的回收,那么请参见6,本发明对目标应用程序的目标进程进行内存回收第四实施方式包括以下步骤:
步骤S601,设置物理页活跃度的可选值,包括第一值、第二值、第三值和第四值。
设置物理页活跃度的可选值,比如可以包括第一值、第二值、第三值和第四值,其中,第一值不高于回收标准,第二值低于第三值,且高于回收标准,第三值低于第四值。或者可以说,各个可选值代表了物理页的活跃度的级数,值越高,活跃度的级数越高。
作为举例,可以通过设置标志位来评估物理页的活动程度,假设设置两个标志位,每个标志位的可选值为0和1,活跃度的值可以用(第一标志位数值,第二标志位数值)来代表,那么活跃度的可选值包括(0,0)、(0,1)、(1,0)和(1,1),并预设比较标准(0,0)低于(1,0)低于(0,1)低于(1,1),也就是说(0,0)、(1,0)、(0,1)、(1,1)逐级升高。
步骤S602,获取目标进程对应的目标物理页。
步骤S603,读取目标物理页的活跃度的值。
步骤S602至步骤S603分别与第一实施例中的步骤S301至步骤S302相同,此处不再赘述。
步骤S604,判断目标物理页的活跃度的值是否高于回收标准,若是,则执行步骤S605,若否,则执行步骤S607。
在读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,若是,则执行步骤S605,若否,则执行步骤S607。
步骤S605,若目标物理页的类型为文件页,则按照第二幅度降低目标物理页的活跃度。
在获取目标进程对应的目标物理页之后,在降低目标物理页的活跃度之前,可以根据目标物理页的类型来设置其活跃度的降低幅度。当目标物理页为匿名页时,则按照第一幅度降低目标物理页的活跃度;当目标物理页为文件页时,则按照第二幅度降低目标物理页的活跃度,并且第一幅度低于第二幅度。在第三实施例中,第一幅度为降低一级,可以作为当目标物理页为匿名页时的回收流程,此处不再赘述。本实施例中主要用于举例说明当目标物理页的类型为文件页时,对目标物理页的回收流程。由于第一幅度低于第二幅度,那么本实施例中第二幅度可以为每次降低两级。
步骤S606,开启计时器。
可以设置有预设时长,作为反悔时长,关于预设时长的设置,请参见第二实施例,本发明实施例中不再赘述。
当计时器记录的时长到达预设时长时,重复执行步骤S603至步骤S604。可以只重复一次,也就是说,若第一次重复执行步骤S603至步骤S604时,仍然判定目标物理页的活跃度的值高于回收标准,则不再执行步骤S605,而是直接退出对目标物理页的回收流程,也就是说,对活动状态的物理页只进行一次回收尝试。为了提高回收效率,回收更多的内存,优选的,对活动状态的物理页进行两次或两次以上的回收尝试,也就是说,可以对步骤S603至步骤S604重复执行两次或两次以上。
重复次数可以预设,实际场景测试结果表明,前三次回收尝试的回收效率更高,第四次及之后的回收尝试回收效率很低,因此重复次数可以设置为三次。另外,也可以根据内存占用率设置重复次数,内存占用率越高,回收次数越多。或者,在实际使用中,也可以根据其他考虑对重复次数进行设置,此处不做限定。
步骤S607,回收目标物理页。
若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。
下面按照第四实施例提供的方法,以首次读取的活跃度的值的不同情况的进行举例说明,假设步骤S603至步骤S604的最大重复执行次数设置为3次:
一、假设在回收尝试的过程中,目标物理页未被访问,其活跃度的值未增加,那么:
若首次读取目标物理页的活跃度的值为第四值,那么执行步骤S605后,目标物理页的活跃度的值被设置为第二值,之后第一次重复执行步骤S603至步骤S604,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低两级,由于最低的级数为第一值,因此设置为第一值,之后第二次重复执行步骤S603至步骤S604,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第四值,那么该物理页至少需要两次重复执行步骤S603至步骤S604方能被回收。
若首次读取目标物理页的活跃度的值为第三值,那么执行步骤S605后,目标物理页的活跃度的值被设置为第一值,之后第一次重复执行步骤S603至步骤S604,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第三值,那么该物理页至少需要一次重复执行步骤S603至步骤S604方能被回收。
若首次读取目标物理页的活跃度的值为第二值,那么执行步骤S605后,目标物理页的活跃度的值被设置为第一值,之后第一次重复执行步骤S603至步骤S604,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第二值,那么该物理页至少需要一次重复执行步骤S603至步骤S604方能被回收。
若首次读取目标物理页的活跃度的值为第一值,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第一值,那么该物理页不需要重复执行步骤S603至步骤S604就能被回收。
可见,执行本发明的回收步骤之前,活跃度的值越高的物理页,其越不容易被回收,也就是说,本发明能够优先回收活跃度较低的物理页,实现对活动状态的物理页的精细化分类回收。
与第三实施方式相比,本实施方式通过增加活跃度的值的降低幅度,有利于减少步骤S603至步骤S604的重复执行次数,提高对活动状态的文件页的回收效率。
二、假设在回收尝试的过程中,目标物理页被访问,则其活跃度的值会增加,那么和第一种情况相比,系统需要更多次的回收尝试才能对目标物理页进行回收。在实际应用中,系统通常对物理页进行有限次数的回收尝试,若在有限次数的回收尝试后,目标物理页的活跃度的值仍然高于回收标准,则表明目标物理页的活跃度很高,对于目标进程来说是价值更高的物理页,系统不会回收目标物理页,在进程运行效果与内存资源充足之间取得更加合理的平衡。
通过第三实施例的方法和第四实施例的方法可以分别实现对目标进程的处于活动状态的匿名页和文件页的回收,如下表1,为按照第三实施例的方法和第四实施例的方法进行页面回收的一次实际场景测试。可以理解的是,表1中的测试数据仅为一次测试的结果,再次测试时,由于使用的终端不同、对应用程序的使用情况不同等,均会导致测试数据的变化,因此,表1的数据仅用于定性说明本发明对各应用的回收效果,而不用于定量限定本发明对各应用的回收效率。
应用名称 第一次回收率 第二次回收率 第三次回收率 第四次回收率 第五次回收率 累计进行三次回收的回收率 累计进行五次回收的回收率
豆瓣 2.64% 8.27% 26.73% 0.46% 0.08% 34.56% 35.00%
QQ 4.62% 33.02% 11.55% 1.90% -0.97% 43.49% 44.10%
微信 1.79% 12.15% 19.32% -0.04% 0.32% 30.39% 30.60%
今日头条 5.84% 16.98% 17.35% -0.33% -0.85% 35.39% 34.70%
QQ浏览器 11.72% 17.80% 6.53% 1.54% -1.94% 32.17% 32.00%
手机管家 4.87% 20.91% 17.58% -0.62% 0.72% 37.99% 38.10%
应用中心 24.46% 18.66% 11.40% 0.23% -2.54% 45.56% 44.40%
新浪微博 8.69% 25.51% 32.80% -0.52% -3.39% 54.29% 53.50%
表1
分别以豆瓣、QQ、微信、今日头条、QQ浏览器、手机管家、应用中心和新浪微博等应用作为目标应用,即测试对象,以目标应用中的进程作为目标进程,对目标进程进行页面回收,以实现对目标应用的内存回收。以豆瓣为例,在测试过程中,首先对豆瓣的目标进程的匿名页执行一次步骤S503至步骤S504或者对其文件页执行一次步骤S603至步骤S604,简称为对豆瓣进行第一次回收,根据回收测试前豆瓣占用的内存大小和第一次回收后豆瓣占用的内存大小,可以计算得到对豆瓣的第一次回收率,为2.64%;之后对豆瓣的目标进程的匿名页第二次执行步骤S503至步骤S504、或者对其文件页第二次执行步骤S603至步骤S604,简称为对豆瓣进行第二次回收,根据第一次回收后豆瓣占用的内存大小和第二次回收后豆瓣占用的内存大小,可以计算得到对豆瓣的第二次回收率,为8.27%;依此类推,可以得到对豆瓣的第三次回收率为26.73%、对豆瓣的第四次回收率为0.46%、对豆瓣的第五次回收率为0.08%。
观察表1中同一应用不同次回收的回收率,可以看出,各应用在前三次的回收率均远远大于第四次和第五次的回收率,并且,累计进行三次回收的回收率(根据第三次回收后应用占用的内存大小和回收测试前应用占用的内存大小计算得到)和累计进行五次回收的回收率相差不大,说明回收次数过多,回收效率不高,且浪费资源,因此优选的是对应用进行有限次数的页面回收。
另外,现有的针对进程进行回收的方法,只对非活动状态的物理页进行回收,回收率对应于表1中的第一次回收率,通过比较表1中同一应用的第一次回收率和累计进行三次回收的回收率,可以发现,后者是前者的数倍,倍数在2倍至17倍之间,可见,和现有技术相比,本发明实现了更高的回收率,对于缓解系统内存压力具有明显效果。
综上所述,本发明提供了一种针对进程进行内存回收的方法,并且能够对活动状态的物理页进行选择性回收,极大的提高了内存回收的效率。并且,由于针对不同类型的应用程序采用不同的内存回收策略,如针对用户较为喜爱的应用程序,执行内存回收操作的次数较少,而针对用户喜爱程度较低的应用程序,则执行内存回收操作的次数较多,从而避免对用户较为喜爱的应用程序因频繁的执行进程加载的操作而影响响应速度。
上面对本发明实施例中的内存回收方法进行了描述,下面对本发明实施例内存回收装置进行描述。
参见图7,本发明的内存回收装置包括:
第一获取模块701,用于获取对目标应用程序执行软重启的指令。例如,当后台运行的应用程序因异常而被关闭后,系统将模拟用户点击该应用程序的图标,实现该应用程序在后台静默的重启,也就是发出软重启指令。
软重启模块702,用于对目标应用程序执行软重启操作。例如,加载目标应用程序启动的进程、获取用户数据、为目标应用程序分配资源,包括分配CPU资源、内存资源等。当然,为了不影响用户的操作,软重启的操作是在后台静默的进行,也就是不会在前台显示目标应用程序的欢迎页面,也不会在前台运行,目标应用程序重启后,将执行退到后台运行。
内存回收模块703,用于在确定目标应用程序执行完毕软重启后,执行内存回收操作,例如,获取目标应用程序正在运行的目标进程,并且回收目标进程的物理页,包括非活跃物理页以及可回收的活跃物理页。
计时模块704,在确定目标应用程序执行完毕软重启操作后开启计时器,并判断是否到达第一计时时间。
优选的,内存回收模块703是在确定当前时间到达第一计时时间后,对目标应用程序执行第一轮内存回收操作。
优选的,内存回收操作可以执行两轮,例如,在执行第一轮内存回收操作后,开启计时器,并判断是否到达第二计时时间,如是,目标应用程序执行第二轮内存回收操作;并且,第二计时时间的时间长度大于第一计时时间的时间长度。优选的,目标应用程序执行第一轮内存回收操作时,目标应用程序执行第一预设次数的内存回收操作;而目标应用程序执行第二轮内存回收操作时,目标应用程序执行不少于第二预设次数的内存回收操作,并且,第一预设次数小于第二预设次数。
此外,执行第一轮内存回收操作前,需要确定在第一计时时间内,未收到对目标应用程序的用户操作指令或者目标应用程序未置于前台运行,而执行第二轮内存回收操作前,需要确定在第二计时时间内,未收到对目标应用程序的用户操作指令或者目标应用程序未置于前台运行,也就是,如果在第一计时时间内或者第二计时时间内,收到对目标应用程序的用户操作指令或者目标应用程序置于前台运行,则不执行目标应用程序的内存回收操作。
可见,本发明在目标应用程序执行软重启后对目标应用程序执行内存回收操作,甚至执行多次内存回收操作,可以实现目标应用程序完成软重启后的内存回收,避免目标应用程序占用大量的内存。
内存回收模块703可以有多种实现方式,一种具体的实现方式如图8所示,本发明实施例中内存回收模块703的第一实施例包括:
第二获取模块801,用于获取目标应用程序对应的目标进程,并且获取目标进程对应的目标物理页。
第一读取模块802,用于读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关。
降低模块803,用于当目标物理页的活跃度的值高于回收标准时,降低目标物理页的活跃度,并且,活跃度的值高于回收标准的物理页处于活动状态。
第二读取模块804,用于在降低模块降低目标物理页的活跃度之后,再次读取目标物理页的活跃度的值。
回收模块805,用于当目标物理页的活跃度的值不高于回收标准时,回收目标物理页。
请参见图9,本发明实施例中内存回收模块703第二实施例包括:
第三获取模块901,用于获取目标应用程序对应的目标进程,并获取目标进程对应的目标物理页。
第一读取模块902,用于读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关。
降低模块903,用于当目标物理页的活跃度的值高于回收标准时,降低目标物理页的活跃度,活跃度的值高于回收标准的物理页处于活动状态。
优选的,降低模块903包括有设置单元904以及降低单元905,其中,设置单元904用于当目标物理页的活跃度为第三值时,将目标物理页的活跃度设置为第二值;当目标物理页的活跃度为第二值时,将目标物理页的活跃度设置为第一值。降低单元905用于当目标物理页为匿名页时,按照第一幅度降低目标物理页的活跃度;当目标物理页为文件页时,按照第二幅度降低目标物理页的活跃度;并且,第一幅度低于第二幅度。
第二设置模块906,用于在计时模块907开启计时器之前,根据目标进程的优先级设置预设时长,预设时长与目标进程的优先级正相关。
计时模块907,用于在降低目标物理页的活跃度之后,在读取目标物理页的活跃度的值之前,开启计时器。
第二读取模块908,用于在降低模块降低目标物理页的活跃度之后,读取目标物理页的活跃度的值。
回收模块909,用于当目标物理页的活跃度的值不高于回收标准时,回收目标物理页。
在实际使用中,也可以不采用第二设置模块,而是采用第一设置模块,第一设置模块用于在计时模块开启计时器之前,根据内存占用率设置预设时长,预设时长与内存占用率负相关。
本发明实施例还提供了一种终端,如图10所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端设备可以为包括手机、平板电脑、个人数字助理(英文全称:Personal Digital Assistant,英文缩写:PDA)等任意终端设备。
参考图10,终端设备包括:电源1003、存储器1002、处理器1001以及存储在存储器中并可在处理器上运行的计算机程序。其中,处理器1001执行计算机程序时实现上述各个信息处理方法实施例中的步骤,例如图1所示的步骤S101至S104等。或者,处理器执行计算机程序时实现上述各装置实施例中各模块或单元的功能。
示例性的,计算机程序可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器中,并由处理器执行,以完成本发明。上述的一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在终端设备中的执行过程。
本领域技术人员可以理解,图10中示出的结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,例如上述的终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器 (Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是终端设备的控制中心,利用各种接口和线路连接整个终端设备的各个部分。
存储器可用于存储计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现终端设备的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(SmartMedia Card, SMC),安全数字(Secure Digital, SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
当然,上述的方案只是本发明优选的实施方案,实际应用是还可以有更多的变化,例如,待处理信息的设置方式改变、对待处理信息的不可见方式的改变,这样的改变并不影响本发明的实施,也应该包括在本发明的保护范围内。

Claims (9)

1.一种内存回收方法,应用于终端设备,其特征在于,该方法包括:
获取对目标应用程序执行软重启的指令,所述目标应用程序执行软重启操作;
判断所述目标应用程序是否执行完毕软重启操作,如是,所述目标应用程序执行内存回收操作;
对所述目标应用程序执行内存回收操作包括:
获取所述目标应用程序正在运行的目标进程,并获取所述目标进程对应的目标物理页;
读取所述目标物理页的活跃度的值,所述目标物理页的活跃度用于标记所述目标物理页的活动程度,所述目标物理页的活跃度的值与所述目标物理页的活动程度正相关;
若所述目标物理页的活跃度的值高于回收标准,且活跃度的值高于所述回收标准的物理页处于活动状态,则降低所述目标物理页的活跃度;
再次读取所述目标物理页的活跃度的值;
若所述目标物理页的活跃度的值不高于所述回收标准,则回收所述目标物理页。
2.根据权利要求1所述的内存回收方法,其特征在于,确定所述目标应用程序执行完毕软重启操作后,所述目标应用程序执行内存回收操作包括:
确定所述目标应用程序执行完毕软重启操作后开启计时器,并判断是否到达第一计时时间,如是,所述目标应用程序执行第一轮内存回收操作。
3.根据权利要求2所述的内存回收方法,其特征在于,确定到达所述第一计时时间后,所述目标应用程序执行第一轮内存回收操作前,还执行:
确定在所述第一计时时间内,未收到对所述目标应用程序的用户操作指令或者所述目标应用程序未置于前台运行。
4.根据权利要求2或3所述的内存回收方法,其特征在于,所述目标应用程序执行第一轮内存回收操作后,还执行:
开启所述计时器,并判断是否到达第二计时时间,如是,所述目标应用程序执行第二轮内存回收操作;
所述第二计时时间的时间长度大于所述第一计时时间的时间长度。
5.根据权利要求4所述的内存回收方法,其特征在于,所述目标应用程序执行第一轮内存回收操作包括:所述目标应用程序执行第一预设次数的内存回收操作;
所述目标应用程序执行第二轮内存回收操作包括:所述目标应用程序执行不少于第二预设次数的内存回收操作;
所述第一预设次数小于所述第二预设次数。
6.一种内存回收装置,应用于终端设备,其特征在于,该装置包括:
获取模块,用于获取对目标应用程序执行软重启的指令;
软重启模块,用于对所述目标应用程序执行软重启操作;
内存回收模块,用于确定所述目标应用程序执行完毕软重启操作后,对所述目标应用程序执行内存回收操作;
内存回收模块包括:获取模块,用于获取目标进程对应的目标物理页;第一读取模块,用于读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关;降低模块,用于当目标物理页的活跃度的值高于回收标准时,降低目标物理页的活跃度,活跃度的值高于回收标准的物理页处于活动状态;第二读取模块,用于在降低模块降低目标物理页的活跃度之后,再次读取目标物理页的活跃度的值;回收模块,用于当目标物理页的活跃度的值不高于回收标准时,回收目标物理页。
7.根据权利要求6所述的内存回收装置,其特征在于,还包括:
计时模块,用于在确定所述目标应用程序执行完毕软重启操作后开启计时器,并判断是否到达第一计时时间;
所述内存回收模块具体用于:在到达所述第一计时时间后,对所述目标应用程序执行第一轮内存回收操作。
8.一种终端设备,其特征在于,所述终端设备包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1至5中任意一项所述内存回收方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1至5中任意一项所述内存回收方法的步骤。
CN201710676690.6A 2017-08-09 2017-08-09 内存回收方法及装置、终端设备及计算机可读存储介质 Active CN108287761B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710676690.6A CN108287761B (zh) 2017-08-09 2017-08-09 内存回收方法及装置、终端设备及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710676690.6A CN108287761B (zh) 2017-08-09 2017-08-09 内存回收方法及装置、终端设备及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN108287761A CN108287761A (zh) 2018-07-17
CN108287761B true CN108287761B (zh) 2020-11-06

Family

ID=62831608

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710676690.6A Active CN108287761B (zh) 2017-08-09 2017-08-09 内存回收方法及装置、终端设备及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN108287761B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109857555B (zh) * 2019-01-15 2023-02-28 Oppo广东移动通信有限公司 内存回收方法及装置、存储介质和电子设备
CN110737532B (zh) * 2019-10-15 2022-04-12 四川长虹电器股份有限公司 一种Android电视浏览器内存优化的方法
CN114443277A (zh) * 2020-10-31 2022-05-06 华为终端有限公司 内存管理方法、装置、电子设备以及计算机可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103324500A (zh) * 2013-05-06 2013-09-25 广州市动景计算机科技有限公司 一种回收内存的方法及装置
CN104216771A (zh) * 2013-05-30 2014-12-17 华为技术有限公司 软件程序的重启方法及装置
CN105335171A (zh) * 2014-06-24 2016-02-17 北京奇虎科技有限公司 应用程序常驻操作系统后台的方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10268493B2 (en) * 2015-09-22 2019-04-23 Amazon Technologies, Inc. Connection-based resource management for virtual desktop instances

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103324500A (zh) * 2013-05-06 2013-09-25 广州市动景计算机科技有限公司 一种回收内存的方法及装置
CN104216771A (zh) * 2013-05-30 2014-12-17 华为技术有限公司 软件程序的重启方法及装置
CN105335171A (zh) * 2014-06-24 2016-02-17 北京奇虎科技有限公司 应用程序常驻操作系统后台的方法及装置

Also Published As

Publication number Publication date
CN108287761A (zh) 2018-07-17

Similar Documents

Publication Publication Date Title
CN108228341B (zh) 内存回收方法及装置、终端设备及计算机可读存储介质
CN108228449B (zh) 终端设备控制方法及装置、终端设备及计算机可读存储介质
CN108205473B (zh) 内存处理方法及装置、计算机装置及计算机可读存储介质
CN108205498B (zh) 内存回收方法及装置、计算机装置及计算机可读存储介质
CN108205471B (zh) 内存回收方法及装置、计算机装置及计算机可读存储介质
CN108205501B (zh) 内存回收方法及装置、计算机装置及计算机可读存储介质
CN111324303B (zh) Ssd垃圾回收方法、装置、计算机设备及存储介质
US10437519B2 (en) Method and mobile terminal for processing write request
CN108287761B (zh) 内存回收方法及装置、终端设备及计算机可读存储介质
CN108287760B (zh) 终端设备控制方法及装置、终端设备及计算机可读存储介质
CN107544755B (zh) 一种数据读写的控制方法和装置
CN108228339B (zh) 一种内存回收方法及装置、终端设备及计算机可读存储介质
CN112051970A (zh) 混合驱动器的脏数据管理
CN113392037B (zh) 内存回收方法、装置、计算机设备和存储介质
CN108228342B (zh) 终端设备控制方法及装置、终端设备及计算机可读存储介质
CN108228340B (zh) 终端控制方法及装置、终端设备及计算机可读存储介质
CN117492662B (zh) 预读取的确定方法和装置、存储介质及电子设备
CN108228472B (zh) 终端设备控制方法及装置、终端设备及计算机可读存储介质
CN117762827A (zh) 一种内存优化的方法及相关设备
CN112204514A (zh) 用于保留非易失性存储器的预期寿命的技术
CN115617515A (zh) 智能物联网操作系统的内存分配方法、装置和存储介质
CN115269452A (zh) Trim命令处理方法、系统、终端设备及存储介质
CN111177028B (zh) 一种动态多级缓存的方法和设备
CN110658999B (zh) 一种信息更新方法、装置、设备及计算机可读存储介质
CN113138718A (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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20240627

Address after: 430000, 14th floor, No. 181 Chunxiao Road, Wuhan Economic and Technological Development Zone, Hubei Province

Patentee after: Wuhan Xingji Meizu Technology Co.,Ltd.

Country or region after: China

Address before: 519080 Meizu Science and Technology Building, Zhuhai City, Guangdong Province

Patentee before: MEIZU TECHNOLOGY Co.,Ltd.

Country or region before: China