CN116661987A - 内存申请方法和电子设备 - Google Patents
内存申请方法和电子设备 Download PDFInfo
- Publication number
- CN116661987A CN116661987A CN202211708812.2A CN202211708812A CN116661987A CN 116661987 A CN116661987 A CN 116661987A CN 202211708812 A CN202211708812 A CN 202211708812A CN 116661987 A CN116661987 A CN 116661987A
- Authority
- CN
- China
- Prior art keywords
- stack
- memory
- application
- grabbing
- threshold
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 322
- 238000000034 method Methods 0.000 title claims abstract description 123
- 230000006870 function Effects 0.000 claims abstract description 38
- 238000004590 computer program Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 abstract description 59
- 230000000903 blocking effect Effects 0.000 abstract description 4
- 238000005070 sampling Methods 0.000 description 57
- 238000004891 communication Methods 0.000 description 28
- 239000010410 layer Substances 0.000 description 28
- 238000012545 processing Methods 0.000 description 20
- 238000001514 detection method Methods 0.000 description 18
- 238000007726 management method Methods 0.000 description 14
- 238000010295 mobile communication Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 238000001914 filtration Methods 0.000 description 6
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 229920001621 AMOLED Polymers 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000003416 augmentation Effects 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 239000002096 quantum dot Substances 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 210000000988 bone and bone Anatomy 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000012792 core layer Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000005855 radiation Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/073—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- User Interface Of Digital Computer (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例提供了一种内存申请方法和电子设备,该方法由电子设备执行,包括:在检测到应用申请内存的请求的情况下,若已开启抓栈功能,则根据配置的抓栈参数确定是否需要进行抓栈;若需要进行抓栈,则申请持锁并抓栈,以及完成内存申请;若不需要进行抓栈,则完成内存申请。该方法可以减少申请持锁的次数,进而减少进入等待锁的状态的概率,相应的减少了抓栈过程中的应用卡顿现象。
Description
技术领域
本申请涉及电子技术领域,具体涉及一种内存申请方法和电子设备。
背景技术
通常,电子设备中的应用在运行时,需要进行内存申请以保证应用的正常运行,然而,当前的应用种类越来越多,对电子设备的需求也越来越高,相应的引发出了多种内存问题,例如内存泄漏问题。
目前,当电子设备检测到发生内存泄漏时,会通过虚拟机打开抓栈开关,通过抓栈来解析申请内存的应用的信息(或线程信息),进而再完成内存申请过程。然而,相关技术在抓栈过程中会引发应用卡顿现象。
发明内容
本申请提供了一种内存申请方法和电子设备,可以减少抓栈过程中的应用卡顿现象。
第一方面,本申请提供一种内存申请方法,该方法由电子设备执行,包括:在检测到应用申请内存的请求的情况下,若已开启抓栈功能,则根据配置的抓栈参数确定是否需要进行抓栈;若需要进行抓栈,则申请持锁并抓栈,以及完成内存申请;若不需要进行抓栈,则完成内存申请。
其中,电子设备中的应用在显示页面的过程中,主线程会频繁的进行内存申请以绘制页面。若电子设备检测到应用申请内存的请求,则可以向应用分配内存以及调用抓栈方法;在调用抓栈方法的过程中,可以判断当前是否已打开抓栈开关(即是否开启抓栈功能),以确定是否需要执行抓栈过程。
如果没有开启抓栈功能,则不需要进行抓栈。
如果开启抓栈功能,则可以再根据配置的抓栈参数确定是否需要抓栈。可以理解,本申请中的抓栈参数是用于进行抓栈过滤,即过滤掉不需要抓栈的情况。由此,可以减少申请持锁的次数,进而减少进入等待锁的状态的概率,相应的减少了抓栈过程中的应用卡顿现象。
结合第一方面,在第一方面的有些实现方式中,上述抓栈参数包括第一阈值和/或第二阈值,上述根据配置的抓栈参数确定是否需要进行抓栈,包括:根据应用所申请内存的大小与第一阈值之间的大小关系,和/或,应用所申请内存的次数与第二阈值之间的大小关系,确定是否需要进行抓栈。
其中,第一阈值可以为采样内存阈值,第二阈值可以为采样频率阈值,电子设备可以根据该两个阈值确定是否需要抓栈。
在一些实现方式中,上述根据应用所申请内存的大小与第一阈值之间的大小关系,和/或,应用所申请内存的次数与第二阈值之间的大小关系,确定是否需要进行抓栈,包括:若应用所申请内存的大小大于或者等于第一阈值,则确定需要进行抓栈;若应用所申请内存的大小小于第一阈值,则确定不需要进行抓栈。
即,在电子设备根据第一阈值确定是否需要抓栈的情况下,若应用所申请内存的大小大于或者等于第一阈值,则确定需要抓栈;若应用所申请内存的大小小于第一阈值,则确定不需要抓栈。例如,第一阈值可以为10KB,即应用所申请内存的大小大于或者等于10KB时需要抓栈,应用所申请内存的大小小于10KB时不需要抓栈。
在一些实现方式中,上述根据应用所申请内存的大小与第一阈值之间的大小关系,和/或,应用所申请内存的次数与第二阈值之间的大小关系,确定是否需要进行抓栈,包括:若应用所申请内存的次数大于或者等于第二阈值,则确定需要进行抓栈;若应用所申请内存的次数小于第二阈值,则确定不需要进行抓栈。
即,在电子设备根据第二阈值确定是否需要抓栈的情况下,若应用所申请内存的次数大于或者等于第二阈值,则确定需要抓栈;若应用所申请内存的次数小于第二阈值,则确定不需要抓栈。例如,第二阈值可以为1000次,即应用所申请内存的次数大于或者等于1000次时需要抓栈,应用所申请内存的次数小于1000次时不需要抓栈。
在一些实现方式中,上述根据应用所申请内存的大小与第一阈值之间的大小关系,和/或,应用所申请内存的次数与第二阈值之间的大小关系,确定是否需要进行抓栈,包括:在应用所申请内存的大小大于或者等于第一阈值的情况下,确定需要进行抓栈;在应用所申请内存的大小小于第一阈值的情况下,若应用所申请内存的次数大于或者等于第二阈值,则确定需要进行抓栈,若应用所申请内存的次数小于第二阈值,则确定不需要进行抓栈。
即,在电子设备根据第一阈值和第二阈值共同确定是否需要抓栈的情况下,若应用所申请内存的大小大于或者等于第一阈值,则确定需要抓栈;若应用所申请内存的大小小于第一阈值且应用所申请内存的次数大于或者等于第二阈值,则确定需要抓栈;若应用所申请内存的大小小于第一阈值且应用所申请内存的次数小于第二阈值,则确定不需要抓栈。例如,第一阈值可以为10KB,第二阈值可以为1000次,若应用所申请内存的大小大于或者等于10KB,则不再判断其申请内存的次数,直接确定需要抓栈;若应用所申请内存的大小小于10KB,则需要再根据其申请内存的次数进行判断,应用所申请内存的次数大于或者等于1000次时需要抓栈,应用所申请内存的次数小于1000次时不需要抓栈。
上述实现方式中,电子设备结合第一阈值和/或第二阈值对抓栈过程进行过滤,以减少抓栈次数,进而减少申请持锁的次数,从而减少了抓栈过程中的应用卡顿现象。
结合第一方面,在第一方面的有些实现方式中,在应用所申请内存的大小小于第一阈值,且应用所申请内存的次数大于或者等于第二阈值的情况下,上述方法还包括:重置应用所申请内存的次数为0次。
在该实现方式中,如果应用所申请内存的大小小于第一阈值,且应用所申请内存的次数大于或者等于第二阈值,即需要进行抓栈,此时电子设备还可以将应用所申请内存的次数重置为0,以重新累计应用所申请内存的次数。
结合第一方面,在第一方面的有些实现方式中,在检测到应用发生内存泄漏的情况下,上述方法还包括:配置抓栈参数,以及根据抓栈参数开启抓栈功能。
通常情况下,电子设备是在发生内存泄漏的情况下才进行抓栈,以通过栈信息分析内存问题,因此,在检测到应用发生内存泄漏的情况下,电子设备可以开启抓栈功能(即打开抓栈开关)。本申请中,电子设备在开启抓栈功能时可以配置抓栈参数,以供后续根据该抓栈参数来确定是否进行抓栈。
结合第一方面,在第一方面的有些实现方式中,上述若需要进行抓栈,则申请持锁并抓栈,以及完成内存申请,包括:若需要进行抓栈,则申请获取锁;在获取锁成功的情况下,则进行持锁抓栈,以及完成内存申请;在未获取锁成功的情况下,则完成内存申请。
该实现方式中,在需要进行抓栈的情况下,电子设备可以尝试获取锁,如果当前锁空闲,则可以获取成功,即可进行持锁抓栈过程,以完成内存申请;如果当前锁被占用,则没有尝试成功,此时不再等待锁,即完成内存申请,以进一步减少等待锁的状态。
结合第一方面,在第一方面的有些实现方式中,上述根据配置的抓栈参数确定是否需要进行抓栈,包括:若抓栈参数为初始值,则申请持锁并抓栈;若抓栈参数不为初始值,则根据抓栈参数确定是否需要进行抓栈。
其中,在抓栈参数包括第一阈值和第二阈值的情况下,该初始值可以为第一阈值和第二阈值的初始值,示例性地,第一阈值和第二阈值的初始值均可以为0,也即相当于没有对抓栈参数进行配置。那么,若电子设备没有对抓栈参数进行配置,则直接申请持锁抓栈;若电子设备已对抓栈参数进行配置,即第一阈值和第二阈值不为初始值,则可以根据抓栈参数确定是否需要进行抓栈。由此,电子设备可以减少申请持锁的次数,进而减少进入等待锁的状态的概率,相应的减少了抓栈过程中的应用卡顿现象。
第二方面,本申请提供一种装置,该装置包含在电子设备中,该装置具有实现上述第一方面及上述第一方面的可能实现方式中电子设备行为的功能。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块或单元。例如,接收模块或单元、处理模块或单元等。
第三方面,本申请提供一种电子设备,电子设备包括:处理器、存储器和接口;处理器、存储器和接口相互配合,使得电子设备执行第一方面的技术方案中任意一种方法。
第四方面,本申请提供一种芯片,包括处理器。处理器用于读取并执行存储器中存储的计算机程序,以执行第一方面及其任意可能的实现方式中的方法。
可选地,芯片还包括存储器,存储器与处理器通过电路或电线连接。
进一步可选地,芯片还包括通信接口。
第五方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储了计算机程序,当计算机程序被处理器执行时,使得该处理器执行第一方面的技术方案中任意一种方法。
第六方面,本申请提供一种计算机程序产品,计算机程序产品包括:计算机程序代码,当计算机程序代码在电子设备上运行时,使得该电子设备执行第一方面的技术方案中任意一种方法。
附图说明
图1是相关技术提供的一例内存申请过程的示意图;
图2是本申请实施例提供的一例电子设备的结构示意图;
图3是本申请实施例提供的一例电子设备的软件结构框图;
图4是本申请实施例提供的另一例电子设备的软件结构框图;
图5是本申请实施例提供的一例内存申请方法的流程示意图;
图6是本申请实施例提供的一例打开抓栈开关过程的流程示意图;
图7是本申请实施例提供的另一例内存申请方法的流程示意图;
图8是本申请实施例提供的一例打开抓栈开关过程的信令交互示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
以下,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”、“第三”的特征可以明示或者隐含地包括一个或者更多个该特征。
在电子设备的运行过程中,内存对于系统资源来说非常重要,内存问题可能导致系统延迟增大、系统内存泄漏等多种严重问题。电子设备中的应用在运行时,需要进行内存申请以保证应用的正常运行,当电子设备检测到应用(或应用进程)发生内存泄漏(如Java内存泄漏)时,会通过虚拟机打开抓栈开关,通过抓栈来解析申请内存的应用的信息(或线程信息),进而再完成内存申请过程。
其中,内存泄漏是指对象已经没有被应用程序使用,但是垃圾回收器(garbagecollection,GC)没办法移除它们,因为还在被引用着。在Java中内存泄漏就是存在一些被分配的对象,这些对象有以下两个特点:首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即应用程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏。
相关技术中,在电子设备检测到应用发生内存泄漏之后的内存申请过程可以如图1所示,首先参见图1中的(a)图,电子设备进行内存泄漏检测,当检测到应用进程发生内存泄漏,下发抓栈开关命令到虚拟机,虚拟机打开抓栈开关。然后,再参见图1中的(b)图,应用进程(或主线程)申请内存时,判断抓栈开关是否打开。如果抓栈开关未打开,则完成内存申请;如果抓栈开关已打开,则申请持锁,在申请持锁成功的情况下,应用进程进行抓栈,完成内存申请;在申请持锁失败的情况下,进入等待锁的状态。
基于图1所示的过程可以得知,在申请持锁的过程中,可能会出现持锁失败的情况,其中,导致持锁失败的原因通常有:一些应用在显示页面的过程中,主线程会频繁的进行内存申请以绘制页面,那么就需要频繁的申请持锁,同时还会存在一些子线程也进行内存申请,也去申请持锁,因此,主线程和子线程就会产生锁竞争,必然会有一方持锁失败。示例性地的,根据数据统计,在一些应用运行中,主线程在212ms中产生了16318次锁竞争,同一时刻各子线程也有超过30000次的锁竞争,竞争次数较多。
或者,一些子线程正在做垃圾回收,占用了锁,那么主线程便要等待锁,也即持锁失败。在申请持锁失败的情况下,应用进程会进入等待锁的状态,也相应的无法申请内存,即无法进行当前的线程任务,导致出现应用卡顿现象。例如,若子线程在做垃圾回收,则主线程需要进入等待锁状态,即无法完成绘制页面的过程,导致应用卡顿。
针对相关技术中存在的问题,本申请实施例对其进行TOP内存分析发现,大空间的内存申请(例如超过10KB)在TOP内存比例中的占比约70%,但是申请量却不到1/10000,申请频率低于10次/s,大于2KB的内存申请也只有5/10000左右,申请频率约30次/s;小空间的内存申请在TOP内存比例中的占比约30%,但申请量却达到数千到数十万次。
有鉴于此,本申请实施例考虑对超过N(例如10KB)的内存申请全部抓取(是由于内存申请次数较少对性能影响较小),对于低于N的内存申请使用Y采样率进行抓取,提供一种内存申请方法,通过配置适当的抓栈参数,使电子设备根据抓栈参数进行抓栈,以优化抓栈方案,减少申请持锁的次数,进而减少进入等待锁的状态的概率,相应的减少了抓栈过程中的应用卡顿现象。需要说明的是,本申请实施例提供的内存申请方法可以应用于手机、平板电脑、可穿戴设备、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtualreality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)等可以执行抓栈机制的电子设备上,本申请实施例对电子设备的具体类型不作任何限制。
示例性的,图2是本申请实施例提供的一例电子设备100的结构示意图。电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universalserial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。图2中的天线1和天线2的结构仅为一种示例。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(codedivision multiple access,CDMA),宽带码分多址(wideband code division multipleaccess,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。GNSS可以包括全球卫星定位系统(global positioning system,GPS),全球导航卫星系统(global navigation satellite system,GLONASS),北斗卫星导航系统(beidounavigation satellite system,BDS),准天顶卫星系统(quasi-zenith satellitesystem,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的Android系统为例,示例性说明电子设备100的软件结构。
图3是本申请实施例的电子设备100的软件结构框图。分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库(native),以及内核层(kernel)。应用程序层可以包括一系列应用程序包。
如图3所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。
如图3所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
Android runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(media libraries),三维图形处理库(例如:OpenGL ES),2D图形引擎(例如:SGL)等。
表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。2D图形引擎是2D绘图的绘图引擎。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。
基于上述图3的软件结构,再结合本申请实施例的实现过程,可以将上述软件结构中的部分结构进行划分,图4是本申请实施例的电子设备100的另一软件结构框图。
如图4所示,系统库(native)中除了包括Android runtime的虚拟机之外,还可以包括检测服务(hiview)和内存管理服务(libmemleak_tracker)。检测服务(hiview)可以包括内存泄漏检测模块、配置参数解析模块和底层接口通信模块。虚拟机内可以包括参数设置模块(allocation_dumpper)。
hiview是一个跨平台的终端设备维测服务集,其可以由框架和插件组成,分别为:操作系统适配层(adapter),用于对使用的系统服务的接口进行适配;hiview基础定义(hiview base),包括插件的定义、检测器的定义以及工具类;hiview的核心模块(hiviewcore),包括插件配置、插件管理以及事件源;hiview服务(hiview services),包括hiview运行信息导出功能;hiview插件(plugins),其是独立功能的业务模块。
内核层(kernel)可以包括维测命令接口模块、堆栈保存模块、内存信息查询模块、堆栈抓取模块和堆栈读取模块。
其中,配置参数解析模块可以用于对配置文件中的抓栈参数进行解析。内存泄漏检测模块可以用于检测是否发生内存泄漏,在发生内存泄漏的情况下,通过底层接口通信模块将抓栈参数下发到内核层的维测命令接口模块。内核层接收到抓栈参数后,通过堆栈抓取模块的跳转信号将抓栈参数通知到内存管理服务。然后由内存管理服务将抓栈参数传递给虚拟机内的参数设置模块,该参数设置模块接收并设置抓栈参数。
在应用层的应用程序进行内存申请时,可以调用虚拟机,根据虚拟机内设置的抓栈参数进行抓栈处理以及申请内存。抓栈所得到的栈信息可以存储于堆栈保存模块,以及在需要时通过堆栈读取模块从堆栈保存模块中读取栈信息。
为了便于理解,本申请以下实施例将以具有图2至图4所示结构的电子设备为例,结合附图和应用场景,对本申请实施例提供的内存申请方法进行具体阐述。
图5是本申请实施例提供的一例内存申请方法的流程示意图,该方法可以由电子设备执行,具体可以包括S101-S104的步骤:
S101,在检测到应用申请内存的请求的情况下,确定是否已打开抓栈开关;若已打开,则执行S102,若未打开,则执行S105。
其中,电子设备中的应用在显示页面的过程中,主线程会频繁的进行内存申请以绘制页面。若电子设备检测到应用申请内存的请求,则可以向应用分配内存以及调用抓栈方法;在调用抓栈方法的过程中,可以判断当前是否已打开抓栈开关,以确定是否需要执行抓栈过程。可以理解,电子设备可以先向应用分配内存再执行抓栈过程,也可以同时执行向应用分配内存及抓栈过程,或者先抓栈再向应用分配内存,本申请实施例对此先后顺序不做限制。
可选地,是否已打开抓栈开关可以通过开关标识的值来进行判断,例如,电子设备可以预先设置一个开关标识,该开关标识可以取值0或1,当开关标识为0时,表示未打开抓栈开关,当开关标识为1时,表示已打开抓栈开关。
在一个可实现的方式中,电子设备可以在检测到内存泄漏的情况下触发打开抓栈开关。在本申请实施例中,为优化抓栈方案以减少抓栈过程中的应用卡顿现象,在打开抓栈开关之前,电子设备可以先配置抓栈参数,以使后续根据该抓栈参数进行抓栈。示例性地,本申请实施例中打开抓栈开关的过程可以参见图6,如图6所示,该过程可以包括S201-S204的步骤:
S201,电子设备检测到应用发生内存泄漏。
其中,电子设备可以采用检测工具来进行内存泄漏检测,检测工具可以是例如JProfiler、YourKit、Java VisualVM和Netbeans Profiler等工具,本申请实施例对电子设备进行内存泄漏检测的方法不做具体限制。
S202,配置抓栈参数,并增加至抓栈开关命令中。
可选地,抓栈参数可以包括但不限于采样内存阈值(javaSampleFullThreshold)和采样频率阈值(javaSampleRate),采样内存阈值用于对应用所申请的内存大小进行判断,采样频率阈值用于对应用申请内存的频率进行判断,具体判断过程详见后续描述。可选地,抓栈参数可以被配置至配置文件中,例如被配置至memory_leak_config.json文件中,该抓栈参数可以是基于已抓取的大量抓栈结果来设定的,也可以是根据实际需求进行设定的,以及在实际应用中可以根据需求调整抓栈参数的取值。
抓栈开关命令用于指示虚拟机打开抓栈开关,电子设备可以将配置的抓栈参数增加至该命令中,以使虚拟机根据该抓栈参数进行配置。
S203,将抓栈开关命令下发至虚拟机。
S204,虚拟机打开抓栈开关。
其中,因抓栈开关命令中携带有上述抓栈参数,因此虚拟机可以将抓栈参数设置后打开抓栈开关。示例性地,虚拟机可以将抓栈参数设置到全局变量中,后续在进行抓栈时可以直接获取该全局变量,以根据抓栈参数进行抓栈。可选地,虚拟机打开抓栈开关后可以将上述开关标识的值设置为1。
可以理解,在检测到应用发生内存泄漏的情况下打开抓栈开关,可以在后续抓取到相应的栈信息,以分析存在的内存问题。
S102,根据配置的抓栈参数确定是否需要抓栈;若需要抓栈,则执行S103,若不需要抓栈,则执行S105。
有上述描述可知,配置的抓栈参数可以包括采样内存阈值和采样频率阈值,因此电子设备可以根据该两个阈值确定是否需要抓栈。
在一些可实现的方式中,电子设备可以根据应用所申请内存的大小与采样内存阈值之间的大小关系,和/或,应用所申请内存的次数与采样频率阈值之间的大小关系,确定是否需要抓栈。
示例性地,在电子设备根据采样内存阈值确定是否需要抓栈的情况下,若应用所申请内存的大小大于或者等于采样内存阈值,则确定需要抓栈;若应用所申请内存的大小小于采样内存阈值,则确定不需要抓栈。例如,采样内存阈值可以为10KB,即应用所申请内存的大小大于或者等于10KB时需要抓栈,应用所申请内存的大小小于10KB时不需要抓栈。
再示例性地,在电子设备根据采样频率阈值确定是否需要抓栈的情况下,若应用所申请内存的次数大于或者等于采样频率阈值,则确定需要抓栈;若应用所申请内存的次数小于采样频率阈值,则确定不需要抓栈。例如,采样频率阈值可以为1000次,即应用所申请内存的次数大于或者等于1000次时需要抓栈,应用所申请内存的次数小于1000次时不需要抓栈。
又示例性地,在电子设备根据采样内存阈值和采样频率阈值确定是否需要抓栈的情况下,若应用所申请内存的大小大于或者等于采样内存阈值,则确定需要抓栈;若应用所申请内存的大小小于采样内存阈值且应用所申请内存的次数大于或者等于采样频率阈值,则确定需要抓栈;若应用所申请内存的大小小于采样内存阈值且应用所申请内存的次数小于采样频率阈值,则确定不需要抓栈。例如,采样内存阈值可以为10KB,采样频率阈值可以为1000次,若应用所申请内存的大小大于或者等于10KB,则不再判断其申请内存的次数,直接确定需要抓栈;若应用所申请内存的大小小于10KB,则需要再根据其申请内存的次数进行判断,应用所申请内存的次数大于或者等于1000次时需要抓栈,应用所申请内存的次数小于1000次时不需要抓栈。
可以理解,因电子设备中安装有多个应用,则每个应用可以对应有一个申请内存的次数的记录,初始时应用对应的申请内存的次数为0,当申请一次内存时即可对申请内存的次数进行加1。
S103,确定是否申请持锁成功,若是执行S104,若否执行S106。
S104,进行抓栈,并执行S105。
其中,在电子设备需要抓栈时,需要获取相应锁才能执行抓栈过程。这里需要持锁原因是:某个线程要更改共享数据时,通常需要先将其锁定,此时资源的状态为“锁定”,其他线程不能改变,直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。
可选地,这里的锁可以为AllocTracker锁,由于在抓栈时需要将抓取到的栈信息放入一个存储空间内,例如放入一个Map内,因此需要持有相应的锁(也即相应的读写权限)才能将栈信息放入该Map中。
电子设备在申请持锁时,可能会申请成功也可能会申请失败,若申请持锁成功,则可以进行抓栈;若申请持锁失败(如锁已被其他应用或线程占用),则应用申请内存的线程会进入等待锁的状态。在本申请实施例中,因抓栈过程是根据配置的抓栈参数来执行的,可以过滤一些不必要的抓栈,因此也减少了申请持锁的次数,进而减少了应用进入等待锁的状态的概率。
可选地,在抓栈时可以在虚拟机的heap中调用RecordAllocation方法进行抓栈。
S105,完成内存申请。
通过上述的流程跳转可知,在抓栈开关未打开、或者不需要抓栈、或者抓栈完成的情况下,电子设备完成内存申请,即已向应用分配完成内存,也已在需要抓栈时完成了抓栈过程。本申请实施例中分配内存的方式可以参见任意一种相关技术,例如静态分配策略、栈式分配策略和堆式分配策略等,在此不再赘述。
S106,进入等待锁的状态。
上述内存申请方法,电子设备在发生内存泄漏的情况下,通过配置抓栈参数,根据抓栈参数进行抓栈过滤,可以减少申请持锁的次数,进而减少进入等待锁的状态的概率,相应的减少了抓栈过程中的应用卡顿现象。
图7是本申请实施例提供的另一例内存申请方法的流程示意图,该方法可以由电子设备执行,具体可以包括S301-S309的步骤:
S301,在检测到应用申请内存的请求的情况下,确定是否已打开抓栈开关;若已打开,则执行S302,若未打开,则执行S309。
其中,S301的实现过程可以参见上述S101,其实现原理类似,在此不再赘述。
S302,确定抓栈参数是否为初始值,若是则执行S308,若否则执行S303。
其中,在抓栈参数包括采样内存阈值和采样频率阈值的情况下,该初始值可以为采样内存阈值和采样频率阈值的初始值,示例性地,采样内存阈值和采样频率阈值的初始值均可以为0,也即没有对抓栈参数进行配置。那么,若电子设备没有对抓栈参数进行配置,则直接申请持锁抓栈,即下述S308的步骤;若电子设备已对抓栈参数进行配置,则可以根据抓栈参数进行抓栈。
S303,确定应用所申请内存的大小是否小于采样内存阈值,且应用所申请内存的次数是否小于采样频率阈值,若是执行S304,若否执行S305。
S304,将应用所申请内存的次数加1,并执行S309。
其中,由上述描述可知,若应用所申请内存的大小小于采样内存阈值且应用所申请内存的次数小于采样频率阈值,则确定不需要抓栈,此时可以将应用所申请内存的次数加1(即S304的步骤),以更新应用所申请内存的次数供下次判断。可以理解,一个应用所申请内存的次数初始值为0,申请内存一次则将次数加1次。
若应用所申请内存的大小大于或者等于采样内存阈值,或者,应用所申请内存的大小小于采样内存阈值且应用所申请内存的次数大于或者等于采样频率阈值,则确定需要抓栈,执行下述S305的判断步骤。
S305,确定应用所申请内存的次数是否大于或者等于采样频率阈值,若是执行S306,若否执行S307。
S306,重置应用所申请内存的次数为0。
因在应用所申请内存的大小大于或者等于采样内存阈值的情况下不需要再判断其所申请内存的次数,则S305中应用所申请内存的次数大于或者等于采样频率阈值的情况,即是应用所申请内存的大小小于采样内存阈值且应用所申请内存的次数大于或者等于采样频率阈值的情况,此情况下需要抓栈。但在抓栈前需要将应用所申请内存的次数重置为0,以重新累计应用所申请内存的次数。
S307,确定是否尝试获取锁成功,若是执行S308,若否执行S309。
S308,执行持锁抓栈,并执行S309。
S309,完成内存申请。
此步骤执行尝试获取锁,是在应用所申请内存的大小大于或者等于采样内存阈值(即S305中否的情况),以及,应用所申请内存的大小小于采样内存阈值且应用所申请内存的次数大于或者等于采样频率阈值(即S306重置应用所申请内存的次数为0之后)两种情况下都执行的。本申请实施例中电子设备会尝试获取锁,如果当前锁空闲,则可以获取成功,即可进行S308中的持锁抓栈过程;如果当前锁被占用,则没有尝试成功,此时不再等待锁,即完成内存申请,以进一步减少等待锁的状态。
示例性地,假设所设置的采样内存阈值为10KB,采样频率阈值为1000次(即抓栈参数不为初始值),并且抓栈开关已打开。此时电子设备检测到一个应用第一次申请50KB的内存,即应用所申请内存的大小大于采样内存阈值(为S303中否的情况),需执行S305。经判断该应用所申请内存的次数小于采样频率阈值(因其是第一次申请内存),则为S305中否的情况,需执行S307尝试获取锁。若尝试获取锁成功,则进行持锁抓栈以及完成为该应用分配50KB内存的过程。
再示例性地,假设所设置的采样内存阈值为10KB,采样频率阈值为1000次(即抓栈参数不为初始值),并且抓栈开关已打开。此时电子设备检测到一个应用第一次申请5KB的内存,即应用所申请内存的大小小于采样内存阈值且应用所申请内存的次数小于采样频率阈值(为S303中是的情况),需执行S304将应用所申请内存的次数加1(初始次数为0,此时加1为1次),再执行S309中完成为该应用分配5KB内存的过程。也即在此实施例中电子设备没有执行获取锁的过程,减少了竞争锁的概率。
又示例性地,假设所设置的采样内存阈值为10KB,采样频率阈值为1000次(即抓栈参数不为初始值),并且抓栈开关已打开。此时电子设备检测到一个应用第1000次申请5KB的内存,即应用所申请内存的大小小于采样内存阈值,但应用所申请内存的次数不小于采样频率阈值(为S303中否的情况),需执行S305。经判断该应用所申请内存的次数等于采样频率阈值,则为S305中是的情况,需执行S306重置应用所申请内存的次数为0,然后再执行S307尝试获取锁,若尝试获取锁成功,则进行持锁抓栈以及完成为该应用分配5KB内存的过程。
上述内存申请方法,电子设备在发生内存泄漏的情况下,通过配置抓栈参数,根据抓栈参数进行抓栈过滤,并在需要抓栈时尝试获取锁,在尝试获取锁失败后不再抓栈,由此可以进一步减少进入等待锁的状态的概率,相应的减少了抓栈过程中的应用卡顿现象。
由上述实施例描述可知,抓栈过程都是需要在抓栈开关打开的情况下才执行的,上述图6所示的实施例为电子设备打开抓栈开关的过程,下面结合图4的软件结构框图再对该过程进行介绍。图8是本申请实施例中另一例打开抓栈开关的流程示意图,如图8所示,该过程可以包括S401-S408:
S401,内存泄漏检测模块检测到应用发生内存泄漏。
S402,内存泄漏检测模块配置抓栈参数,并增加至抓栈开关命令中。
其中,内存泄漏检测模块位于系统库的检测服务(hiview)中,内存泄漏检测模块可以通过检测进程检测到应用发生内存泄漏,并下发抓栈开关命令,该抓栈开关命令中携带抓栈参数,例如采样内存阈值和采样频率阈值等参数。
S403,内存泄漏检测模块通过底层接口通信模块将抓栈开关命令下发至维测命令接口模块。
其中,维测命令接口模块位于内核层,内存泄漏检测模块可以通过底层接口通信模块提供的接口(例如ioctl LOGGER_MEMCHECK_COMMAND),将抓栈开关命令下发至内核层的维测命令接口模块(例如hwmemcheck memcheck_do_command)。
S404,维测命令接口模块封装抓栈开关命令中的抓栈参数。
S405,维测命令接口模块将抓栈开关命令设置给堆栈抓取模块的跳转信号。
也即是说,维测命令接口可以对抓栈参数进行封装,以使后续的模块或应用进行识别。
S406,堆栈抓取模块通过跳转信号将抓栈开关命令通知到应用进程。
其中,该应用进程为发生内存泄漏的应用对应的进程,堆栈抓取模块可以通过跳转信号(例如SIGNO_MEMCHECK信号)将抓栈开关命令通知到该应用进程。
S407,应用进程解析抓栈开关命令中的抓栈参数,并通过内存管理服务将抓栈开关命令下发至虚拟机。
该步骤中,应用进程通过解析抓栈参数,可以修改原注册的抓栈开关中的属性(例如FUN_JAVA_ENABLE),使其增加上述配置的抓栈参数,并通过内存管理服务(libmemleak_tracker.so)将抓栈开关命令下发至虚拟机。
S408,虚拟机设置抓栈参数,打开抓栈开关。
其中,虚拟机接收到上层下发的抓栈开关命令后,可以将抓栈开关命令中携带的抓栈采样参数设置到全局变量中,打开(Java)抓栈开关。可选地,该步骤可以由虚拟机内的参数设置模块进行处理。例如,libmemleak_tracker收到信号后,调用FUN_JAVA_ENABLE到虚拟机对应的函数,将参数设置给虚拟机中的参数设置模块(allocation_dumpper)。
可以理解,在抓栈结束后,内存泄漏检测模块可以通过清理抓栈命令下发到虚拟机(下发过程同抓栈开关命令,但此时无需携带抓栈参数),以使虚拟机关闭抓栈开关,同时将抓栈参数初始化。例如设置采样内存阈值和采样频率阈值为0。
上述内存申请方法,在应用发生内存泄漏的情况下,电子设备可以通过打开抓栈开关,使得后续应用申请内存时进行抓栈,以分析内存问题。以及,在抓栈时配置抓栈参数,根据抓栈参数进行抓栈过滤,可以减少进入等待锁的状态的概率,相应的减少了抓栈过程中的应用卡顿现象。
上文详细介绍了本申请实施例提供的内存申请方法的示例。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对电子设备进行功能模块的划分,例如,可以对应各个功能划分为各个功能模块,例如检测单元、处理单元、显示单元等,也可以将两个或两个以上的功能集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本实施例提供的电子设备,用于执行上述内存申请方法,因此可以达到与上述实现方法相同的效果。
在采用集成的单元的情况下,电子设备还可以包括处理模块、存储模块和通信模块。其中,处理模块可以用于对电子设备的动作进行控制管理。存储模块可以用于支持电子设备执行存储程序代码和数据等。通信模块,可以用于支持电子设备与其他设备的通信。
其中,处理模块可以是处理器或控制器。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理(digital signal processing,DSP)和微处理器的组合等等。存储模块可以是存储器。通信模块具体可以为射频电路、蓝牙芯片、Wi-Fi芯片等与其他电子设备交互的设备。
在一个实施例中,当处理模块为处理器,存储模块为存储器时,本实施例所涉及的电子设备可以为具有图2所示结构的设备。
本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质中存储了计算机程序,当计算机程序被处理器执行时,使得处理器执行上述任一实施例的内存申请方法。
本申请实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的内存申请方法。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的内存申请方法。
其中,本实施例提供的电子设备、计算机可读存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (11)
1.一种内存申请方法,其特征在于,所述方法由电子设备执行,包括:
在检测到应用申请内存的请求的情况下,若已开启抓栈功能,则根据配置的抓栈参数确定是否需要进行抓栈;
若需要进行抓栈,则申请持锁并抓栈,以及完成内存申请;
若不需要进行抓栈,则完成内存申请。
2.根据权利要求1所述的方法,其特征在于,所述抓栈参数包括第一阈值和/或第二阈值,所述根据配置的抓栈参数确定是否需要进行抓栈,包括:
根据所述应用所申请内存的大小与所述第一阈值之间的大小关系,和/或,所述应用所申请内存的次数与所述第二阈值之间的大小关系,确定是否需要进行抓栈。
3.根据权利要求2所述的方法,其特征在于,所述根据所述应用所申请内存的大小与所述第一阈值之间的大小关系,和/或,所述应用所申请内存的次数与所述第二阈值之间的大小关系,确定是否需要进行抓栈,包括:
若所述应用所申请内存的大小大于或者等于所述第一阈值,则确定需要进行抓栈;
若所述应用所申请内存的大小小于所述第一阈值,则确定不需要进行抓栈。
4.根据权利要求2所述的方法,其特征在于,所述根据所述应用所申请内存的大小与所述第一阈值之间的大小关系,和/或,所述应用所申请内存的次数与所述第二阈值之间的大小关系,确定是否需要进行抓栈,包括:
若所述应用所申请内存的次数大于或者等于所述第二阈值,则确定需要进行抓栈;
若所述应用所申请内存的次数小于所述第二阈值,则确定不需要进行抓栈。
5.根据权利要求2所述的方法,其特征在于,所述根据所述应用所申请内存的大小与所述第一阈值之间的大小关系,和/或,所述应用所申请内存的次数与所述第二阈值之间的大小关系,确定是否需要进行抓栈,包括:
在所述应用所申请内存的大小大于或者等于所述第一阈值的情况下,确定需要进行抓栈;
在所述应用所申请内存的大小小于所述第一阈值的情况下,若所述应用所申请内存的次数大于或者等于所述第二阈值,则确定需要进行抓栈,若所述应用所申请内存的次数小于所述第二阈值,则确定不需要进行抓栈。
6.根据权利要求5所述的方法,其特征在于,在所述应用所申请内存的大小小于所述第一阈值,且所述应用所申请内存的次数大于或者等于所述第二阈值的情况下,所述方法还包括:
重置所述应用所申请内存的次数为0次。
7.根据权利要求1至6中任一项所述的方法,其特征在于,在检测到应用发生内存泄漏的情况下,所述方法还包括:
配置抓栈参数,以及根据所述抓栈参数开启抓栈功能。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述若需要进行抓栈,则申请持锁并抓栈,以及完成内存申请,包括:
若需要进行抓栈,则申请获取锁;
在获取锁成功的情况下,则进行持锁抓栈,以及完成内存申请;
在未获取锁成功的情况下,则完成内存申请。
9.根据权利要求1至8中任一项所述的方法,其特征在于,所述根据配置的抓栈参数确定是否需要进行抓栈,包括:
若所述抓栈参数为初始值,则申请持锁并抓栈;
若所述抓栈参数不为初始值,则根据所述抓栈参数确定是否需要进行抓栈。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
一个或多个存储器;
所述存储器存储有一个或多个程序,当所述一个或多个程序被所述处理器执行时,使得所述电子设备执行如权利要求1至9中任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储了计算机程序,当所述计算机程序被处理器执行时,使得所述处理器执行权利要求1至9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211708812.2A CN116661987B (zh) | 2022-12-29 | 2022-12-29 | 内存申请方法和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211708812.2A CN116661987B (zh) | 2022-12-29 | 2022-12-29 | 内存申请方法和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116661987A true CN116661987A (zh) | 2023-08-29 |
CN116661987B CN116661987B (zh) | 2024-08-09 |
Family
ID=87724824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211708812.2A Active CN116661987B (zh) | 2022-12-29 | 2022-12-29 | 内存申请方法和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116661987B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010063110A (ja) * | 2002-06-06 | 2010-03-18 | Nvidia Corp | Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ |
US20100174762A1 (en) * | 2009-01-07 | 2010-07-08 | International Business Machines Corporation | Apparatus, System, and Method for Maintaining A Context Stack |
US20110029959A1 (en) * | 2009-07-29 | 2011-02-03 | Teradata Us, Inc. | Techniques for discovering database connectivity leaks |
US20170083426A1 (en) * | 2013-06-07 | 2017-03-23 | Apple Inc. | Memory management tools |
CN107168848A (zh) * | 2017-04-28 | 2017-09-15 | 福建星瑞格软件有限公司 | 一种多线程分析与运行可视化方法 |
CN112445686A (zh) * | 2019-08-27 | 2021-03-05 | Oppo(重庆)智能科技有限公司 | 内存泄漏检测方法、装置以及计算机可读存储介质 |
US11080125B1 (en) * | 2020-03-19 | 2021-08-03 | Oracle International Corporation | Identifying and clustering call stacks across multiple memory dumps with out-of-memory errors |
CN114253825A (zh) * | 2020-09-22 | 2022-03-29 | 腾讯科技(深圳)有限公司 | 内存泄漏检测方法、装置、计算机设备和存储介质 |
CN114546795A (zh) * | 2021-12-27 | 2022-05-27 | 浙江大华技术股份有限公司 | 内存泄露检测方法、电子设备和计算机可读存储介质 |
CN114637651A (zh) * | 2022-03-15 | 2022-06-17 | 平安科技(深圳)有限公司 | 内存帧率检测方法、装置、计算机设备及存储介质 |
WO2022134691A1 (zh) * | 2020-12-23 | 2022-06-30 | 荣耀终端有限公司 | 一种终端设备中啸叫处理方法及装置、终端 |
-
2022
- 2022-12-29 CN CN202211708812.2A patent/CN116661987B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010063110A (ja) * | 2002-06-06 | 2010-03-18 | Nvidia Corp | Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ |
US20100174762A1 (en) * | 2009-01-07 | 2010-07-08 | International Business Machines Corporation | Apparatus, System, and Method for Maintaining A Context Stack |
US20110029959A1 (en) * | 2009-07-29 | 2011-02-03 | Teradata Us, Inc. | Techniques for discovering database connectivity leaks |
US20170083426A1 (en) * | 2013-06-07 | 2017-03-23 | Apple Inc. | Memory management tools |
CN107168848A (zh) * | 2017-04-28 | 2017-09-15 | 福建星瑞格软件有限公司 | 一种多线程分析与运行可视化方法 |
CN112445686A (zh) * | 2019-08-27 | 2021-03-05 | Oppo(重庆)智能科技有限公司 | 内存泄漏检测方法、装置以及计算机可读存储介质 |
US11080125B1 (en) * | 2020-03-19 | 2021-08-03 | Oracle International Corporation | Identifying and clustering call stacks across multiple memory dumps with out-of-memory errors |
CN114253825A (zh) * | 2020-09-22 | 2022-03-29 | 腾讯科技(深圳)有限公司 | 内存泄漏检测方法、装置、计算机设备和存储介质 |
WO2022134691A1 (zh) * | 2020-12-23 | 2022-06-30 | 荣耀终端有限公司 | 一种终端设备中啸叫处理方法及装置、终端 |
CN114546795A (zh) * | 2021-12-27 | 2022-05-27 | 浙江大华技术股份有限公司 | 内存泄露检测方法、电子设备和计算机可读存储介质 |
CN114637651A (zh) * | 2022-03-15 | 2022-06-17 | 平安科技(深圳)有限公司 | 内存帧率检测方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116661987B (zh) | 2024-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4002108B1 (en) | Application start method and electronic device | |
CN113434288B (zh) | 内存管理的方法及电子设备 | |
CN114968384B (zh) | 一种功能调用方法和装置 | |
CN116315667B (zh) | 数据传输方法、装置、设备及存储介质 | |
WO2020062192A1 (zh) | 一种操作控制方法及电子设备 | |
CN116661987B (zh) | 内存申请方法和电子设备 | |
CN115278642B (zh) | 获取sim卡的信息的方法、电子设备及终端设备 | |
CN116700813B (zh) | 微件的加载方法、电子设备及可读存储介质 | |
CN115828227B (zh) | 识别广告弹窗的方法、电子设备及存储介质 | |
CN117707453B (zh) | 一种节点信息的读取方法、设备及存储介质 | |
CN116088955B (zh) | 进程处理方法和终端设备 | |
CN116662150B (zh) | 应用启动耗时检测方法及相关装置 | |
CN117130767B (zh) | 回收内存的方法、电子设备及存储介质 | |
CN116627855B (zh) | 内存处理方法及相关装置 | |
CN116048710B (zh) | 应用标识的显示方法、电子设备及可读存储介质 | |
CN117786706A (zh) | 访问控制方法及电子设备 | |
CN118503993A (zh) | 权限管理方法、相关装置及系统 | |
CN118277120A (zh) | 一种管理系统服务的方法及相关装置 | |
CN117407925A (zh) | 扩展内存隔离域的方法和电子设备 | |
CN118445137A (zh) | 一种定位泄露的文件描述符的方法、装置及电子设备 | |
CN118363739A (zh) | 一种系统资源调度方法、电子设备及计算机可读存储介质 | |
CN117241234A (zh) | 一种卫星短报文通信计费校准方法和设备 | |
CN117708801A (zh) | 一种资源访问方法及电子设备 | |
CN118116002A (zh) | 模型训练方法及电子设备 | |
CN116933219A (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 |