CN111475299B - 内存分配方法、装置、存储介质及电子设备 - Google Patents
内存分配方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN111475299B CN111475299B CN202010261205.0A CN202010261205A CN111475299B CN 111475299 B CN111475299 B CN 111475299B CN 202010261205 A CN202010261205 A CN 202010261205A CN 111475299 B CN111475299 B CN 111475299B
- Authority
- CN
- China
- Prior art keywords
- memory
- thread
- memory space
- space
- idle
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000004590 computer program Methods 0.000 claims description 19
- 238000012544 monitoring process Methods 0.000 claims description 12
- 238000011084 recovery Methods 0.000 claims description 11
- 238000004064 recycling Methods 0.000 claims description 11
- 230000002618 waking effect Effects 0.000 claims description 3
- 230000008569 process Effects 0.000 description 23
- 230000000903 blocking effect Effects 0.000 description 10
- 230000004888 barrier function Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000006835 compression Effects 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 230000003111 delayed effect Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 2
- 238000000547 structure data Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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 the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本申请实施例公开了一种内存分配方法、装置、存储介质及电子设备,其中,本申请实施例中,当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量;判断第一空闲内存量是否小于预设阈值;当第一空闲内存量小于预设阈值时,判断线程是否为UI线程;若线程为UI线程,则基于第二内存空间响应内存分配请求;若线程不为UI线程,则对第一内存空间中处于占用状态的内存空间进行回收。通过这种方式,将第二内存空间作为专用于为UI线程所使用的内存空间,当第一内存空间不足时,使用第二内存空间响应UI线程的内存分配请求,可以有效减少UI线程分配内存出现延迟的问题,减少UI线程的等待,改善系统的卡顿和丢帧情况。
Description
技术领域
本申请涉及电子设备技术领域,具体涉及一种内存分配方法、装置、存储介质及电子设备。
背景技术
随着技术的发展,电子设备中安装的各类应用程序越来越多,例如视频类应用、游戏类应用以及即时通讯类应用等。这使得电子设备经常需要在前台和后台运行很多个应用程序。相关技术中,当电子设备中运行多个应用程序时,该电子设备容易出现系统卡顿。
发明内容
本申请实施例提供一种内存分配方法、装置、存储介质及电子设备,能够减少系统卡顿,提高系统流畅度。
第一方面,本申请实施例提供一种内存分配方法,包括:
当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量;
判断所述第一空闲内存量是否小于预设阈值;
当所述第一空闲内存量小于所述预设阈值时,判断所述线程是否为UI线程;
若所述线程为UI线程,则基于第二内存空间响应所述内存分配请求;
若所述线程不为UI线程,则对所述第一内存空间中处于占用状态的内存空间进行回收。
第二方面,本申请实施例还提供一种内存分配装置,包括:
内存监测模块,用于当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量;
所述内存监测模块,还用于判断所述第一空闲内存量是否小于预设阈值;
线程判断模块,用于当所述第一空闲内存量小于所述预设阈值时,判断所述线程是否为UI线程;
内存分配模块,用于若所述线程为UI线程,则基于第二内存空间响应所述内存分配请求;
内存回收模块,用于若所述线程不为UI线程,则对所述第一内存空间中处于占用状态的内存空间进行回收。
第三方面,本申请实施例还提供一种存储介质,其上存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如本申请任一实施例提供的内存分配方法。
第四方面,本申请实施例还提供一种电子设备,包括处理器和存储器,所述存储器有计算机程序,所述处理器通过调用所述计算机程序,用于执行如本申请任一实施例提供的内存分配方法。
本申请实施例提供的技术方案,在接收到线程发送的内存分配请求时,先确定第一内存空间的第一空闲内存量,并判断第一空闲内存量是否小于预设阈值,当第一空闲内存量小于预设阈值时,说明第一内存空间的剩余内存不足,需要进行内存回收后才能进行内存的分配,这时判断该线程是不是UI线程,如果是UI线程,为了避免该UI线程等待时间过长而造成界面卡顿,基于第二内存空间对该内存分配请求进行响应,使得UI线程尽快得到分配的内存。而如果该线程不是UI线程,则对第一内存空间中处于占用状态的内存空间进行回收,避免非UI线程占用第二内存空间。通过这种方式,将第二内存空间作为专用于为UI线程所使用的内存空间,当第一内存空间不足时,使用专用的第二内存空间响应UI线程的内存分配请求,使得UI线程的内存分配多了一层屏障,可以有效减少UI线程分配内存出现延迟的问题,减少UI线程的等待,改善系统的卡顿和丢帧情况,提高系统流畅度。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的内存分配方法的第一种流程示意图。
图2为本申请实施例提供的内存分配方法的第二种流程示意图。
图3为本申请实施例提供的内存分配装置的结构示意图。
图4为本申请实施例提供的电子设备的第一种结构示意图。
图5为本申请实施例提供的电子设备的第二种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请的保护范围。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本申请实施例提供一种内存分配方法,该内存分配方法的执行主体可以是本申请实施例提供的内存分配装置,或者集成了该内存分配装置的电子设备,其中该内存分配装置可以采用硬件或者软件的方式实现。其中,电子设备可以是智能手机、平板电脑、掌上电脑、笔记本电脑、或者台式电脑等设备。
请参阅图1,图1为本申请实施例提供的内存分配方法的第一种流程示意图。本申请实施例提供的内存分配方法的具体流程可以如下:
在101中,当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量。
本申请实施例中,电子设备的操作系统可以是基于linux内核的系统,例如,安卓操作系统等。电子设备的系统进程和应用程序的进程的运行,都需要系统内核为其分配内存空间。并且随着系统的运行情况,内核不断地进行着内存的回收与分配等。
线程是一条执行路径,是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成。线程由CPU(centralprocessing unit,中央处理器)独立调度执行,在多CPU环境下就允许多个线程同时运行。并且,从系统内核的层面来说,把所有线程都当作进程来实现。即在内核态,内核并没有准备特别的调度算法或者定义特别的数据结构来表示线程。此处的线程仅仅被视为一个与其它进程共享资源的进程。每个线程都具有各自对应的task struct,所以从内核的角度来说,线程看起来就像是一个普通的进程(只是该进程和其他一些进程共享某些资源,如地址空间)。基于此,下文中并不特别区分发送内存分配请求的是线程还是进程,只是统一将发送内存分配请求的来源称之为线程,因为对于系统内核来说,无论发送内存分配请求的对象是还是进程,其处理方式都是相同的。
内核在接收到线程发送的内存分配请求时,先确定第一内存空间的第一空闲内存量的大小。其中,空闲内存量是指系统的第一内存空间中还未分配的、处于空闲状态的剩余内存空间的容量,例如,电子设备的第一内存空间的大小为4G,其中有3G已经分配给一个或者多个运行中的进程使用,这3G的内存空间的状态为占用状态,另外1G处于空闲状态,则第一内存空间当前的空闲内存量为1G。
本申请实施例中,将电子设备的内存空间划分为两部分,包括第一内存空间和第二内存空间。其中,第一内存空间可以为任何线程的运行分配内存。而第二内存空间专用于为UI线程的运行分配内存。一些实施例中,第一内存空间的容量可以大于第二内存空间的容量,比如,电子设备的总内存容量为4G,可以分配1G的内存空间,作为第二内存空间。剩余的内存空间仍按照原本的分配方式进行分配。
其中,作为一种预留第二内存空间的实施方式,当检测到系统启动时,从系统内存空间中确定出容量等于预设容量的内存空间,作为第二内存空间,并将所述系统内存空间中除所述第二内存空间之外的部分内存空间或全部内存空间作为第一内存空间。其中,预设容量的具体数值可以根据需要预先设置。通过这种方式,在电子设备的系统启动时,预留一块独立的内存空间,专用于为UI线程分配内存,使得UI线程的内存分配多了一层屏障,可以有效减少UI线程分配内存出现延迟的问题。
在102中,判断所述第一空闲内存量是否小于预设阈值。
在103中,当所述第一空闲内存量小于所述预设阈值时,判断所述线程是否为UI线程。
内核在确定出第一空闲内存量的大小之后,判断第一空闲内存量是否小于预设阈值。其中,预设阈值可以理解为第一内存空间对应的内存水线,内存水线用于表征系统物理内存的空闲情况和使用压力。例如,将预设阈值设置为800M。需要说明的是,此处的阈值数字仅为举例说明,在实际应用中,可以根据需要设置预设阈值的大小。
当内核检测到第一空闲内存量小于预设阈值时,说明系统当前已处于低内存状态,需要进行内存回收并使空闲内存量大于预设阈值,才能继续进行内存分配。
这种情况下,对于一些线程来说,比如UI(User Interface,用户界面)线程,这些线程是否能够流畅的运行,极大地影响着界面的流畅度,当UI线程因为内存不足而处于等待状态时,会造成界面的卡顿或者丢帧。因此,当内核判定第一空闲内存量小于预设阈值时,对该线程是否为UI线程进行判断。
用户在使用电子设备的过程中,电子设备的一些进程在运行时,可能会有多条线程并发的工作,这些线程中的一些线程可能执行界面绘制或者界面渲染的一些任务,这些线程即为UI线程。
本申请的一些实施例中,可以通过线程对应的task struct数据,来判断该线程是否为UI线程,其中,task struct是一种被称为进程描述符的结构体数据,一个线程结构体数据中包含有该线程的所有信息,因此,在一些实施例中,可以通过在对应的task struct数据中添加标识的方式,将线程标记为UI(User Interface,用户界面)线程。本申请实施例中的UI线程是指与用户和电子设备交互相关的线程,UI线程的运行是否流畅,会直接的影响到用户体验。
基于此,可以获取线程的task struct数据,判断其中是否携带有预设的标识信息,如果有,则判定该线程为UI线程,反之,则判定该线程不是UI线程。
或者,在一些实施例中,还可以判断该线程是否为主线程,如果该线程为主线程,则判定该线程为UI线程,反之,则判定该线程不是UI线程。
在104中,若所述线程为UI线程,则基于第二内存空间响应所述内存分配请求。
如果判定该线程为UI线程,则先不对第一内存空间进行内存回收,而是基于UI线程专用的第二内存空间响应该内存分配请求。
内核根据内存分配请求对应的内存需求量大小,从第二内存空间中确定出与该内存需求量大小匹配的目标内存空间,将该目标内存空间分配给该线程。例如,在确定出要分配的目标内存空间之后,获取目标内存空间的内存地址,将其发送给该线程。
在105中,若所述线程不为UI线程,则对所述第一内存空间中处于占用状态的内存空间进行回收。
如果内核判定该线程不是UI线程,则可以对第一内存空间进行内存回收。
其中,在进行内存回收时,可以将预设阈值作为内存回收的目标。即只需要保证进行回收后的空闲内存量不小于预设阈值即可。例如,当前的空闲内存量为560M,预设阈值600M。则需要回收40M的内存空间,以使剩余的空闲内存量达到预设阈值600M。
或者,在一些实施例中,确定内存分配请求对应的内存需求量,根据预设阈值和内存需求量确定需要回收的内存量,例如,当前的空闲内存量为560M,预设阈值为600M,内存需求量为10M,则需要回收50M的内存空间,以使剩余的空闲内存量达到610M。在确定需要回收的内存量之后,唤醒内存回收线程,由该内存回收线程执行内存回收任务,以得到容量不小于目标内存量的空闲内存空间,例如,得到不小于610M的空闲内存空间。
其中,关于内存回收,可以有多种实施方式。比如,进行内存页回收、内存压缩,关闭进程等。在进行内存回收时,内核可以采用上述多种回收方式中的任意一种或者多种方式。当采用多种方式进行内存回收时,这多种内存回收方式可以采用多线程并行的方式进行回收。
例如,在一些实施例中,采用内存压缩的方式进行内存回收,选择已分配内存页中的匿名页作为内存压缩处理的对象,从全部匿名页中选择一定数量的内存页作为目标内存页,对目标内存页进行压缩处理。
又例如,在一些实施例中,从处于运行状态的进程中选择一些重要程度低的进程进行关闭,以释放内存空间,例如,一些切换到后台较长时间的进程。
又例如,在一些实施例中,可以基于LRU(Least Recently Used,最近最少使用)链表,从文件页(File-backed Page)中选择数量与需要回收的内存量匹配的文件页作为目标文件页,并释放这些目标文件页。
并且,这个情况下,内核并不对第二内存空间进行内存回收。因为第二内存空间是专用于为UI线程分配内存的,即使第二内存空间不足,占用第二内存空间的也是UI线程,如果对这些被占用的内存进行释放,可能会影响相关的UI线程的正常运行。基于此,在发送内存分配请求的线程不是UI线程、并且第一内存空间的空闲内存量小于预设阈值时,对第一内存空间中处于占用状态的内存空间进行回收,以获取空闲内存空间分配给该UI线程运行。
在内存回收完成后,第一内存空间有足够的空闲内存量时,可以基于第一内存空间的空闲内存空间为该线程分配内存。
具体实施时,本申请不受所描述的各个步骤的执行顺序的限制,在不产生冲突的情况下,某些步骤还可以采用其它顺序进行或者同时进行。
由上可知,本申请实施例提供的内存分配方法,在接收到线程发送的内存分配请求时,先确定第一内存空间的第一空闲内存量,并判断第一空闲内存量是否小于预设阈值,当第一空闲内存量小于预设阈值时,说明第一内存空间的剩余内存不足,需要进行内存回收后才能进行内存的分配,这时判断该线程是不是UI线程,如果是UI线程,为了避免该UI线程等待时间过长而造成界面卡顿,基于第二内存空间对该内存分配请求进行响应,使得UI线程尽快得到分配的内存。而如果该线程不是UI线程,则对第一内存空间中处于占用状态的内存空间进行回收,避免非UI线程占用第二内存空间。通过这种方式,将第二内存空间作为专用于为UI线程所使用的内存空间,当第一内存空间不足时,使用专用的第二内存空间响应UI线程的内存分配请求,使得UI线程的内存分配多了一层屏障,可以有效减少UI线程分配内存出现延迟的问题,减少UI线程的等待,改善系统的卡顿和丢帧情况,提高系统流畅度。
在一些实施例中,判断所述第一空闲内存量是否小于预设阈值之后,该方法还包括:当所述第一空闲内存量大于或等于所述预设阈值时,基于所述第一内存空间中的空闲内存空间响应所述内存分配请求。
无论发送内存分配请求的线程是UI线程还是非UI线程,只要第一内存空间有足够的空闲内存量,可以直接基于第一内存空间的空闲内存空间为该线程分配内存。通过这种方式,可以将第二内存空间预留在第一内存空间不足时才进行使用,以进一步保障UI线程能够优先分配到内存空间。
在一些实施例中,所述若所述线程为UI线程,则基于第二内存空间响应所述内存分配请求,包括:所述若所述线程为UI线程,则确定第二内存空间的第二空闲内存量;确定所述内存分配请求对应的内存需求量;判断所述第二空闲内存量是否小于所述内存需求量;当所述第二空闲内存量不小于所述内存需求量时,从根据所述内存需求量和所述第二内存空间响应所述内存分配请求;当所述第二空闲内存量小于所述内存需求量时,对所述第一内存空间中处于占用状态的内存空间进行回收。
由于为了完成界面的绘制,可能需要多个UI线程同时运行。因此,在104中,如果判定发送内存分配请求的线程为UI线程,则会从第二内存空间中为该线程分配内存。但是当有多个UI线程占用第二内存空间运行时,第二内存空间中的空闲状态可能已经不足以给该UI线程分配。故,在判定该线程为UI线程之后,分别确定第二内存空间的第二空闲内存量,以及内存分配请求对应的内存需求量;如果内存需求量小于第二空闲内存量,则直接基于第二内存空间响应内存分配请求。如果第二空闲内存量小于内存需求量,则对第一内存空间中处于占用状态的内存空间进行回收。这个情况下,内核并不对第二内存空间进行内存回收。因为第二内存空间是专用于为UI线程分配内存的,即使第二内存空间不足,占用第二内存空间的也是UI线程,为了避免影响已经处于运行状态的UI线程的正常运行,不会释放这些UI线程占用的内存,直至他们执行完毕。
此外,在对第一内存空间中处于占用状态的内存空间进行回收的同时,还会对第二内存空间中的第二空闲内存量进行实时监测,如果在第一内存空间回收完成之前,第二内存空间中有内存被释放而使得第二空闲内存量大于内存需求量,则仍然基于第二内存空间进行内存分配。
根据前面实施例所描述的方法,以下将举例作进一步详细说明。
请参阅图2,图2为本发明实施例提供的内存分配方法的第二流程示意图。
所述方法包括:
在201中,当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量。
电子设备检测到系统启动时,从系统内存空间中确定出容量等于预设容量的内存空间,作为第二内存空间,并将所述系统内存空间中除所述第二内存空间之外的部分内存空间或全部内存空间作为第一内存空间。其中,第一内存空间可以为任何线程的运行分配内存。而第二内存空间专用于为UI线程的运行分配内存。比如,电子设备的总内存容量为4G,可以分配1G的内存空间,作为第二内存空间。剩余的内存空间仍按照原本的分配方式进行分配。
内核在接收到线程发送的内存分配请求时,先确定第一内存空间的第一空闲内存量的大小。
在202中,判断所述第一空闲内存量是否小于预设阈值。
内核在确定出第一空闲内存量的大小之后,判断第一空闲内存量是否小于预设阈值。当所述第一空闲内存量小于所述预设阈值时,执行203;当所述第一空闲内存量大于或等于所述预设阈值时,执行208。
在203中,判断所述线程是否为UI线程。
当内核检测到第一空闲内存量小于预设阈值时,说明系统当前已处于低内存状态,需要进行内存回收并使空闲内存量大于预设阈值,才能继续进行内存分配。这种情况下,为了避免UI线程等待,对该线程是否为UI线程进行判断。
若所述线程为UI线程,则执行204;若所述线程不为UI线程,则执行207。
在204中,确定第二内存空间的第二空闲内存量,并确定所述内存分配请求对应的内存需求量。
在205中,判断所述第二空闲内存量是否小于所述内存需求量。
如果判定该线程为UI线程,则先不对于第一内存空间进行内存回收,而是基于UI线程的专用的第二内存空间响应该内存分配请求。分别确定第二内存空间的第二空闲内存量,以及内存分配请求对应的内存需求量;当所述第二空闲内存量不小于所述内存需求量时,执行206;当所述第二空闲内存量小于所述内存需求量时,执行207。
在206中,从根据所述内存需求量和所述第二内存空间响应所述内存分配请求。
内核根据内存分配请求对应的内存需求量大小,如果第二空闲内存量不小于内存需求量,则从第二内存空间中确定出与该内存需求量大小匹配的目标内存空间,将该目标内存空间分配给该线程。
在207中,对所述第一内存空间中处于占用状态的内存空间进行回收。
如果第二空闲内存量小于内存需求量,则对第一内存空间中处于占用状态的内存空间进行回收。这个情况下,内核并不对第二内存空间进行内存回收。因为第二内存空间是专用于为UI线程分配内存的,即使第二内存空间不足,占用第二内存空间的也是UI线程,为了避免影响已经处于运行状态的UI线程的正常运行,不会释放这些UI线程占用的内存,直至他们执行完毕。
在208中,基于所述第一内存空间中的空闲内存空间响应所述内存分配请求。
无论发送内存分配请求的线程是UI线程还是非UI线程,只要第一内存空间有足够的空闲内存量,可以直接基于第一内存空间的空闲内存空间为该线程分配内存。通过这种方式,可以将第二内存空间预留在第一内存空间不足时才进行使用,以进一步保障UI线程能够优先分配到内存空间。
由上可知,本发明实施例提出的内存分配方法,在电子设备启动时,为UI线程预留专用的内存空间,记为第二内存空间,剩余的内存空间作为第一内存空间,按照系统原始机制正常分配内存,在第一内存空间的空闲内存空间不足时,使用专用的第二内存空间响应UI线程的内存分配请求,使得UI线程的内存分配多了一层屏障,可以有效减少UI线程分配内存出现延迟的问题,减少UI线程的等待,改善系统的卡顿和丢帧情况,提高系统流畅度。
在一实施例中还提供一种内存分配装置。请参阅图3,图3为本申请实施例提供的内存分配装置300的结构示意图。其中该内存分配装置300应用于电子设备,该内存分配装置300包括内存监测模块301、线程判断模块302、内存分配模块303以及内存回收模块304,如下:
内存监测模块301,用于当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量;
内存监测模块301,还用于判断所述第一空闲内存量是否小于预设阈值;
线程判断模块302,用于当所述第一空闲内存量小于所述预设阈值时,判断所述线程是否为UI线程;
内存分配模块303,用于若所述线程为UI线程,则基于第二内存空间响应所述内存分配请求;
内存回收模块304,用于若所述线程不为UI线程,则对所述第一内存空间中处于占用状态的内存空间进行回收。
在一些实施例中,内存分配模块303,还用于当所述第一空闲内存量大于或等于所述预设阈值时,基于所述第一内存空间中的空闲内存空间响应所述内存分配请求。
在一些实施例中,内存分配模块303,还用于所述若所述线程为UI线程,则确定第二内存空间的第二空闲内存量;确定所述内存分配请求对应的内存需求量;判断所述第二空闲内存量是否小于所述内存需求量;当所述第二空闲内存量不小于所述内存需求量时,从根据所述内存需求量和所述第二内存空间响应所述内存分配请求;当所述第二空闲内存量小于所述内存需求量时,对所述第一内存空间中处于占用状态的内存空间进行回收。
在一些实施例中,该内存分配装置300还包括内存划分模块,该内存划分模块用于:
当检测到系统启动时,从系统内存空间中确定出容量等于预设容量的内存空间,作为第二内存空间,并将所述系统内存空间中除所述第二内存空间之外的部分内存空间或全部内存空间作为第一内存空间。
在一些实施例中,内存分配模块303,还用于基于所述第一内存空间中的空闲内存空间响应所述内存分配请求。
在一些实施例中,内存回收模块304,还用于确定所述内存分配请求对应的内存需求量;
根据所述内存需求量和所述预设阈值确定目标内存量;
唤醒内存回收线程,以使所述内存回收线程对所述第一内存空间中处于占用状态的内存空间进行回收,以得到容量不小于所述目标内存量的空闲内存空间。
在一些实施例中,线程判断模块302,还用于检测所述线程是否具有预设的标识信息,其中,若所述线程具有所述预设的标识信息,则判定所述线程为UI线程,若所述线程不具有所述预设的标识信息,则判定所述线程不是UI线程。
具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,在此不再赘述。
应当说明的是,本申请实施例提供的内存分配装置与上文实施例中的内存分配方法属于同一构思,在内存分配装置上可以运行内存分配方法实施例中提供的任一方法,其具体实现过程详见内存分配方法实施例,此处不再赘述。
由上可知,本申请实施例提出的内存分配装置,该装置包括内存监测模块301、线程判断模块302、内存分配模块303以及内存回收模块304,在接收到线程发送的内存分配请求时,内存监测模块301先确定第一内存空间的第一空闲内存量,并判断第一空闲内存量是否小于预设阈值,当第一空闲内存量小于预设阈值时,说明第一内存空间的剩余内存不足,需要进行内存回收后才能进行内存的分配,这时线程判断模块302判断该线程是不是UI线程,如果是UI线程,为了避免该UI线程等待时间过长而造成界面卡顿,内存分配模块303基于第二内存空间对该内存分配请求进行响应,使得UI线程尽快得到分配的内存。而如果该线程不是UI线程,则内存回收模块304对第一内存空间中处于占用状态的内存空间进行回收,避免非UI线程占用第二内存空间。通过这种方式,将第二内存空间作为专用于为UI线程所使用的内存空间,当第一内存空间不足时,使用专用的第二内存空间响应UI线程的内存分配请求,使得UI线程的内存分配多了一层屏障,可以有效减少UI线程分配内存出现延迟的问题,减少UI线程的等待,改善系统的卡顿和丢帧情况,提高系统流畅度。
本申请实施例还提供一种电子设备。所述电子设备可以是智能手机、平板电脑等设备。请参阅图4,图4为本申请实施例提供的电子设备的第一种结构示意图。电子设备400包括处理器401和存储器402。其中,处理器401与存储器402电性连接。
处理器401是电子设备400的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或调用存储在存储器402内的计算机程序,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。
存储器402可用于存储计算机程序和数据。存储器402存储的计算机程序中包含有可在处理器中执行的指令。计算机程序可以组成各种功能模块。处理器401通过调用存储在存储器402的计算机程序,从而执行各种功能应用以及数据处理。
在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量;
判断所述第一空闲内存量是否小于预设阈值;
当所述第一空闲内存量小于所述预设阈值时,判断所述线程是否为UI线程;
若所述线程为UI线程,则基于第二内存空间响应所述内存分配请求;
若所述线程不为UI线程,则对所述第一内存空间中处于占用状态的内存空间进行回收。
在一些实施例中,请参阅图5,图5为本申请实施例提供的电子设备的第二种结构示意图。电子设备400还包括:射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409。其中,处理器401分别与射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409电性连接。
射频电路403用于收发射频信号,以通过无线通信与网络设备或其他电子设备进行通信。
显示屏404可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图像、文本、图标、视频和其任意组合来构成。
控制电路405与显示屏404电性连接,用于控制显示屏404显示信息。
输入单元406可用于接收输入的数字、字符信息或用户特征信息(例如指纹),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。其中,输入单元406可以包括指纹识别模组。
音频电路407可通过扬声器、传声器提供用户与电子设备之间的音频接口。其中,音频电路407包括麦克风。所述麦克风与所述处理器401电性连接。所述麦克风用于接收用户输入的语音信息。
传感器408用于采集外部环境信息。传感器408可以包括环境亮度传感器、加速度传感器、陀螺仪等传感器中的一种或多种。
电源409用于给电子设备400的各个部件供电。在一些实施例中,电源409可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
虽然图中未示出,电子设备400还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量;
判断所述第一空闲内存量是否小于预设阈值;
当所述第一空闲内存量小于所述预设阈值时,判断所述线程是否为UI线程;
若所述线程为UI线程,则基于第二内存空间响应所述内存分配请求;
若所述线程不为UI线程,则对所述第一内存空间中处于占用状态的内存空间进行回收。
在一些实施例中,判断所述第一空闲内存量是否小于预设阈值之后,处理器401执行:当所述第一空闲内存量大于或等于所述预设阈值时,基于所述第一内存空间中的空闲内存空间响应所述内存分配请求。
在一些实施例中,若所述线程为UI线程,则基于第二内存空间响应所述内存分配请求时,处理器401执行:
所述若所述线程为UI线程,则确定第二内存空间的第二空闲内存量;
确定所述内存分配请求对应的内存需求量;
判断所述第二空闲内存量是否小于所述内存需求量;
当所述第二空闲内存量不小于所述内存需求量时,从根据所述内存需求量和所述第二内存空间响应所述内存分配请求;
当所述第二空闲内存量小于所述内存需求量时,对所述第一内存空间中处于占用状态的内存空间进行回收。
在一些实施例中,所述当接收到目标线程发送的内存分配请求时,确定内存空间中的空闲内存量,并判断所述目标线程是否为UI线程之前,处理器401执行:
当检测到系统启动时,从系统内存空间中确定出容量等于预设容量的内存空间,作为第二内存空间,并将所述系统内存空间中除所述第二内存空间之外的部分内存空间或全部内存空间作为第一内存空间。
在一些实施例中,所述对所述第一内存空间中处于占用状态的内存空间进行回收之后,处理器401执行:基于所述第一内存空间中的空闲内存空间响应所述内存分配请求。
在一些实施例中,对所述第一内存空间中处于占用状态的内存空间进行回收时,处理器401执行:
确定所述内存分配请求对应的内存需求量;
根据所述内存需求量和所述预设阈值确定目标内存量;
唤醒内存回收线程,以使所述内存回收线程对所述第一内存空间中处于占用状态的内存空间进行回收,以得到容量不小于所述目标内存量的空闲内存空间。
在一些实施例中,判断所述线程是否为UI线程时,处理器401执行:
检测所述线程是否具有预设的标识信息,其中,若所述线程具有所述预设的标识信息,则判定所述线程为UI线程,若所述线程不具有所述预设的标识信息,则判定所述线程不是UI线程。
由上可知,本申请实施例提供了一种电子设备,所述电子设备在接收到线程发送的内存分配请求时,先确定第一内存空间的第一空闲内存量,并判断第一空闲内存量是否小于预设阈值,当第一空闲内存量小于预设阈值时,说明第一内存空间的剩余内存不足,需要进行内存回收后才能进行内存的分配,这时判断该线程是不是UI线程,如果是UI线程,为了避免该UI线程等待时间过长而造成界面卡顿,基于第二内存空间对该内存分配请求进行响应,使得UI线程尽快得到分配的内存。而如果该线程不是UI线程,则对第一内存空间中处于占用状态的内存空间进行回收,避免非UI线程占用第二内存空间。通过这种方式,将第二内存空间作为专用于为UI线程所使用的内存空间,当第一内存空间不足时,使用专用的第二内存空间响应UI线程的内存分配请求,使得UI线程的内存分配多了一层屏障,可以有效减少UI线程分配内存出现延迟的问题,减少UI线程的等待,改善系统的卡顿和丢帧情况,提高系统流畅度。
本申请实施例还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,所述计算机执行上述任一实施例所述的内存分配方法。
需要说明的是,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过计算机程序来指令相关的硬件来完成,所述计算机程序可以存储于计算机可读存储介质中,所述存储介质可以包括但不限于:只读存储器(ROM,Read OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
此外,本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是某些实施例还包括没有列出的步骤或模块,或某些实施例还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
以上对本申请实施例所提供的内存分配方法、装置、存储介质及电子设备进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (7)
1.一种内存分配方法,其特征在于,包括:
当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量,所述第一内存空间为任何线程的运行分配内存;
判断所述第一空闲内存量是否小于预设阈值;
当所述第一空闲内存量大于或等于所述预设阈值时,基于所述第一内存空间中的空闲内存空间响应所述内存分配请求;
当所述第一空闲内存量小于所述预设阈值时,判断所述线程是否为UI线程;
若所述线程为UI线程,则确定第二内存空间的第二空闲内存量,确定所述内存分配请求对应的内存需求量;当所述第二空闲内存量不小于所述内存需求量时,基于所述内存需求量和第二内存空间响应所述内存分配请求;当所述第二空闲内存量小于所述内存需求量时,对所述第一内存空间中处于占用状态的内存空间进行回收;在对所述第一内存空间中处于占用状态的内存空间进行回收的同时,对所述第二内存空间中的第二空闲内存量进行实时监测,若在所述第一内存空间回收完成之前,所述第二内存空间中有内存被释放而使得所述第二空闲内存量大于所述内存需求量,则基于所述第二内存空间进行内存分配;所述第二内存空间专用于为UI线程的运行分配内存;
若所述线程不为UI线程,则根据所述预设阈值,对所述第一内存空间中处于占用状态的内存空间进行回收,以使得进行回收后的空闲内存量不小于所述预设阈值,并基于所述第一内存空间中的空闲内存空间响应所述内存分配请求。
2.如权利要求1所述的内存分配方法,其特征在于,所述当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量之前,还包括:
当检测到系统启动时,从系统内存空间中确定出容量等于预设容量的内存空间,作为第二内存空间,并将所述系统内存空间中除所述第二内存空间之外的部分内存空间或全部内存空间作为第一内存空间。
3.如权利要求1或2所述的内存分配方法,其特征在于,所述对所述第一内存空间中处于占用状态的内存空间进行回收,包括:
确定所述内存分配请求对应的内存需求量;
根据所述内存需求量和所述预设阈值确定目标内存量;
唤醒内存回收线程,以使所述内存回收线程对所述第一内存空间中处于占用状态的内存空间进行回收,以得到容量不小于所述目标内存量的空闲内存空间。
4.如权利要求1或2所述的内存分配方法,其特征在于,所述判断所述线程是否为UI线程,包括:
检测所述线程是否具有预设的标识信息,其中,若所述线程具有所述预设的标识信息,则判定所述线程为UI线程,若所述线程不具有所述预设的标识信息,则判定所述线程不是UI线程。
5.一种内存分配装置,其特征在于,包括:
内存监测模块,用于当接收到线程发送的内存分配请求时,确定第一内存空间的第一空闲内存量,所述第一内存空间为任何线程的运行分配内存;
所述内存监测模块,还用于判断所述第一空闲内存量是否小于预设阈值;
线程判断模块,用于当所述第一空闲内存量小于所述预设阈值时,判断所述线程是否为UI线程;
内存分配模块,用于若所述线程为UI线程,则确定第二内存空间的第二空闲内存量,确定所述内存分配请求对应的内存需求量;当所述第二空闲内存量不小于所述内存需求量时,基于所述内存需求量和第二内存空间响应所述内存分配请求;当所述第二空闲内存量小于所述内存需求量时,对所述第一内存空间中处于占用状态的内存空间进行回收;在对所述第一内存空间中处于占用状态的内存空间进行回收的同时,对所述第二内存空间中的第二空闲内存量进行实时监测,若在所述第一内存空间回收完成之前,所述第二内存空间中有内存被释放而使得所述第二空闲内存量大于所述内存需求量,则基于所述第二内存空间进行内存分配;所述第二内存空间专用于为UI线程的运行分配内存;
所述内存分配模块,还用于当所述第一空闲内存量大于或等于所述预设阈值时,基于所述第一内存空间中的空闲内存空间响应所述内存分配请求;
内存回收模块,用于若所述线程不为UI线程,则根据所述预设阈值,对所述第一内存空间中处于占用状态的内存空间进行回收,以使得进行回收后的空闲内存量不小于所述预设阈值,并基于所述第一内存空间中的空闲内存空间响应所述内存分配请求。
6.一种存储介质,其上存储有计算机程序,其特征在于,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至4任一项所述的内存分配方法。
7.一种电子设备,包括处理器和存储器,所述存储器存储有计算机程序,其特征在于,所述处理器通过调用所述计算机程序,用于执行如权利要求1至4任一项所述的内存分配方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010261205.0A CN111475299B (zh) | 2020-04-03 | 2020-04-03 | 内存分配方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010261205.0A CN111475299B (zh) | 2020-04-03 | 2020-04-03 | 内存分配方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111475299A CN111475299A (zh) | 2020-07-31 |
CN111475299B true CN111475299B (zh) | 2024-05-07 |
Family
ID=71749753
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010261205.0A Active CN111475299B (zh) | 2020-04-03 | 2020-04-03 | 内存分配方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111475299B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114556309A (zh) * | 2020-12-07 | 2022-05-27 | 深圳市大疆创新科技有限公司 | 内存空间的分配方法、装置及存储介质 |
CN113076194A (zh) * | 2021-03-29 | 2021-07-06 | Oppo广东移动通信有限公司 | 内存资源分配方法、装置、终端和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105302738A (zh) * | 2015-12-09 | 2016-02-03 | 北京东土科技股份有限公司 | 一种内存分配方法及装置 |
CN106953850A (zh) * | 2017-03-02 | 2017-07-14 | 飞天诚信科技股份有限公司 | 一种支持多应用的安全输入方法及装置 |
CN107203477A (zh) * | 2017-06-16 | 2017-09-26 | 深圳市万普拉斯科技有限公司 | 内存分配方法、装置、电子设备及可读存储介质 |
CN110609748A (zh) * | 2019-09-05 | 2019-12-24 | 青岛海信移动通信技术股份有限公司 | 一种内存分配方法、电子设备及存储介质 |
CN110895492A (zh) * | 2019-12-11 | 2020-03-20 | Oppo(重庆)智能科技有限公司 | 设备控制方法、装置、存储介质及电子设备 |
-
2020
- 2020-04-03 CN CN202010261205.0A patent/CN111475299B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105302738A (zh) * | 2015-12-09 | 2016-02-03 | 北京东土科技股份有限公司 | 一种内存分配方法及装置 |
CN106953850A (zh) * | 2017-03-02 | 2017-07-14 | 飞天诚信科技股份有限公司 | 一种支持多应用的安全输入方法及装置 |
CN107203477A (zh) * | 2017-06-16 | 2017-09-26 | 深圳市万普拉斯科技有限公司 | 内存分配方法、装置、电子设备及可读存储介质 |
CN110609748A (zh) * | 2019-09-05 | 2019-12-24 | 青岛海信移动通信技术股份有限公司 | 一种内存分配方法、电子设备及存储介质 |
CN110895492A (zh) * | 2019-12-11 | 2020-03-20 | Oppo(重庆)智能科技有限公司 | 设备控制方法、装置、存储介质及电子设备 |
Non-Patent Citations (2)
Title |
---|
HMalloc: A Hybrid, Scalable, and Lock-Free Memory Allocator for Multi-Threaded Applications;Tianlin Li等;《2019 IEEE 25th International Conference on Parallel and Distributed Systems (ICPADS)》;20200130;第406-409页 * |
安卓平台下优化大师软件的设计与实现;方浩;《中国优秀硕士学位论文全文数据库信息科技辑》;20181215(第12期);第I138-350页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111475299A (zh) | 2020-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111158910B (zh) | 内存管理方法、装置、存储介质及电子设备 | |
CN110888746B (zh) | 内存管理方法、装置、存储介质及电子设备 | |
CN111078406B (zh) | 内存管理方法、装置、存储介质及电子设备 | |
CN110895492B (zh) | 设备控制方法、装置、存储介质及电子设备 | |
CN111831441A (zh) | 内存回收方法、装置、存储介质及电子设备 | |
CN108132735B (zh) | 终端与应用控制方法 | |
CN111274039B (zh) | 内存回收方法、装置、存储介质及电子设备 | |
CN111078586B (zh) | 内存回收方法、装置、存储介质及电子设备 | |
CN111831440A (zh) | 内存回收方法、装置、存储介质及电子设备 | |
CN111475299B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN111078410B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN111831434A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN115509953A (zh) | 内存回收方法及其装置 | |
CN111831433A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN111078587B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN111831432B (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
CN111831435A (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN111831438A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN111831436A (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
CN111831439A (zh) | Io请求的处理方法、装置、存储介质及电子设备 | |
CN116578422A (zh) | 资源分配方法和电子设备 | |
CN113495780A (zh) | 任务调度方法、装置、存储介质及电子设备 | |
CN111831437A (zh) | 设备管理方法、装置、存储介质及电子设备 | |
CN111078405B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN113032290A (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 |