发明内容
本公开实施例至少提供一种应用内存管理方法、装置、设备以及存储介质。
本公开实施例提供了一种应用内存管理方法,所述方法包括:
在目标应用的运行过程中,若检测到用于清理所述目标应用中内存垃圾的内存清理指令,接管所述内存清理指令;
基于所述内存清理指令指示的待调用内存清理接口,获取记载有所述待调用内存清理接口的第一接口地址的接口列表;
根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址;
基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存。
一种可选的实施方式中,所述基于所述内存清理指令指示的待调用内存清理接口,确定记载有所述待调用内存清理接口的第一接口地址的接口列表,包括:
根据所述内存清理指令指示的待调用内存清理接口,确定记载有所述待调用内存清理接口的第一接口地址的接口列表,以及所述接口列表的列表名称;
基于所述列表名称,确定出所述接口列表的地址;
根据所述接口列表的地址,获取所述接口列表。
一种可选的实施方式中,在所述根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址之前,所述方法包括:
遍历所述接口列表,从所述接口列表中查找出所述第一接口地址,并确定所述第一接口地址在所述接口列表中的记载位置。
一种可选的实施方式中,所述根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址,包括:
获取预先写好所述目标内存清理接口的第二接口地址;
将所述接口列表的读写属性修改为可读写状态;
根据所述第一接口地址在所述接口列表中的记载位置,将读写状态修改后的所述接口列表中的所述第一接口地址修改为所述第二接口地址;
将地址修改后的所述接口列表的读写属性修改为仅读状态。
一种可选的实施方式中,所述基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存,包括:
在通过所述第二接口地址获取到所述目标内存清理接口的同时,开始计时;
基于所述目标应用的运行信息,确定针对内存清理的延时时长;
在计时时长到达所述延时时长时,通过所述目标内存清理接口清理所述目标内存。
一种可选的实施方式中,所述基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存,包括:
在通过所述第二接口地址获取到所述目标内存清理接口的情况下,确定所述目标应用中当前运行的至少一个线程;
在所述至少一个线程被执行完毕后,通过所述目标内存清理接口清理所述目标内存。
一种可选的实施方式中,所述通过所述目标内存清理接口清理所述目标内存,包括:
通过所述目标内存清理接口,调用所述待调用内存清理接口;
使用所述待调用内存清理接口,清理所述目标内存。
本公开实施例还提供一种应用内存管理装置,所述装置包括:
指令接管模块,用于在目标应用的运行过程中,若检测到用于清理所述目标应用中内存垃圾的内存清理指令,接管所述内存清理指令;
列表获取模块,用于基于所述内存清理指令指示的待调用内存清理接口,获取记载有所述待调用内存清理接口的第一接口地址的接口列表;
地址修改模块,用于根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址;
内存清理模块,用于基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存。
一种可选的实施方式中,所述列表获取模块具体用于:
根据所述内存清理指令指示的待调用内存清理接口,确定记载有所述待调用内存清理接口的第一接口地址的接口列表,以及所述接口列表的列表名称;
基于所述列表名称,确定出所述接口列表的地址;
根据所述接口列表的地址,获取所述接口列表。
一种可选的实施方式中,所述装置还包括位置确定模块,所述位置确定模块用于:
遍历所述接口列表,从所述接口列表中查找出所述第一接口地址,并确定所述第一接口地址在所述接口列表中的记载位置。
一种可选的实施方式中,所述地址修改模块具体用于:
获取预先写好所述目标内存清理接口的第二接口地址;
将所述接口列表的读写属性修改为可读写状态;
根据所述第一接口地址在所述接口列表中的记载位置,将读写状态修改后的所述接口列表中的所述第一接口地址修改为所述第二接口地址;
将地址修改后的所述接口列表的读写属性修改为仅读状态。
一种可选的实施方式中,所述内存清理模块具体用于:
在通过所述第二接口地址获取到所述目标内存清理接口的同时,开始计时;
基于所述目标应用的运行信息,确定针对内存清理的延时时长;
在计时时长到达所述延时时长时,通过所述目标内存清理接口清理所述目标内存。
一种可选的实施方式中,所述内存清理模块具体用于:
在通过所述第二接口地址获取到所述目标内存清理接口的情况下,确定所述目标应用中当前运行的至少一个线程;
在所述至少一个线程被执行完毕后,通过所述目标内存清理接口清理所述目标内存。
一种可选的实施方式中,所述内存清理模块在用于通过所述目标内存清理接口清理所述目标内存时,具体用于:
通过所述目标内存清理接口,调用所述待调用内存清理接口;
使用所述待调用内存清理接口,清理所述目标内存。
本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述应用内存管理方法中的步骤。
本公开实施例还提供一种计算机存储介质,该计算机存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述应用内存管理方法中的步骤。
本公开实施例提供的应用内存管理的方法、装置、设备及存储介质,在目标应用运行过程中,可以通过拦截用于清理内存垃圾的内存清理指令以进行指令接管,对接口列表中记载的待调用内存清理接口的第一接口地址进行修改,以替换成预先写好的目标内存清理接口的第二接口地址,在满足目标内存清理接口对应的内存清理条件时,才会通过第二接口地址调用的目标内存清理接口进行内存垃圾清理。
这样,通过接管内存清理指令,以及修改内存清理接口,实现内存垃圾清理的拦截,从而可以抑制垃圾回收,有效减少目标应用在运行时因垃圾回收导致的资源占用和消耗,避免当前运行线程的暂停,有助于提高目标应用的运行效率,保证目标应用的流畅度。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,大多数的垃圾回收机制,一般是在APP运行过程中,如果进程中的内存到达一定阈值时,会触发垃圾回收,进行空闲内存的释放,以实现垃圾清理。但是,在垃圾回收被触发时,会暂停进程进行扫描,这样就会给影响应用程序的性能,延缓应用程序的运行,至出现卡顿等现象。基于上述研究,本公开提供了一种应用内存管理方法,通过在目标应用运行过程中,可以通过拦截用于清理内存垃圾的内存清理指令以进行指令接管,对接口列表中记载的待调用内存清理接口的第一接口地址进行修改,以替换成预先写好的目标内存清理接口的第二接口地址,在满足目标内存清理接口对应的内存清理条件时,才会通过第二接口地址调用的目标内存清理接口进行内存垃圾清理。
这样,通过接管内存清理指令,以及修改内存清理接口,实现内存垃圾清理的拦截,从而可以抑制垃圾回收,有效减少目标应用在运行时因垃圾回收导致的资源占用和消耗,避免当前运行线程的暂停,有助于提高目标应用的运行效率,保证目标应用的流畅度。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种应用内存管理方法进行详细介绍,本公开实施例所提供的应用内存管理方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该应用内存管理方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
请参见图1,图1为本公开实施例提供的应用内存管理方法的流程图。本公开实施例提供的应用内存管理方法,如图1中所示,所述方法包括:
S101:在目标应用的运行过程中,若检测到用于清理所述目标应用中内存垃圾的内存清理指令,接管所述内存清理指令。
对于核心逻辑是Java语言编写的应用程序,例如使用安卓系统的安卓平台上安装的应用程序,其运行时大多是通过创建Java虚拟机,在Java虚拟机中运行相应的应用程序,对于Java虚拟机而言,其内存管理是基于垃圾回收(Garbage Collection)实现的,即对空闲内存进行释放的过程。
垃圾回收一般包括同步垃圾回收和异步垃圾回收两种。同步垃圾回收,是指当申请内存的接口无法申请到更多内存时,会主动进行垃圾回收来释放空闲内存,然后再继续尝试申请内存。异步垃圾回收,是指当应用程序中运行的进程中的内存到达一定阈值时,会触发异步垃圾回收机制,异步唤醒内存回收线程,进行垃圾回收。
请同时参阅图2,图2为垃圾回收处理示意图。如图2中所示,对于安卓平台而言,一般会有一个线程专门处理垃圾回收的请求,线程会设置一个任务队列,在需要进行垃圾回收时,会生成相应的用于进行垃圾回收的任务指令,添加在任务队列中。上述专门的线程可以对任务队列进行实时检测,如果任务队列为空的话,可以继续等待,如果任务队列不为空的话,可以取出任务队列中的任务指令,从而通过任务指令指示需要调用的接口,调用接口对应的函数代码,以运行回调函数进行内存释放,实现垃圾回收。
相应的,在该步骤中,在目标应用的运行过程中,可以针对上述的任务队列进行检测,如果任务队列中存在针对目标应用的任务指令,想要对所述目标引用进行垃圾回收,并且任务指令被上述的专门的线程调用执行的情况下,可以认为检测到清理所述目标应用中内存垃圾的内存清理指令,因此,可以通过拦截所述内存清理指令,以接管所述内存清理指令。
优选的,接管的所述内存清理指令,主要是指上述的进行异步垃圾回收的任务指令。
其中,所述内存清理指令,可以指所述内存清理指令指示的待调用内存清理接口的地址未被修改之前的任意一次内存清理,例如目标应用启动后,第一次进行内存清理的内存清理指令。
其中,内存垃圾包括未被及时释放的已使用内存、已被释放的空闲内存和内存碎片。已被释放的空闲内存指已被所述目标应用中的线程释放,但由于读写属性仍为不可读写状态导致的不可用的空闲内存空间。内存碎片指不连续的且内存空间不足以供给一个完整的任务进行使用分配的空闲内存空间。
示例性的,当终端的某应用程序正在运行,应用程序的运行内存到达阈值时,触发异步垃圾回收机制,在异步垃圾回收机制在调用指令进行垃圾清理之前,接管用于内存清理的内存清理指令。
S102:基于所述内存清理指令指示的待调用内存清理接口,获取记载有所述待调用内存清理接口的第一接口地址的接口列表。
该步骤中,在接管所述内存清理指令后,可以对所述内存清理指令进行解析等处理,解析出所述内存清理指令指示的所要调用的待调用内存清理接口,从而可以通过查询等方式,获取记载有所述待调用内存清理接口的第一接口地址的接口列表。
其中,待调用内存清理接口,可以与源代码中的回调函数的代码相对应,可以通过接口调用回调函数的代码,以运行回调函数进行内存清理。
其中,所述接口列表是根据与所述待调用内存清理接口有对应关系的任务所属的类生成的,且一个类对应一个接口列表。
示例性的,在具体实现方式中,从代码层面上,任务列表中的任务指令都继承自共同的基类,例如在安卓系统中的HeapTask类,HeapTask类有有一个虚函数Run作为任务的回调函数,每种类型的任务,都会定义一个自己的Run,因此,在终端的某应用程序触发内存垃圾清理时,可以通过劫持其对应的Run,通过Run解析的方式,获取记载有其地址的虚函数表。
S103:根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址。
该步骤中,在所述接口列表中找到所述第一接口地址的记载位置后,可以根据所述记载位置,将所述接口列表中记载的所述第一接口地址进行替换,从而修改为自定义的第二接口地址,其中,第二接口地址为预先写好的目标内存清理接口的地址。
其中,所述接口列表可以为一个数组,所述记载位置为在所述接口列表中存储所述第一接口地址的数组项。
其中,所述目标内存清理接口可以指自定义的回调函数,用来抑制内存清理指令的调用。
示例性的,在获取到记载有其地址的虚函数表后,可以从虚函数表中确定Run的地址在虚函数表中的具体位置,从而将具体位置上的Run的地址修改为自定义虚函数的地址。
S104:基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存。
该步骤中,在修改为所述第二接口地址后,可以使用所述第二接口地址来调用所述目标内存清理接口,并且在满足所述目标内存清理接口对应的内存清理条件之后,进行所述目标内存的清理。
示例性的,在将虚函数表中Run的地址修改为自定义虚函数的地址后,通过修改后的地址即可以获取自定义虚函数,通过调用自定义虚函数,在自定义虚函数中可以根据目标应用的情况,选择相应的方式,以进行内存清理。
其中,对于所述目标内存清理接口对应的回调函数的代码,在运行时可以按照预先设定的方式进行回调函数的执行,例如可以先控制回调函数进行睡眠,在睡眠结束自动唤醒后再执行,也可以是控制回调函数进行等待,等待被唤醒后在执行,还可以是控制回调函数不执行,直接返回。
在一种具体的实施方式中,所述基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存,包括:
在通过所述第二接口地址获取到所述目标内存清理接口的同时,开始计时;
基于所述目标应用的运行信息,确定针对内存清理的延时时长;
在计时时长到达所述延时时长时,通过所述目标内存清理接口清理所述目标内存。
该步骤中,在根据所述第二接口地址获取到所述目标内存清理接口的同时,可以通过设置一个计时器等方式开始进行计时,并根据所述目标应用的运行信息,来预设针对内存清理的延时时长,当所述计时时长等于所述延时时长时,可以控制所述目标内存清理接口清理所述目标内存。
其中,所述目标应用的运行信息可以指当前需要运行的线程数、当前内存的消耗量、当前资源的剩余量等。
在另一种具体的实施方式中,所述基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存,包括:
在通过所述第二接口地址获取到所述目标内存清理接口的情况下,确定所述目标应用中当前运行的至少一个线程;
在所述至少一个线程被执行完毕后,通过所述目标内存清理接口清理所述目标内存。
该步骤中,获取与所述第二接口地址对应的所述目标内存清理接口,并确定在获取所述目标内存清理接口时,所述目标应用中当前运行的至少一个线程,在所述至少一个线程被执行完毕后,可以通过所述目标内存清理接口清理所述目标内存。
本公开实施例提供的应用内存管理方法,在目标应用的运行过程中,若检测到用于清理所述目标应用中内存垃圾的内存清理指令,接管所述内存清理指令;基于所述内存清理指令指示的待调用内存清理接口,获取记载有所述待调用内存清理接口的第一接口地址的接口列表;根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址;基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存。
这样,通过接管内存清理指令,以及修改内存清理接口,实现内存垃圾清理的拦截,从而可以抑制垃圾回收,有效减少目标应用在运行时因垃圾回收导致的资源占用和消耗,避免当前运行线程的暂停,有助于提高目标应用的运行效率,保证目标应用的流畅度。
请参见图3,图3为本公开实施例提供的另一种应用内存管理方法的流程图。本公开实施例提供的另一种应用内存管理方法,如图3中所示,所述方法包括:
S201:在目标应用的运行过程中,若检测到用于清理所述目标应用中内存垃圾的内存清理指令,接管所述内存清理指令。
S202:基于所述内存清理指令指示的待调用内存清理接口,获取记载有所述待调用内存清理接口的第一接口地址的接口列表。
S203:遍历所述接口列表,从所述接口列表中查找出所述第一接口地址,并确定所述第一接口地址在所述接口列表中的记载位置。
该步骤中,可以利用相应的遍历算法遍历所述接口列表,以在所述接口列表中查找出所述第一接口地址,并且可以进一步确定所述第一接口地址在所述接口列表中的记载位置。
示例性的,在获取到目标应用对应的虚函数表后,可以遍历虚函数表中的内容,以确定Run的地址在虚函数表中的位置。其中,任务列表中除了可以缓存线程可以处理的一步垃圾回收的任务之外,还可以缓存其他任务,每个任务的回调函数都不一样,从而代表着不同的任务,因此,虚函数表中记载有不同回调函数的地址,需要从中遍历出所需函数的地址。
S204:根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址。
S205:基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存。
其中,步骤S201至步骤S202、S204至步骤S205的描述,可以参照步骤S101至步骤S104的描述,并且可以达到相同的技术效果和解决相同的技术问题,在此不做赘述。
接下来,结合具体实施方式进一步对本实施例进行说明。
一种可选的实施方式中,所述基于所述内存清理指令指示的待调用内存清理接口,确定记载有所述待调用内存清理接口的第一接口地址的接口列表,包括:
根据所述内存清理指令指示的待调用内存清理接口,确定记载有所述待调用内存清理接口的第一接口地址的接口列表,以及所述接口列表的列表名称;
基于所述列表名称,确定出所述接口列表的地址;
根据所述接口列表的地址,获取所述接口列表。
该步骤中,从所述内存清理指令中,可以获取到需要调用的待调用内存清理接口,通过预先设置的存储信息等内容,可以确定确定记载有所述待调用内存清理接口的第一接口地址的接口列表,从而查询到所述接口列表的列表名称,进而根据所述列表名称,可以确定所述接口列表的地址,如所述接口列表被存放的位置,通过确定的地址即可获取所述接口列表。
一种可选的实施方式中,所述根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址,包括:
获取预先写好所述目标内存清理接口的第二接口地址;
将所述接口列表的读写属性修改为可读写状态;
根据所述第一接口地址在所述接口列表中的记载位置,将读写状态修改后的所述接口列表中的所述第一接口地址修改为所述第二接口地址;
将地址修改后的所述接口列表的读写属性修改为仅读状态。
该步骤中,获取预先写好所述目标内存清理接口的第二接口地址,在进行修改之前将所述接口列表中的读写属性改为可读可写状态,通过遍历找到所述第一接口地址在所述接口列表中的记载位置,将所述第一接口地址修改为所述第二接口地址,并将修改后的所述接口列表的读写属性修改为仅读状态。
示例性的,在对存储Run地址的虚函数表进行修改时,需要先将虚函数表的读写权限改为可读可写,同时获取自定义虚函数的地址,找到在虚函数表中虚函数Run地址的具体存储位置,在函数表中找到的具体存储位置上将虚函数Run地址改为自定义虚函数的地址,在修改完成后,将虚函数表的读写权限改为仅可读。
一种可选的实施方式中,所述通过所述目标内存清理接口清理所述目标内存,包括:
通过所述目标内存清理接口,调用所述待调用内存清理接口;
使用所述待调用内存清理接口,清理所述目标内存。
该步骤中,可以通过调用所述目标内存清理接口,来进一步调用所述待调用内存清理接口,并通过使用所述待调用内存清理接口,清理所述目标内存。
在应用程序进行垃圾回收时,通过调用修改后的自定义回调函数来抑制回调函数的调用,当自定义回调函数中的设定条件已被满足,则通过自定义回调函数调用回调函数的,以完成垃圾回收,即内存清理。
本公开实施例提供的应用内存管理方法,在目标应用的运行过程中,若检测到用于清理所述目标应用中内存垃圾的内存清理指令,接管所述内存清理指令;基于所述内存清理指令指示的待调用内存清理接口,获取记载有所述待调用内存清理接口的第一接口地址的接口列表;遍历所述接口列表,从所述接口列表中查找出所述第一接口地址,并确定所述第一接口地址在所述接口列表中的记载位置;根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址;基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存。
这样,通过接管内存清理指令,遍历接口列表中待调用内存清理接口的地址,以修改内存清理接口,实现内存垃圾清理的拦截,从而可以抑制垃圾回收,有效减少目标应用在运行时因垃圾回收导致的资源占用和消耗,避免当前运行线程的暂停,有助于提高目标应用的运行效率,保证目标应用的流畅度。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与应用内存管理方法对应的应用内存管理装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述应用内存管理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
请参阅图4至图5,图4为本公开实施例提供的一种应用内存管理装置的示意图之一,图5为本公开实施例提供的一种应用内存管理装置的示意图之二。如图4中所示,本公开实施例提供的应用内存管理装置400,包括:
指令接管模块410,用于在目标应用的运行过程中,若检测到用于清理所述目标应用中内存垃圾的内存清理指令,接管所述内存清理指令;
列表获取模块420,用于基于所述内存清理指令指示的待调用内存清理接口,获取记载有所述待调用内存清理接口的第一接口地址的接口列表;
地址修改模块430,用于根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址;
内存清理模块440,用于基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存。
一种可选的实施方式中,所述列表获取模块420具体用于:
根据所述内存清理指令指示的待调用内存清理接口,确定记载有所述待调用内存清理接口的第一接口地址的接口列表,以及所述接口列表的列表名称;
基于所述列表名称,确定出所述接口列表的地址;
根据所述接口列表的地址,获取所述接口列表。
一种可选的实施方式中,所述装置还包括位置确定模块450,所述位置确定模块450用于:
遍历所述接口列表,从所述接口列表中查找出所述第一接口地址,并确定所述第一接口地址在所述接口列表中的记载位置。
一种可选的实施方式中,所述地址修改模块430具体用于:
获取预先写好所述目标内存清理接口的第二接口地址;
将所述接口列表的读写属性修改为可读写状态;
根据所述第一接口地址在所述接口列表中的记载位置,将读写状态修改后的所述接口列表中的所述第一接口地址修改为所述第二接口地址;
将地址修改后的所述接口列表的读写属性修改为仅读状态。
一种可选的实施方式中,所述内存清理模块440具体用于:
在通过所述第二接口地址获取到所述目标内存清理接口的同时,开始计时;
基于所述目标应用的运行信息,确定针对内存清理的延时时长;
在计时时长到达所述延时时长时,通过所述目标内存清理接口清理所述目标内存。
一种可选的实施方式中,所述内存清理模块440还具体用于:
在通过所述第二接口地址获取到所述目标内存清理接口的情况下,确定所述目标应用中当前运行的至少一个线程;
在所述至少一个线程被执行完毕后,通过所述目标内存清理接口清理所述目标内存。
一种可选的实施方式中,所述内存清理模块440在用于所述通过所述目标内存清理接口清理所述目标内存时,具体用于:
通过调用所述目标内存清理接口,调用所述待调用内存清理接口;
使用所述待调用内存清理接口,清理所述目标内存。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例提供的应用内存管理装置,通过在目标应用的运行过程中,若检测到用于清理所述目标应用中内存垃圾的内存清理指令,接管所述内存清理指令;基于所述内存清理指令指示的待调用内存清理接口,获取记载有所述待调用内存清理接口的第一接口地址的接口列表;根据所述第一接口地址在所述接口列表中的记载位置,将所述接口列表中记载的所述第一接口地址修改为预先写好的目标内存清理接口的第二接口地址;基于所述第二接口地址,调用所述目标内存清理接口,在满足所述目标内存清理接口对应的内存清理条件时,通过所述目标内存清理接口清理所述目标内存。
这样,通过接管内存清理指令,以及修改内存清理接口,实现内存垃圾清理的拦截,从而可以抑制垃圾回收,有效减少目标应用在运行时因垃圾回收导致的资源占用和消耗,避免当前运行线程的暂停,有助于提高目标应用的运行效率,保证目标应用的流畅度。
基于同一技术构思,本申请实施例还提供了一种电子设备。本公开实施例还提供了一种电子设备600,如图6所示,为本公开实施例提供的电子设备600结构示意图,包括:
处理器610、存储器620、和总线630;存储器620用于存储执行指令,包括内存621和外部存储器622;这里的内存621也称内存储器,用于暂时存放处理器610中的运算数据,以及与硬盘等外部存储器622交换的数据,处理器610通过内存621与外部存储器622进行数据交换,当所述电子设备600运行时,所述处理器610与所述存储器620之间通过总线630通信,使得所述处理器610可以执行上述方法实施例中所示的应用内存管理方法的步骤。
本公开实施例还提供一种计算机存储介质,该计算机存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的应用内存管理方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的应用内存管理方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置、设备和存储介质的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的方法、装置、设备和存储介质,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。