G06F9/50
1.一种内存页面处理方法,其特征在于,应用于电子设备,所述方法包括:
响应于内存使用对象触发的内存分配请求,获取所述内存分配请求所申请分配的内存页面的标识;
若预先建立的内存池中有所述标识的内存页面,从所述内存池中获取对应所述标识的内存页面分配给所述内存使用对象,其中,所述内存池中的内存页面为预先从所述电子设备的操作系统申请得到;
若预先建立的内存池中没有所述标识的内存页面,触发所述操作系统进行内存回收操作,以将所述内存回收操作所回收的内存页面分配给所述内存使用对象。
2.根据权利要求1所述的方法,其特征在于,所述标识包括内存页面的类型,所述若预先建立的内存池中有所述标识的内存页面,从所述内存池中获取对应所述标识的内存页面分配给所述内存使用对象,包括:
若预先建立的内存池中有所述类型的内存页面,从所述内存池中获取所述类型的内存页面分配给所述内存使用对象。
3.根据权利要求1所述的方法,其特征在于,所述内存池中包括有多个链表,每个链表对应的标识不同;所述若预先建立的内存池中有所述标识的内存页面,从所述内存池中获取对应所述标识的内存页面分配给所述内存使用对象,包括:
若预先建立的内存池中存在目标链表,从所述目标链表中获取对应所述标识的内存页面分配给所述内存使用对象,所述目标链表对应的标识与所述所申请分配的内存页面的标识相同。
4.根据权利要求3所述的方法,其特征在于,所述若预先建立的内存池中存在目标链表,从所述目标链表中获取对应所述标识的内存页面分配给所述内存使用对象之后还包括:
若所述目标链表中的剩余的内存页面的数量低于第一数量阈值,启动第一异步线程从所述操作系统中申请对应的内存页面,并将所申请得到的内存页面配置到所述目标链表。
5.根据权利要求4所述的方法,其特征在于,所述若预先建立的内存池中存在目标链表,从所述目标链表中获取对应所述标识的内存页面分配给所述内存使用对象,包括:
若预先建立的内存池中存在目标链表,检测所述目标链表中的内存页面的数量是否大于第二数量阈值;
若大于所述第二数量阈值,从所述目标链表中获取对应所述标识的内存页面分配给所述内存使用对象。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
若不大于所述第二数量阈值,则等待第一指定时长后再次检测所述目标链表中的内存页面的数量是否大于第二数量阈值;
若大于所述第二数量阈值,从所述目标链表中获取对应所述标识的内存页面分配给所述内存使用对象;
若不大于所述第二数量阈值,则触发所述操作系统进行内存回收操作,以将所述内存回收操作所回收的内存页面分配给所述内存使用对象。
7.根据权利要求1或6所述的方法,其特征在于,所述触发所述操作系统进行内存回收操作包括:
触发所述操作系统在进行内存回收的过程中,执行第一内存回收方式以及第二内存回收方式以进行内存回收。
8.根据权利要求7所述的方法,其特征在于,所述执行第一内存回收方式以及第二内存回收方式以进行内存回收,包括:
并行执行第一内存回收方式以及第二内存回收方式以进行内存回收,其中,第一内存回收方式用于回收应用程序的内存页面,所述第二内存回收方式用于回收电子设备的驱动的内存页面。
9.根据权利要求8所述的方法,其特征在于,所述并行执行第一内存回收方式以及第二内存回收方式,包括:
通过所述操作系统的内核执行第一内存回收方式,以及并行通过设置在操作系统中的指定库执行第二内存回收方式。
10.根据权利要求9所述的方法,其特征在于,所述操作系统的内核支持通过第一内存回收方式以及第二内存回收方式进行内存回收,所述方法还包括:
阻止所述操作系统的内核执行所述第二内存回收方式。
11.根据权利要求10所述的方法,其特征在于,电子设备的驱动有多个,且多个驱动的回收顺序不同,所述方法还包括:
在执行所述第二内存回收方式的过程中,若在前进行内存页面回收的驱动对应的回收耗时大于第二指定时长,则启动第二异步线程开始对在后进行内存页面回收的驱动进行内存页面的回收。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括:
在执行所述第一内存回收方式的过程中,响应于获取到当前的待回收内存页面,尝试对所述当前的待回收内存页面进行持锁;
若尝试持锁失败,启动第三异步线程对所述当前的待回收内存页面进行回收,以及尝试对排序在所述当前的待回收内存页面之后的待进行回收的内存页面进行持锁。
13.根据权利要求12所述的方法,其特征在于,所述若尝试持锁失败,启动第三异步线程对所述当前的待回收内存页面进行回收,包括:
若尝试持锁失败,检测共享链表中是否还有剩余的空间,所述共享链表用于存储需要通过第三异步线程进行回收的内存页面;
若有剩余的空间,将所述待进行回收的内存页面增加到所述共享链表中,并启动第三异步线程对所述当前的待回收内存页面进行回收。
14.根据权利要求13所述的方法,其特征在于,所述方法还包括:
若没有剩余的空间,则等待所述待进行回收的内存页面可持锁时,对所述待进行回收的内存页面进行持锁,并对所述待进行回收的内存页面进行回收。
15.根据权利要求1或6所述的方法,其特征在于,所述触发所述操作系统进行内存回收操作包括:
触发所述操作系统执行第三内存回收方式,所述第三内存回收方式为对处理器件对应的内存页面进行回收。
16.根据权利要求15所述的方法,其特征在于,所述处理器件的数量为多个,所述触发所述操作系统在执行第三内存回收方式包括:
触发对多个所述处理器件进行内存回收;
若等待到所述多个所述处理器件中的目标处理器件完成内存页面回收,将所回收的内存页面分配给所述内存使用对象,其中,所述目标处理器件对应的可回收的内存页面的数量大于第三阈值。
17.根据权利要求16所述的方法,其特征在于,所述方法还包括:
提升所述目标处理器件对应的内存回收线程的优先级。
18.一种内存页面处理装置,其特征在于,运行于电子设备,所述装置包括:
内存标识获取单元,用于响应于内存使用对象触发的内存分配请求,获取所述内存分配请求所申请分配的内存页面的标识;
内存处理单元,用于若预先建立的内存池中有所述标识的内存页面,从所述内存池中获取对应所述标识的内存页面分配给所述内存使用对象,其中,所述内存池中的内存页面为预先从所述电子设备的操作系统申请得到;若预先建立的内存池中没有标识的内存页面,触发操作系统进行内存回收操作,以将内存回收操作所回收的内存页面分配给内存使用对象。
19.一种电子设备,其特征在于,包括一个或多个处理器以及存储器;一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行权利要求1-17任一所述的方法。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码被处理器运行时执行权利要求1-17任一所述的方法。
本申请涉及计算机技术领域,更具体地,涉及一种内存页面处理方法、装置以及电子设备。
内存又称主存,是CPU能直接寻址的存储空间,由半导体器件制成。电子设备中的内存的空间是有限的,为了保证系统有足够的内存可以使用,电子设备的系统通常会在一定的情况下进行内存回收。例如,在有应用程序申请进行内存分配时,电子设备可以进行内存回收以满足需要内存的应用程序。但是,相关的内存回收过程会存在阻塞的风险,进而造成申请内存分配的应用程序无法及时的获取到所需的内存页面。
鉴于上述问题,本申请提出了一种内存页面处理方法、装置以及电子设备,以改善上述问题。
第一方面,本申请提供了一种内存页面处理方法,应用于电子设备,所述方法包括:响应于内存使用对象触发的内存分配请求,获取所述内存分配请求所申请分配的内存页面的标识;若预先建立的内存池中有所述标识的内存页面,从所述内存池中获取对应所述标识的内存页面分配给所述内存使用对象,其中,所述内存池中的内存页面为预先从所述电子设备的操作系统申请得到;若预先建立的内存池中没有标识的内存页面,触发操作系统进行内存回收操作,以将内存回收操作所回收的内存页面分配给内存使用对象。
第二方面,本申请提供了一种内存页面处理装置,运行于电子设备,所述装置包括:内存标识获取单元,用于响应于内存使用对象触发的内存分配请求,获取所述内存分配请求所申请分配的内存页面的标识;内存处理单元,用于若预先建立的内存池中有所述标识的内存页面,从所述内存池中获取对应所述标识的内存页面分配给所述内存使用对象,其中,所述内存池中的内存页面为预先从所述电子设备的操作系统申请得到;若预先建立的内存池中没有标识的内存页面,触发操作系统进行内存回收操作,以将内存回收操作所回收的内存页面分配给内存使用对象。
第三方面,本申请提供了一种电子设备,包括一个或多个处理器以及存储器;一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行以实现上述的方法。
第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码被处理器运行时执行上述的方法。
本申请提供的一种内存页面处理方法、装置以及电子设备,在响应于内存使用对象触发的内存分配请求后,可以先获取所述内存分配请求所申请分配的内存页面的标识,进而确定预先建立的内存池中有所述标识的内存页面的情况下,从内存池中获取对应所述标识的内存页面分配给所述内存使用对象。从而通过上述方式使得可以预先建立内存池,并从操作系统中预先申请内存页面存放到该内存池中,进而在有内存使用对象进行内存页面的申请时,可以直接从内存池中获取内存使用对象所需的内存页面,进而避免了内存使用对象需要内存页面时,触发操作系统进行内存回收操作的概率,进而进一步的降低了在操作系统执行内存回收操作的过程中,出现内存回收操作的阻塞而造成内存使用对象无法及时的获取到所需的内存页面的概率,进而提升了为内存使用对象分配所需内存页面的效率。
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请另一实施例提出的一种内存页面处理方法的流程图;
图2示出了本申请实施例中一种内存池管理界面的示意图;
图3示出了本申请另一实施例提出的一种内存页面处理方法的流程图;
图4示出了本申请实施例中一种内存池的示意图;
图5示出了本申请一实施例中提出的一种内存分配流程的流程图;
图6示出了本申请再一实施例提出的一种内存页面处理方法的流程图;
图7示出了本申请实施例中第一内存回收方式和第二内存回收方式并行运行的示意图;
图8示出了本申请实施例中基于驱动的回收耗时而启动第二异步线程的示意图;
图9示出了本申请实施例中第三异步线程的工作流程的流程图;
图10示出了本申请实施例中基于对内存页面进行尝试持锁以进行内存页面回收的流程图;
图11示出了本申请实施例中一种第三内存回收方式的流程图;
图12示出了本申请实施例提出的一种内存页面处理装置的结构框图;
图13示出了本申请实时中的用于执行根据本申请实施例的内存页面处理方法的电子设备的结构框图;
图14示出了本申请实时中的用于保存或者携带实现根据本申请实施例的内存页面处理方法的程序代码的存储单元。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
随着移动终端技术的迅速发展,消费者对于电子设备的需求不再仅仅局限于实现简单的功能,而是期望能够流畅的使用多种功能。因此,流畅性已经是影响用户是否决定购买一款电子设备的一个必要的因素。其中,内存的性能对电子设备的流程运行有较大影响。并且,目前的电子设备,内存的需求也日益增大,例如大型的手游就可能占据了2G bytes的内存空间,而如何更好的管理好内存的性能,主要的就在于内存回收的技术。
对于电子设备而言,因为所包括的内存的大小是有限的,所以内存回收是一个较为普遍的机制。而之所以要进行内存回收,主要原因有两个:电子设备的操作系统需要为任何时刻突发到来的内存申请提供足够的内存,以便cache(缓存)的使用和其他相关内存的使用不至于让系统的剩余内存长期处于很少的状态。其中,cache是位于处理器与内存间的一种速度高的存储器。还有,当有大于空闲内存的申请到来的时候,也会触发内存回收。而内存回收的核心思想就是如果一些数据能够保存到磁盘,在内存不足时就把这些数据从内存写到磁盘中,这样这些数据占用的内存页面就可以作为空闲内存页面给予系统使用了。
其中,在一些情况下,操作系统会在有内存使用对象(例如,用户线程)进行内存分配请求时,先进行内存回收,然后将所回收到的内存页面分配给该内存使用对象。但是,相关的内存回收过程会存在阻塞的风险,进而造成申请内存分配的内存使用对象无法及时的获取到所需的内存页面,进而可能会造成电子设备的卡顿,甚至出现丢帧。例如,操作系统可以通过kswapd或者direct_reclaim这两个方式进行内存回收。
其中,kswapd为后台内存回收线程,电子设备的操作系统可以对剩余可分配的内存进行检测,在检测到剩余可分配的内存较少(例如,低于预设的阈值)时,则会启动kswapd线程,以通过kswapd这种方式进行内存页面的回收。direct_reclaim则指的是用户线程直接触发进行内存页面的回收。
其中,kswapd和direct_reclaim这两个方式在进行过程中,均会各自串行执行shrink_lruvec和shrink_slab两个操作,direct_reclaim额外还会在shrink_slab之后进行pcppages回收这个操作。其中,执行shrink_lruvec操作的目标是回收应用程序所使用的内存页面。执行shrink_slab操作的目标是回调各类驱动的shrink callback,以回收驱动所使用的内存页面。其中,pcppages可以理解为分配给处理器件进行使用的内存页面,对应的,执行pcppages操作则是用于回收各个处理器件的内存页面(用于缓存数据的内存页面)。但是,发明人发现shrink_lruvec、shrink_slab、pcppages等操作是彼此串行执行的,进而若其中任一操作出现阻塞,就会造成整个内存回收过程出现阻塞,进而也就无法为内存使用对象及时分配内存。
因此,发明人提出了本申请中的内存页面处理方法、装置以及电子设备,在响应于内存使用对象触发的内存分配请求后,可以先获取内存分配请求所申请分配的内存页面的标识,进而确定预先建立的内存池中有标识的内存页面的情况下,从内存池中获取对应标识的内存页面分配给内存使用对象。
从而通过上述方式使得可以预先建立内存池,并从操作系统中预先申请内存页面存放到该内存池中,进而在有内存使用对象进行内存页面的申请时,可以直接从内存池中获取内存使用对象所需的内存页面,进而避免了内存使用对象需要内存页面时,触发操作系统进行内存回收操作的概率,进而进一步的降低了在操作系统执行内存回收操作的过程中,出现内存回收操作的阻塞而造成内存使用对象无法及时的获取到所需的内存页面的概率,进而提升了为内存使用对象分配所需内存页面的效率。
下面将结合附图具体描述本申请的各实施例。
请参阅图1,本申请实施例提供的一种内存页面处理方法,方法包括:
S110:响应于内存使用对象触发的内存分配请求,获取内存分配请求所申请分配的内存页面的标识。
需要说明的是,在电子设备中内存使用对象可以理解为电子设备中所安装应用程序对应的线程或者进程。其中,应用程序的线程也可以理解为用户线程。在内存使用对象的运行过程中,需要借助内存(内存页面)进行数据处理,因而会触发内存分配请求,以获取到所需的内存页面。其中,内存使用对象可以在启动时就触发内存分配请求,再者,内存使用对象也可以在运行过程中检测到当前已分配的内存页面不够时,触发内存分配请求。
其中,作为一种方式,内存分配请求中可以携带有所需分配内存页面的标识。
在本申请实施例中,内存页面的标识可以有多种实施方式。作为一种方式,标识可以包括内存页面的类型。例如,类型可以包括可移动的内存页面、不可移动的内存页面、不可回收的内存页面以及可回收的内存页面等。作为另外一种方式,标识可以包括内存页面的大小,该大小可以包括4Kbytes、8Kbytes…4M bytes等。作为再一种方式,内存页面的标识可以同时包括内存页面的类型和大小。
S120:若预先建立的内存池中有标识的内存页面,从内存池中获取对应标识的内存页面分配给内存使用对象,其中,内存池中的内存页面为预先从电子设备的操作系统申请得到。
在获取得到所申请分配的内存页面的标识后,则可以在内存池中开始查是否有与该标识匹配的内存页面。若该内存池中有与该标识匹配的内存页面,则从内存池中获取对应标识的内存页面分配给发送内存分配请求的内存使用对象。其中,两个标识匹配可以理解为两个标识相同。例如,以标识为内存页面的类型的为例,若预先建立的内存池中有该类型的内存页面,则可以从内存池中获取该类型的内存页面分配给内存使用对象。
在本申请实施例中,内存池可以由电子设备在启动时进行建立,也可以由电子设备在检测到指定事件触发时进行建立。
可选的,该指定事件可以为用户触发了建立内存池的操作。在这种方式中,电子设备中可以配置有内存池管理界面,在该内存池管理界面中可以配置有内存池对应的开关,若用户将该开关配置到处于开启的状态,则确定用户触发了建立内存池的操作,进而电子设备会建立内存池,并从操作系统中申请内存页面存入内存池。若用户将该开关配置到处于关闭的状态,则电子设备可以删除内存池,并释放内存池中还未分配的内存页面。如图2所示,在图2所示的内存池管理界面10中配置有开关11,再者,在该内存池管理界面10中还配置有输入控件12,在该输入控件12中用户可以输入所需建立的内存池的大小。例如,若用户输入的内存池为100MB,则内存池在启动后可以向操作系统申请总共100MB的内存页面。再者,在内存池已经建立后,用户也可以通过该输入控件12来对内存池的大小进行改变。可选的,在内存池已经建立的情况下,若检测到输入控件12中所输入有数值时,可以将所输入的数值与已经建立的内存池的大小进行比对,若输入的数值大于已经建立的内存池的大小,则可以根据输入的数值与已经建立的内存池的大小的差值,进一步向操作系统的内核申请内存页面,以补齐该差值。输入的数值小于已经建立的内存池的大小,则可以根据输入的数值与已经建立的内存池的大小的差值,对内存池中的内存页面进行释放,以使得释放内存页面后的内存池的大小与输入的数值相同。
可选的,该指定事件可以为电子设备检测到当前所运行的应用程序的数量大于指定数量阈值。需要说明的是,在所运行的应用程序增多之后,电子设备中的内存分配申请次数会增多,进而为了更加高效的应对内存分配申请次数的增多,则可以启动内存池提前从操作系统中申请内存页面配置到内存池中。
S130:若预先建立的内存池中没有标识的内存页面,触发操作系统进行内存回收操作,以将内存回收操作所回收的内存页面分配给内存使用对象。
在内存池中没有标识的内存页面的情况下,为了使得依然可以为内存使用对象分配所需的内存页面,则操作系统可以进行内存回收操作以获取到内存使用对象所需的内存页面。在本申请实施例中,内存回收操作所回收的内存页面可以包括有文件页和/或匿名页。其中,文件页可以理解为有文件背景的页面(即与磁盘中的文件存在映射关系的内存页面)。匿名页则可以理解为没有文件背景的页面。
本实施例提供的一种内存页面处理方法,在响应于内存使用对象触发的内存分配请求后,可以先获取内存分配请求所申请分配的内存页面的标识,进而确定预先建立的内存池中有标识的内存页面的情况下,从内存池中获取对应标识的内存页面分配给内存使用对象。从而通过上述方式使得可以预先建立内存池,并在建立内存池后,向操作系统发送内存申请,以从操作系统中预先申请内存页面存放到该内存池中,进而在有内存使用对象进行内存页面的申请时,可以直接从内存池中获取内存使用对象所需的内存页面,进而避免了内存使用对象需要内存页面时,触发操作系统进行内存回收操作的概率,进而进一步的降低了在操作系统执行内存回收操作的过程中,出现内存回收操作的阻塞而造成内存使用对象无法及时的获取到所需的内存页面的概率,进而提升了为内存使用对象分配所需内存页面的效率。
请参阅图3,本申请实施例提供的一种内存页面处理方法,方法包括:
S210:响应于内存使用对象触发的内存分配请求,获取内存分配请求所申请分配的内存页面的标识。
S220:若预先建立的内存池中存在目标链表,从目标链表中获取对应标识的内存页面分配给内存使用对象,目标链表对应的标识与所申请分配的内存页面的标识相同。
在本实施例中,在内存池中可以通过链表来对内存页面进行存储。并且内存池中可以包括有多个链表,每个链表对应的标识不同。示例性的,以标识为内存页面的类型为例,如图4所示,内存池中有可以链表A1、链表A2、链表A3以及链表A4。其中,链表A1对应的类型为可移动的内存页面,链表A2对应的类型为不可移动的内存页面,链表A3对应的类型为不可回收的内存页面,链表A4对应的类型为可回收的内存页面。若内存分配请求所请求分配的内存页面的类型为可回收的,那么则可以确定链表A4为目标链表,进而从链表A4中取出内存页面分配给内存使用对象。
在本申请实施例中,可以预先统计应用程序使用的内存页面的标识,进而根据应用程序所经常使用的内存页面的标识来进行链表的建立。以标识为内存页面的类型为例,若预先统计到应用程序常用的内存页面的类型为可回收的内存页面以及可移动的内存页面,则可以建立类型为可回收的链表,以及类型为可移动的链表。其中,可以通过实验或者大数据的方式统计应用程序使用的内存页面的标识。
为了及时的对链表中的内存页面进行补充,作为一种方式,若目标链表中的剩余的内存页面的数量低于第一数量阈值,启动第一异步线程从操作系统中申请对应的内存页面,并将所申请得到的内存页面配置到目标链表。通过异步线程从操作系统申请内存页面,可以使得链表中可以持续的有内存页面进行补充,以降低在需要通过链表进行内存分配时,链表中没有内存页面可以用于进行分配的概率,进而也降低了因为链表中没有内存页面而触发操作系统执行内存回收操作的概率,以进一步的避免因为操作系统在执行内存回收操作过程中因为出现阻塞而造成为内存使用对象分配内存页面出现阻塞。
需要说明的是,前述的第一数量阈值为触发异步线程进行内存页面申请的阈值。其中,该第一数量阈值可以由开发人员在电子设备出厂前进行配置,也可以由电子设备的用户进行配置。
再者,在本申请实施例中,也可以在需要从链表中取出内存页面时,根据链表中剩余的内存页面的数量来确定对应的措施。可选的,若预先建立的内存池中存在目标链表,从目标链表中获取对应标识的内存页面分配给内存使用对象可以包括:若预先建立的内存池中存在目标链表,检测目标链表中的内存页面的数量是否大于第二数量阈值。若大于第二数量阈值,从目标链表中获取对应标识的内存页面分配给内存使用对象。若不大于第二数量阈值,则等待第一指定时长后再次检测目标链表中的内存页面的数量是否大于第二数量阈值。若大于第二数量阈值,从目标链表中获取对应标识的内存页面分配给内存使用对象。若不大于第二数量阈值,则触发操作系统进行内存回收操作,以将内存回收操作所回收的内存页面分配给内存使用对象。
其中,如前述内容介绍可知,在某一链表中的内存页面的数量较低(例如,低于第一数量阈值)时,会通过异步线程进行内存页面的补充,因此,在剩余的内存页面不大于第二数量阈值时,等待第一指定时长,则是为了等待异步线程完成内存页面的补充,进而进一步的避免触发操作系统执行内存回收操作。但是,若在等待第一指定时长后,依然检测到链表中的内存页面不大于第二数量阈值,则为了完成为内存使用对象分配所需的内存页面,则依然会触发操作系统进行内存回收操作。
下面再通过图5对本实施例涉及的流程进行下介绍。
在通过内存使用对象的内存分配请求获取到标识后,先进行标识的匹配,在标识匹配成功的情况下则可以确定目标链表,进而检测目标链表中是否有足够的内存页面。其中,在检测到目标链表中剩余的内存页面的数量大于第二数量阈值的情况下,可以直接从目标链表中取出内存页面,之后,可以再判断取出内存页面的目标链表中剩余的内存页面的数量是否低于第一数量阈值,若低于第一数量阈值的情况下,则可以唤醒异步线程,并将取出的内存页面返回给内存使用对象。再者,在检测到目标链表中剩余的内存页面的数量不大于第二数量阈值的情况下,则可以等待第一指定时长之后,再次重复前面的检测过程,在检测到目标链表中剩余的内存页面已经大于第二数量阈值的情况下,则可以取出内存页面,进而执行后续的页面判断以及页面分配的步骤。再者,在等待第一指定时长后,目标链表中剩余的内存页面依然不大于第二数量阈值的情况下,则可以触发操作系统的内核执行内存回收操作。
再者,从内存池中所分配给内存使用对象的内存页面也可以进行释放。例如,在内存使用对象被关闭时,内存使用对象所使用的内存页面可以被释放。其中,在内存页面被释放时,可以先获取该被释放的内存页面所来源的链表,再检测所来源的链表中的内存页面的数量是否大于第三数量阈值,若大于,则可以将被释放的内存页面释放回操作系统的内核中,若不大于,则可以将该内存页面释放回所来源的内存池中的链表。该第三数量阈值大于前述的第一数量阈值。示例性的,若当前待被释放的内存页面来源图4中所示的链表A4,则可以先检测链表A4中内存页面的数量是否大于第三数量阈值,若大于,则可以将当前待被释放的内存页面释放回操作系统的内核中,若不大于,则可以将当前待被释放的内存页面释放回链表A4。
需要说明的是,在本申请实施例中通过内存池进行内存分配的相关操作可以由操作系统的指定库执行。在这种情况下,在接收到内存使用对象触发的内存分配请求后,可以调用该指定库执行获取内存分配请求所申请分配的内存页面的标识,以及调用该指定库执行若预先建立的内存池中存在目标链表,从目标链表中获取对应标识的内存页面分配给内存使用对象。例如,该指定库可以为基于SO库建立。其中,SO库又名动态库,是Linux操作系统中的一种文件格式。其中,可以通过在操作系统中进行插桩,从而可以通过该插桩调用指定库以完成上述的步骤。其中,在操作系统中进行插桩可以理解为在操作系统中插入一段代码,该代码在被运行时可以调用指定库以完成上述步骤。
S230:若预先建立的内存池中没有目标链表,触发操作系统进行内存回收操作,以将内存回收操作所回收的内存页面分配给内存使用对象。
本实施例提供的一种内存页面处理方法,从而通过上述方式使得可以预先建立内存池,并从操作系统中预先申请内存页面存放到该内存池中,进而在有内存使用对象进行内存页面的申请时,可以直接从内存池中获取内存使用对象所需的内存页面,进而避免了内存使用对象需要内存页面时,触发操作系统进行内存回收操作的概率,进而进一步的降低了在操作系统执行内存回收操作的过程中,出现内存回收操作的阻塞而造成内存使用对象无法及时的获取到所需的内存页面的概率,进而提升了为内存使用对象分配所需内存页面的效率。并且,在本实施例中,在内存池中可建立多个链表,使得多个链表分别用于存储不同的内存页面,进而使得可以更加灵活的对内存池中的内存页面进行管理。再者,在链表中的内存页面不足时,还可以启动异步线程进行内存页面的申请,也使得可以更加高效的对内存池的内存页面进行补充。并且,在本实施例中,可以将部分步骤配置为有指定库执行,而不用操作系统本身的内核执行,进而实现了通过构建微内核的概念来对宏观内核(操作系统的内核)内存回收流程。
请参阅图6,本申请实施例提供的一种内存页面处理方法,方法包括:
S310:响应于内存使用对象触发的内存分配请求,获取内存分配请求所申请分配的内存页面的标识。
S320:若预先建立的内存池中有标识的内存页面,从内存池中获取对应标识的内存页面分配给内存使用对象,其中,内存池中的内存页面为预先从电子设备的操作系统申请得到。
S330:若预先建立的内存池中没有标识的内存页面,触发操作系统执行第一内存回收方式以及第二内存回收方式以进行内存回收,并将所回收的内存页面分配给内存使用对象。
作为一种方式,触发操作系统进行内存回收操作包括:触发操作系统在进行内存回收的过程中,并行执行第一内存回收方式以及第二内存回收方式,其中,第一内存回收方式用于回收应用程序的内存页面,第二内存回收方式用于回收电子设备的驱动的内存页面。其中,第一内存回收方式和第二内存回收方式,各自所回收的对象不同,进而并行的对第一内存回收方式和第二内存回收进行执行,有利于提升内存回收的效率,并且也使得第一内存回收方式和第二内存回收方式不会相互造成阻塞。
再者,需要说明的是,为了使得操作系统可以支持并行执行第一内存回收方式和第二内存回收方式,可选的,可以通过操作系统的内核执行第一内存回收方式,以及并行通过设置在操作系统中的指定库执行第二内存回收方式,并阻止操作系统的内核执行第二内存回收方式。可以理解为,通过阻止操作系统执行第二内存回收方式使得,操作系统不会因为执行第二内存回收的过程中出现阻塞,而造成整个内存回收过程阻塞,并且同时又通过指定库执行第二内存回收方式,则可以实现并行执行第一内存回收方式和第二内存回收方式。
可选的,在执行内存回收的过程中可以触发通过kswapd方式以及direct_reclaim方式进行内存回收,其中,kswapd方式以及direct_reclaim方式各自包括上述的第一内存回收方式和第二内存回收方式。其中,第一内存回收方式可以为执行shrink_lruvec操作进行内存回收,第二内存回收方式可以为执行shrink_slab操作进行内存回收。如图7所示,可以在需要进行内存回收时通过操作系统的内核执行第一内存回收方式,并且可以调用异步回收线程执行第二内存回收方式。其中,可选的,可以通过调用指定库唤醒异步线程,进而通过指定库来来执行第二内存回收方式。如图7所示,若执行shrink_callback的过程中出现阻塞,则仅仅会阻塞第二内存回收方式,而不会对第一内存回收方式造成阻塞。
作为一种方式,在执行第二内存回收方式的过程中,若在前进行内存页面回收的驱动对应的回收耗时大于第二指定时长,则启动第二异步线程开始对在后进行内存页面回收的驱动进行内存页面的回收。需要说明的是,在电子设备的驱动有多个的情况下,可以串行的对多个驱动进行内存页面的回收。其中,可以通过调用每个驱动各自的shrink_callback来对每个驱动进行内存页面的回收。但是,在针对每个驱动进行内存页面的回收的过程中,依然可能会出现阻塞,在这种情况下,为了不造成整体的内存回收过程的耗时的增加,则可以再启动第二异步线程开始对在后进行内存页面回收的驱动进行内存页面的回收。
可选的,如图8所示,异步回收线程可以启动定时器,以用于针对当前进行内存页面回收的驱动的内存回收操作进行计时,进而根据计时长度来确定是否启用另外的第二异步线程,以跳过当前超时的驱动而通过该另外的第二异步线程开始对在后进行内存页面回收的驱动进行内存页面的回收。例如,如图8所示,在确定所调用的shrink_callback1对应的回收耗时大于第二指定时长时,则启用第二异步线程开始对在后进行内存页面回收的驱动进行内存页面的回收。
示例性的,电子设备包括有驱动D1、驱动D2、驱动D3以及驱动D4。其中,驱动D1的回收顺序在最前,然后依次为对驱动D2、驱动D3以及驱动D4进行内存回收。在通过异步回收线程开始调用驱动D1的shrink_callback开始对驱动D1进行内存回收时,则可以同步开始计时,若在计时第二指定时长后,驱动D1的shrink_callback依然没有完成回收操作,则会启动第二异步线程,以通过第二异步线程开始对驱动D2、驱动D3以及驱动D4进行内存回收。类似的,若驱动D2的shrink_callback在计时第二指定时长(计时是从调用驱动D2的shrink_callback开始)后,也没有完成回收操作,则会再次启动一个第二异步线程开始对驱动D3以及驱动D4进行内存回收。
需要说明的是,为了控制所启动的第二异步线程的数量,可以配置有线程阈值,在每次要启动第二异步线程前先判断当前已经启动的第二异步线程的数量是否小于该线程阈值,若小于则允许再次启动新的第二异步线程,若不小于,则不再启动新的第二异步线程,而是继续等待当前已经工作的第二异步线程完成内存回收操作。
作为一种方式,如图9所示,在执行第一内存回收方式的过程中,会开始遍历要回收的内存页面,并从要回收的内存页面中获取到当前的待回收内存页面。响应于获取到当前的待回收内存页面,尝试对当前的待回收内存页面进行持锁,若尝试持锁失败,启动第三异步线程对当前的待回收内存页面进行回收,以及尝试对排序在当前的待回收内存页面之后的待进行回收的内存页面进行持锁,进而使得继续等待成功对当前的待回收内存页面可以进行持锁,以及继续对下一个待回收的内存页面进行尝试持锁可以并列进行,使得等待当前的待回收内存页面可以成功进行持锁的操作不会影响整体的内存回收过程,以免整体的内存回收过程出现阻塞。
可选的,若尝试持锁失败,检测共享链表中是否还有剩余的空间,共享链表用于存储需要通过第三异步线程进行回收的内存页面。若有剩余的空间,将待进行回收的内存页面增加到共享链表中,并启动第三异步线程对当前的待回收内存页面进行回收。若没有剩余的空间,则等待当前的待回收内存页面可持锁时,对当前的待回收内存页面进行持锁,以对当前的待回收内存页面进行回收。
下面再通过图9对第三异步线程的工作流程进行下说明。如图9所示,在第三异步线程处于睡眠状态下,可以检测是否有用于唤醒第三异步线程的通知。若有,则可以将第三异步线程从睡眠状态进行唤醒,进而使得唤醒后的第三异步线程可以检测共享链表中是否有剩余的内存页面。如检测到有,则可以从共享链表中取出一内存页面,然后对取出的内存页面进行尝试持锁,并一直尝试到成功对取出的内存页面进行持锁。在成功对取出的内存页面进行持锁后,检测该内存页面是否可以进行回收,在检测到可以进行回收的情况下,则对取出的内存页面进行回收,并在回收之后进行页面放锁。若检测到该内存页面不能进行回收,则将该内存页面放回操作系统。
可选的,若尝试持锁成功,则可以进一步的检测当前的待回收内存页面是否可以进行回收。在可以进行回收的情况下,则对当前的待回收内存页面进行回收,之后则对已经回收的内存页面进行放锁。对应的,在检测到当前的待回收内存页面不可以进行回收的情况下,则会直接进行放锁。其中,电子设备可以通过反向映射来确定内存页面是否可以进行回收。其中反向映射指的是通过内存页面反向到最近是否有用户(例如,应用程序)访问了该内存页面,如果最近没有用户访问该内存页面,则确定该内存页面可以进行回收,不然该内存页面会被认为是频繁被使用到的页面而不能进行回收。
需要说明的是,在本实施例中的部分步骤可以由操作系统的内核执行,而另外一部分步骤可以由前述的指定库执行。可选的,图10中所示的对当前的待回收内存页面尝试持锁、检测共享链表是否已满、将页面存入共享链表以及唤醒第三异步线程等步骤可以由指定库执行。在这种情况下,可以在操作系统的内核中进行插装,以便通过该插装来调用指定库以执行对应的步骤。
在本申请实施例中,触发操作系统进行内存回收操作可以包括:触发操作系统执行第三内存回收方式,第三内存回收方式为对处理器件对应的内存页面进行回收。其中,该处理器件可以为一个处理器(CPU),也可以为多核处理器中的一个核。
可选的,电子设备中的处理器器件可能会有多个,在这种情况下,触发操作系统在执行第三内存回收方式可以包括:触发对多个处理器件进行内存回收,若等待到多个处理器件中的目标处理器件完成内存页面回收,将所回收的内存页面分配给内存使用对象,其中,所示目标处理器件对应的可回收的内存页面的数量大于第三阈值。可选的,提升目标处理器件对应的内存回收线程的优先级。
其中,在有多个处理器件的情况下,每个处理器件各自对应的可回收的内存页面的量可能会有不同。在开始对多个处理器件进行内存回收后,在相关的方式中会同步的等待多个处理器件的回收过程,进而在等待到所有的处理器件均完成内存回收后,才会将回收得到的内存页面进行返回。但是,如前所示,不同的处理器件对应的可回收的内存页面(例如,pcppages存量)会有不同,若某一处理器件对应的可回收的内存页面比较少,但是该处理器件对应的内存回收操作又较慢,则就会造成对该处理器件的等待实际并不值得。因此,通过提前获取每个处理器件各自的可回收的内存页面的量,进而可以确定需要进行等待的处理器件,进而实现等待耗时与所得到的收益(回收得到的内存页面)的平衡。
示例性的,电子设备所包括有处理器件C1、处理器件C2、处理器件C3以及处理器件C4。其中,可以获取到处理器件C1的可回收的内存页面的量为P1,处理器件C2的可回收的内存页面的量为P2,处理器件C3的可回收的内存页面的量为P3以及处理器件C4的可回收的内存页面的量为P4。若其中P3和P4大于第三阈值,则可以将处理器件C3以及处理器件C4作为目标处理器件,进而在执行第三内存回收方式的过程中,若检测到处理器件C3以及处理器件C4完成内存页面的回收操作,则会将所回收的内存页面返回给内存使用对象,而不会在处理器件C1以及处理器件C2还未完成内存页面的回收操作的情况下,继续等待处理器件C1以及处理器件C。
再者需要说明的是,处理器件在进行内存页面的回收过程中是通过触发对应的内存回收线程来执行的。但是,处理器件对应的内存回收线程的优先级通常都较低,进而在处理器件既需要处理数据处理任务,又需要进行内存页面的回收的情况下,内存回收线程会被延后运行,进而就会造成处理器件无法及时的完成内存页面的回收,这样就可能会造成优先级高的用户线程等待优先级低的用户线程的情况。例如,若触发内存分配请求的内存使用对象为用户线程A,且会基于本申请实施例提供的方式触发进行内存回收操作,在执行第三内存回收方式的过程中,若某一处理器件既需要处理用户线程B(优先级低于用户线程A),又需要进行内存页面的回收的情况下,则会出现优先级更高的用户线程A反而需要等待优先级更低的用户线程B的情况。因此,在本实施例中,通过提升目标处理器件对应的内存回收线程的优先级,可以使得目标处理器件可以更加优先执行内存页面的回收操作,在提升内存回收的效率,以便可以更加快速的为内存使用对象分配所需的内存页面的情况下,还可以保证优先级更高的内存使用对象可以优先于优先级更低的内存使用对象运行。
示例性的,以处理器件为CPU为例,如图11所示,在有多个CPU的情况下,电子设备可以先遍历每个CPU,以确定每个CPU的pcppages存量是否大于第三阈值。进而将对应的pcppages存量大于第三阈值的CPU作为目标CPU。并动态调整目标CPU的内存回收线程的优先级,以将目标CPU的内存回收线程的优先级进行提升。之后,则唤醒多个CPU的内存回收线程开始进行内存回收。在等到目标CPU完成pcppages存量回收后,则可以将回收到的内存页面分配给内存使用对象。
需要说明的是,为了使得相关的操作系统可以支持本实施提供的第三内存回收方式。将可以支持本实施例提供的第三内存方式的代码写入到指定库当中。在这种情况下,需要执行前述的第三内存回收方式,则可以通过调用指定库来执行第三内存回收方式所包括的步骤。
需要说明的是,在内存池中没有标识对应的内存页面的情况下,则会触发操作系统进行内存回收操作,在该内存回收操作中可以同时并行开始执行第一内存回收方式、第二内存回收方式以及第三内存回收方式。
再者,在存在第一内存回收方式、第二内存回收方式以及第三内存回收方式的情况下,也可以触发操作在进行内存回收操作的过程中,只执行一种内存回收方式。例如,可以只执行第一内存回收方式,或者可以只执行第二内存回收方式。
本实施例提供的一种内存页面处理方法,从而通过上述方式使得可以预先建立内存池,并从操作系统中预先申请内存页面存放到该内存池中,进而在有内存使用对象进行内存页面的申请时,可以直接从内存池中获取内存使用对象所需的内存页面,进而避免了内存使用对象需要内存页面时,触发操作系统进行内存回收操作的概率,进而进一步的降低了在操作系统执行内存回收操作的过程中,出现内存回收操作的阻塞而造成内存使用对象无法及时的获取到所需的内存页面的概率,进而提升了为内存使用对象分配所需内存页面的效率。
并且,在本实施例中,在内存池中没有内存使用对象所需的内存页面的情况下,还未触发通过操作系统进行内存回收操作,以便可以为内存使用对象分配所需的内存页面。并且,在内存回收操作包括第一内存回收方式、第二内存回收方式以及第三内存回收方式的情况下,分别针对第一内存回收方式、第二内存回收方式以及第三内存回收方式进行了优化,提升了第一内存回收方式、第二内存回收方式以及第三内存回收方式各自的回收效率和回收有效性,进一步的使得在进入内存回收操作的情况下,可以更为高效的进行内存回收,以提升为内存使用对象分配内存的效率。
再者,在本实施例中,针对驱动的内存回收接口、页面持锁、线程优先级等分别进行了异步化的优化,进而也有效的解决了由于驱动的内存回收接口、页面持锁、线程优先级等原因导致的内存回收慢和内存使用对象阻塞导致的性能卡顿问题。并且,也使得可以有效的降低了内存回收所造成的处理器负载。
请参阅图12,本申请实施例提供的一种内存页面处理装置400,装置400包括:
内存标识获取单元410,用于响应于内存使用对象触发的内存分配请求,获取内存分配请求所申请分配的内存页面的标识。
内存处理单元420,用于若预先建立的内存池中有标识的内存页面,从内存池中获取对应标识的内存页面分配给内存使用对象,其中,内存池中的内存页面为预先从电子设备的操作系统申请得到。
作为一种方式,标识包括内存页面的类型。内存标识获取单元410,具体用于若预先建立的内存池中有类型的内存页面,从内存池中获取类型的内存页面分配给内存使用对象。
作为一种方式,内存池中包括有多个链表,每个链表对应的标识不同。在这种方式下,内存处理单元420,具体用于若预先建立的内存池中存在目标链表,从目标链表中获取对应标识的内存页面分配给内存使用对象,目标链表对应的标识与所申请分配的内存页面的标识相同。
可选的,内存处理单元420,还用于若目标链表中的剩余的内存页面的数量低于第一数量阈值,启动第一异步线程从操作系统中申请对应的内存页面,并将所申请得到的内存页面配置到目标链表。
可选的,内存处理单元420,还具体用于若预先建立的内存池中存在目标链表,检测目标链表中的内存页面的数量是否大于第二数量阈值;若大于第二数量阈值,从目标链表中获取对应标识的内存页面分配给内存使用对象。若不大于第二数量阈值,则等待第一指定时长后再次检测目标链表中的内存页面的数量是否大于第二数量阈值;若大于第二数量阈值,从目标链表中获取对应标识的内存页面分配给内存使用对象;若不大于第二数量阈值,则触发操作系统进行内存回收操作,以将内存回收操作所回收的内存页面分配给内存使用对象。
作为一种方式,内存处理单元420,还用于若预先建立的内存池中没有标识的内存页面,触发操作系统进行内存回收操作,以将内存回收操作所回收的内存页面分配给内存使用对象。
作为一种方式,内存处理单元420,还用于触发操作系统在进行内存回收的过程中,并行执行第一内存回收方式以及第二内存回收方式,其中,第一内存回收方式用于回收应用程序的内存页面,第二内存回收方式用于回收电子设备的驱动的内存页面。
可选的,内存处理单元420,具体用于通过操作系统的内核执行第一内存回收方式,以及并行通过设置在操作系统中的指定库执行第二内存回收方式。内存处理单元420,还具体用于阻止操作系统的内核执行第二内存回收方式。
作为一种方式,电子设备的驱动有多个,且多个驱动的回收顺序不同。内存处理单元420,还具体用于在执行第二内存回收方式的过程中,若在前进行内存页面回收的驱动对应的回收耗时大于第二指定时长,则启动第二异步线程开始对在后进行内存页面回收的驱动进行内存页面的回收。
可选的,内存处理单元420,还具体用于在执行第一内存回收方式的过程中,响应于获取到当前的待回收内存页面,尝试对当前的待回收内存页面进行持锁;若尝试持锁失败,启动第三异步线程对当前的待回收内存页面进行回收,以及尝试对排序在当前的待回收内存页面之后的待进行回收的内存页面进行持锁。若尝试持锁失败,检测共享链表中是否还有剩余的空间,共享链表用于存储需要通过第三异步线程进行回收的内存页面;若有剩余的空间,将待进行回收的内存页面增加到共享链表中,并启动第三异步线程对当前的待回收内存页面进行回收。若没有剩余的空间,则等待待进行回收的内存页面可持锁时,对待进行回收的内存页面进行持锁,并对待进行回收的内存页面进行回收。
可选的,内存处理单元420,还用于触发操作系统执行第三内存回收方式,第三内存回收方式为对处理器件对应的内存页面进行回收。内存处理单元420,具体用于触发对多个处理器件进行内存回收;若等待到多个处理器件中的目标处理器件完成内存页面回收,将所回收的内存页面分配给内存使用对象,其中,所示目标处理器件对应的可回收的内存页面的数量大于第三阈值。可选的,内存处理单元420,还具体用于提升目标处理器件对应的内存回收线程的优先级。
本实施例提供的一种内存页面处理装置,进而避免了内存使用对象需要内存页面时,触发操作系统进行内存回收操作的概率,进而进一步的降低了在操作系统执行内存回收操作的过程中,出现内存回收操作的阻塞而造成内存使用对象无法及时的获取到所需的内存页面的概率,进而提升了为内存使用对象分配所需内存页面的效率。
需要说明的是,本申请中装置实施例与前述方法实施例是相互对应的,装置实施例中具体的原理可以参见前述方法实施例中的内容,此处不再赘述。
下面将结合图13对本申请提供的一种电子设备进行说明。
请参阅图13,基于上述的内存页面处理方法、装置,本申请实施例还提供的一种可以执行前述内存页面处理方法的电子设备1000。电子设备1000包括相互耦合的一个或多个(图中仅示出一个)处理器102、存储器104、网络模块106、传感器模块108以及音频采集装置110。其中,该存储器104中存储有可以执行前述实施例中内容的程序,而处理器102可以执行该存储器104中存储的程序。
其中,处理器102可以包括一个或者多个处理核。处理器102利用各种接口和线路连接整个电子设备1000内的各个部分,通过运行或执行存储在存储器104内的指令、程序、代码集或指令集,以及调用存储在存储器104内的数据,执行电子设备1000的各种功能和处理数据。可选地,处理器102可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器102可集成中央处理器(Central Processing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器102中,单独通过一块通信芯片进行实现。
存储器104可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器104可用于存储指令、程序、代码、代码集或指令集。存储器104可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。
所述网络模块106用于实现电子设备1000与其他设备之间的信息交互,例如,传输设备控制指令、操纵请求指令以及状态信息获取指令等。而当音频播放设备200具体为不同的设备时,其对应的网络模块106可能会有不同。
传感器模块108可以包括至少一种传感器。具体地,传感器模块108可包括但并不限于:光传感器、运动传感器、压力传感器、红外热传感器、距离传感器、加速度传感器、以及其他传感器。
其中,压力传感器可以检测由按压在电子设备1000产生的压力的传感器。即,压力传感器检测由用户和音频播放设备之间的接触或按压产生的压力,例如由用户的耳朵与移动终端之间的接触或按压产生的压力。因此,压力传感器可以用来确定在用户与电子设备1000之间是否发生了接触或者按压,以及压力的大小。
其中,加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别电子设备1000姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等。另外,电子设备1000还可配置陀螺仪、气压计、湿度计、温度计等其他传感器,在此不再赘述。
音频采集装置110,用于进行音频信号采集。可选的,音频采集装置110包括有多个音频采集器件。该音频采集器件可以为麦克风。
作为一种方式,电子设备1000的网络模块为射频模块,该射频模块用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯。所述射频模块可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。例如,该射频模块可以通过发送或者接收的电磁波与外部设备进行信息交互,进而接收外部设备所发送的音频信号。
再者,电子设备1000还可以包括有图像采集器件以进行图像采集。例如,可以通过该图像采集器件拍摄视频、静态图片或者动态图片。
请参考图14,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质800中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质800可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质800包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质800具有执行上述方法中的任何方法步骤的程序代码810的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码810可以例如以适当形式进行压缩。
综上所述,本申请提供的一种内存页面处理方法、装置以及电子设备,在响应于内存使用对象触发的内存分配请求后,可以先获取所述内存分配请求所申请分配的内存页面的标识,进而确定预先建立的内存池中有所述标识的内存页面的情况下,从内存池中获取对应所述标识的内存页面分配给所述内存使用对象。从而通过上述方式使得可以预先建立内存池,并从操作系统中预先申请内存页面存放到该内存池中,进而在有内存使用对象进行内存页面的申请时,可以直接从内存池中获取内存使用对象所需的内存页面,进而避免了内存使用对象需要内存页面时,触发操作系统进行内存回收操作的概率,进而进一步的降低了在操作系统执行内存回收操作的过程中,出现内存回收操作的阻塞而造成内存使用对象无法及时的获取到所需的内存页面的概率,进而提升了为内存使用对象分配所需内存页面的效率。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
本文发布于:2023-04-14 17:00:24,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/1/87286.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |