垃圾回收的方法及电子设备与流程

文档序号:31342339发布日期:2022-08-31 10:43阅读:78来源:国知局
垃圾回收的方法及电子设备与流程

1.本技术涉及操作系统领域,尤其涉及垃圾回收的方法及电子设备。


背景技术:

2.电子设备上可安装使用例如java语言编写的各种各样的应用程序(application,app) 或服务(service)。因为java语言的跨平台性以及开放性,为了在多种平台上实现兼容,电子设备在运行使用java语言编写的app时,需要创建java虚拟机(virtual machine,jvm),jvm中存在有java的垃圾回收(garbage collection,gc)线程。当app或服务使用的堆内存不足时,jvm将启动gc线程执行gc。在gc线程的执行过程中,gc线程会扫描jvm分配的堆区数据以判断堆区数据是否被引用。其中,大量的扫描工作会占用大量的cpu资源。
3.此外,当电子设备处于低内存场景时,内核还会按照最近最少使用(least recentlyused,lru)将堆区数据进行压缩。那么,针对压缩后的堆区数据,gc线程需要先对压缩后的堆区数据进解压,才能判断解压后的堆区数据是否被引用。gc线程解压时还需要向系统申请额外的内存用于存放解压过程中的数据。可以理解的是,此时系统的内存本就很紧张,解压时申请内存的行为进一步加剧了系统内存的紧张程度。并且,gc线程的解压行为也延长了内存回收的整体耗时,加大了cpu资源的开销。可见,现有的gc过程会影响系统运行的流畅性和稳定性,容易造成系统崩溃。


技术实现要素:

4.本技术提供的垃圾回收的方法及电子设备,可以降低了电子设备在执行gc时整机占用的系统资源(包括内存资源和cpu资源),有利于保证系统的流畅性和稳定性。
5.为了实现上述目的,本技术实施例提供了以下技术方案:
6.第一方面、本技术一种垃圾回收gc的方法,该方法包括:电子设备运行应用app;当 app的进程请求分配第一内存时,电子设备检测进程预计占用的堆内存除以目标利用率的数值是否等于或大于第一阈值,其中,进程预计占用的堆内存包括进程已占用的堆内存和第一内存;当进程预计占用的堆内存除以目标利用率的数值等于或大于第一阈值时,电子设备检测进程对应的堆区数据压缩比是否等于或大于第二阈值;当进程对应的堆区数据压缩比等于或大于第二阈值,且电子设备当前的cpu负载大于第三阈值时,电子设备延迟进程执行垃圾回收。
7.可以理解的,考虑到电子设备处于低内存场景时,电子设备的内核会按照一定策略(例如lru)对堆区数据进行压缩。那么,当电子设备执行gc时,可能需要对压缩的堆区数据进行解压,解压的过程既要消耗系统的内存,加重系统内存的紧张,又要消耗系统的cpu资源。可见,如果在cpu高负载的场景(即电子设备当前的cpu负载大于第三阈值)下执行 gc,容易影响系统的流畅性和稳定性,甚至可能造成系统崩溃。为此,电子设备统计各个进程的堆区数据的压缩比,而后根据堆区数据的压缩比和cpu的负载情况,采用不同的延迟策略,延迟执行gc,由此提升系统的流畅性和稳定性,避免系统崩溃的问题。
gc。由此,本技术降低了电子设备在执行gc时整机占用的系统资源(包括内存资源和cpu 资源),有利于保证系统的流畅性和稳定性。
17.在一种可能的实现方式中,电子设备根据进程对应的堆区数据压缩比采用不同的策略,延迟执行全量级垃圾回收gc,包括:当进程对应的堆区数据压缩比位于第一区间时,电子设备避开cpu负载的高峰期执行全量级gc;当进程对应的堆区数据压缩比位于第二区间时,电子设备在cpu空闲时执行全量级gc;当进程对应的堆区数据压缩比位于第三区间时,电子设备冻结进程,并在接收到解冻进程的指令后,解冻进程并执行全量级gc。
18.在一种可能的实现方式中,在电子设备上调第一阈值后,该方法还包括:当进程预计占用的堆内存除以目标利用率的数值等于或大于上调后的第一阈值时,电子设备再次检测进程对应的堆区数据压缩比;电子设备根据进程对应的堆区数据压缩比采用不同的策略,延迟执行全量级垃圾回收gc。
19.在一种可能的实现方式中,电子设备根据进程对应的堆区数据压缩比采用不同的策略,延迟执行全量级垃圾回收gc,包括:当进程对应的堆区数据压缩比位于第一区间时,电子设备避开cpu负载的高峰期执行全量级gc;当进程对应的堆区数据压缩比位于第二区间时,电子设备在cpu空闲时执行全量级gc;当进程对应的堆区数据压缩比位于第三区间时,电子设备冻结进程,并在接收到解冻进程的指令后,解冻进程并执行全量级gc。
20.在一种可能的实现方式中,该方法还包括:在进程申请堆内存时,电子设备对进程申请的堆内存进行标记。
21.在一种可能的实现方式中,该方法还包括:在电子设备压缩进程的堆区数据时,电子设备记录压缩的堆区数据的数据量。
22.在一种可能的实现方式中,进程的堆区数据压缩比,为进程中压缩的堆区数据的数据量与本进程中全部堆区数据的数据量的比值。
23.第二方面、提供一种电子设备,包括:处理器、存储器和触摸屏,所述存储器、所述触摸屏与所述处理器耦合,所述存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,当所述处理器从所述存储器中读取所述计算机指令,以使得电子设备执行如上述方面及其中任一种可能的实现方式中所述的方法。
24.第三方面、提供一种装置,该装置包含在电子设备中,该装置具有实现上述方面及可能的实现方式中任一方法中电子设备行为的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括至少一个与上述功能相对应的模块或单元。例如,检测模块或单元、确定模块或单元、以及处理模块或单元等。
25.第四方面、提供一种计算机可读存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行如上述方面及其中任一种可能的实现方式中所述的方法。
26.第五方面、提供一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行如上述方面中及其中任一种可能的实现方式中所述的方法。
27.第六方面、提供一种芯片系统,包括处理器,当处理器执行指令时,处理器执行如上述方面中及其中任一种可能的实现方式中所述的方法。
28.上述第二方面提供的电子设备、第三方面提供的装置、第四方面提供的计算机可读存储介质、第五方面提供的计算机程序产品,以及第六方面提供的芯片系统所能达到的
技术效果,请参考上述第一方面以及第一方面中任一可能的实现方式中所描述的技术效果,这里不再赘述。
附图说明
29.图1为本技术实施例提供的一种电子设备的硬件结构示意图;
30.图2为本技术实施例提供的一种电子设备的软件结构示意图;
31.图3为本技术实施例提供的一种电子设备执行gc的流程示意图;
32.图4为本技术实施例提供的另一种电子设备执行gc的流程示意图;
33.图5为本技术实施例提供的一种芯片系统的结构示意图。
具体实施方式
34.在本技术实施例的描述中,除非另有说明,“/”表示或的意思,例如,a/b可以表示a或 b;本文中的“和/或”仅仅是一种描述关联对象的联动关系,表示可以存在三种关系,例如,a 和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。
35.以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本技术实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
36.在本技术实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本技术实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
37.本技术实施例提供一种垃圾回收gc的方法,可应用于安装有一个或多个app的电子设备。示例性的,本技术实施例中电子设备例如可以为手机、平板电脑、个人计算机(personalcomputer,pc)、个人数字助理(personal digital assistant,pda)、智能手表、上网本、可穿戴电子设备、增强现实技术(augmented reality,ar)设备、虚拟现实(virtual reality,vr) 设备、车载设备、智慧屏、智能汽车、智能音响、机器人等,本技术对该电子设备的具体形式不做特殊限制。
38.图1示出了电子设备100的结构示意图。
39.电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial 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 等。
40.可以理解的是,本发明实施例示意的结构并不构成对电子设备100的具体限定。在本技术另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部
件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
41.处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(applicationprocessor,ap),调制解调处理器,图形处理器(graphicsprocessingunit,gpu),图像信号处理器(imagesignalprocessor,isp),控制器,视频编解码器,数字信号处理器(digitalsignalprocessor,dsp),基带处理器,和/或神经网络处理器(neural-networkprocessingunit,npu)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
42.控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
43.处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
44.在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integratedcircuit,i2c)接口,集成电路内置音频(inter-integratedcircuitsound,i2s)接口,脉冲编码调制(pulsecodemodulation,pcm)接口,通用异步收发传输器(universalasynchronousreceiver/transmitter,uart)接口,移动产业处理器接口(mobileindustryprocessorinterface,mipi),通用输入输出(general-purposeinput/output,gpio)接口,用户标识模块(subscriberidentitymodule,sim)接口,和/或通用串行总线(universalserialbus,usb)接口等。可以理解的是,本发明实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本技术另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
45.充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过usb接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
46.电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
47.电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
48.天线1和天线2用于发射和接收电磁波信号。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1
复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
49.移动通信模块150可以提供应用在电子设备100上的包括2g/3g/4g/5g等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(lownoise amplifier,lna)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块 150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
50.调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170a,受话器170b等)输出声音信号,或通过显示屏194显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
51.无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wireless local areanetworks,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转为电磁波辐射出去。
52.电子设备100通过gpu,显示屏194,以及应用处理器等实现显示功能。gpu为图像处理的微处理器,连接显示屏194和应用处理器。gpu用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个gpu,其执行程序指令以生成或改变显示信息。
53.显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,lcd),有机发光二极管(organic light-emitting diode,oled),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode的, amoled),柔性发光二极管(flex light-emitting diode,fled),miniled,microled,micro-oled,量子点发光二极管(quantum dot light emitting diodes,qled)等。在一些实施例中,电子设备 100可以包括1个或n个显示屏194,n为大于1的正整数。
54.电子设备100可以通过isp,摄像头193,视频编解码器,gpu,显示屏194以及应用处理器等实现拍摄功能。
55.isp用于处理摄像头193反馈的数据。摄像头193用于捕获静态图像或视频。数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。视
频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving pictureexperts group,mpeg)1,mpeg2,mpeg3,mpeg4等。
56.外部存储器接口120可以用于连接外部存储卡,例如micro sd卡,实现扩展电子设备 100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
57.内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121 可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,ufs)等。处理器110通过运行存储在内部存储器121的指令,和/或存储在设置于处理器中的存储器的指令,执行电子设备100的各种功能应用以及数据处理。
58.电子设备100可以通过音频模块170,扬声器170a,受话器170b,麦克风170c,耳机接口170d,以及应用处理器等实现音频功能。例如音乐播放,录音等。
59.按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。
60.电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。例如,该电子设备100的软件系统可以是鸿蒙系统、android系统等。本发明实施例以分层架构的android系统为例,示例性说明电子设备100的软件结构。
61.图2是本发明实施例的电子设备100的软件结构框图。
62.分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将android系统分为五层,从上至下分别为应用程序层(简称应用层),应用程序框架层(简称框架层),安卓运行时(android runtime)和系统库,硬件抽象层 (hardware abstraction layer,hal)以及内核层。
63.(1)应用层
64.应用层可以包括一系列应用程序包。如图2所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,wlan,蓝牙,音乐,视频,短信息等应用程序。
65.(2)框架层
66.框架层为应用层的应用程序提供应用编程接口(application programming interface,api)和编程框架。框架层包括一些预先定义的函数。
67.如图2所示,框架层可以包括活动管理器,窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
68.其中,活动管理器,用于负责所有app进程的启动,app四大组件(如活动activity、服务service、广播接收者broadcast receiver、内容提供者content provider)的启动, app之间及app内部界面之间切换和各种组件的生命周期。窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。内容提供器
用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
69.(3)androidruntime和系统库
70.如图2所示,androidruntime包括核心库和虚拟机。androidruntime负责安卓系统的调度和管理。
71.核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
72.应用层和框架层运行在虚拟机中。虚拟机将应用层和框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
73.以电子设备100运行app1为例进行说明。当电子设备100运行app1时,通常会启动app1的一个或多个进程(如app1的界面对应的进程1,app1的后台服务对应的进程2),每个进程都将对应一个虚拟机,且每个进程中都包含一个gc线程。该gc线程负责监控本进程对应的虚拟机堆内存的使用情况,并根据本进程对应的虚拟机堆内存的使用情况确定是否启动gc过程。可以理解的是,在一些场景中,当用户将app1切换到后台运行时,电子设备仍然可能保持运行app1的一个或多个后台服务对应的进程,这些进程持续占用电子设备的内存,并且这些进程仍然可能继续申请新的堆内存等。
74.通常,app1启动进程时,会设置该进程的堆内存的使用上限(记为阈值1),即本进程能够使用的最大堆内存阈值。当内核为该进程分配的堆内存除以堆内存目标利用率后的数值大于或等于阈值1时,该进程将启动gc线程对该进程的堆内存进行回收。可以理解的是,当每次gc之后已经使用(或称为占用)的堆内存和本进程能够使用的最大堆内存(包括本进程已使用的堆内存和空闲的堆内存)有一个合适的比例(即堆内存目标利用率,通常为0.75,可简称为目标利用率),可以尽量地减少gc的次数。该堆内存目标利用率可以为默认值,也可以为操作系统为所有进程统一设置的,或者还可以为操作系统为不同的app或者不同的进程分别设置的,本技术实施例对此不做限定。
75.在一些技术方案中,gc线程执行的gc可以包括轻量级gc(如backgroundyounggc)和全量级gc(fullgc)。其中,在扫描堆区数据时,轻量级gc仅扫描上一次gc执行后到本次触发gc之前的时间段内,本进程申请的堆内存中的数据(后续简称为堆区数据)。全量级gc则是扫描本进程申请的全部堆区数据。如图3所示,为一种电子设备执行gc过程的示意图,具体包括:
76.301、接收到进程的内存分配请求。
77.302、判断本进程预计占用的堆内存除以目标利用率的数值(图3中用本进程“预计占用的堆内存/目标利用率”表示该数值)是否小于阈值1。如果等于或大于阈值1,则执行步骤303,如果小于阈值1,则执行步骤314。
78.进程每次申请分配内存时,均会触发对本进程占用的堆内存进行检查。需要说明的是,本步骤中本进程预计占用的堆内存包括本进程实际已占用的堆内存以及本进程本次申请的堆内存。换言之,此时判断本进程预计占用的堆内存除以目标利用率的数值是否小于阈值1,相当于判断如果为进程分配了本次申请的堆内存,本进程占用的堆内存和本进程能够使用的最大堆内存(包括本进程已占用的堆内存和空闲的堆内存)是否还能够维持不高于目标利用率的目标。如果高于目标利用率,则触发轻量级gc,即执行步骤 303。如果不高于目标利用率,则可以分配内存,即执行步骤314。
79.303、触发轻量级gc。
80.电子设备针对本进程在特定时间段内新申请的堆内存进行扫描,判断堆内存中的数据是否最近被引用过,然后电子设备可以采用例如lru的策略回收最近最少引用的堆内存。那么,本进程可用的空闲堆内存增多了。其中,特定时间段是指从电子设备上一次执行gc(包括轻量级gc和全量级gc)后到本次执行轻量级gc前的时间段。
81.可以理解的是,轻量级gc所扫描的堆区数据较少,cpu资源的开销较少。
82.304、尝试分配内存。
83.305、再次判断本进程预计占用的堆内存除以目标利用率的数值是否小于阈值1。如果等于或大于阈值1,则执行步骤306,如果小于阈值1,则执行步骤314。
84.306、上调阈值1。
85.可以理解的是,当执行轻量级gc后,本进程回收了一些堆内存。此时若仍不能完成本次内存分配请求,则上调阈值1。可以理解的是,上调阈值1意味着上调了本进程使用堆内存的上限,则接下来就有可能能够完成本次内存分配请求。
86.307、再次尝试分配内存。
87.308、再次判断本进程预计占用的堆内存除以目标利用率的数值是否小于阈值1。如果等于或大于阈值1,则执行步骤309,如果小于阈值1,则执行步骤314。
88.需要说明的是,在一些场景中,本进程中可能有多个任务并行,那么多个任务可能同时或先后申请分配堆内存。那么在本任务执行本次内存分配请求时,通过上调阈值1 的方法提高了本进程的堆内存的使用上限,即最大堆内存,但可能其他任务提前分配到所需的堆内存(即本进程已占用的堆内存增大),从而造成此时本进程预计占用的堆内存(本任务申请分配的内存和本进程已经占用的堆内存)除以目标利用率的数值仍然高于阈值1,仍然不能完成本任务的本次内存分配请求。
89.309、触发全量级gc。
90.310、下调阈值1。
91.需要说明的是,全量级gc扫描到堆区数据更多,通过能够释放更多的堆内存,使得空闲的堆内存增多,因此在执行全量级gc后电子设备可以适时地下调阈值1,保证堆内存的利用率。
92.311、再次尝试分配内存。
93.312、再次判断本进程预计占用的堆内存除以目标利用率的数值是否小于阈值1。如果等于或大于阈值1,则执行步骤313,如果小于阈值1,则执行步骤314。
94.313、触发内存溢出(out of memory,oom)机制。
95.在触发oom机制时电子设备清理所有申请堆内存的进程,本流程结束。
96.314、分配内存。
97.由此可见,在该技术方案中,电子设备可通过分步执行不同量级的gc,以及与上调阈值 1的方法相结合的方法来减少执行gc的次数,以及尽量减少执行gc占用的cpu资源。
98.系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(medialibraries),三维图形处理库(例如:opengl es),2d图形引擎(例如:sgl)等。
99.其中,表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2d和3d图层的融合。媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:mpeg4,h.264,mp3,aac,amr,jpg,png等。三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。2d图形引擎是 2d绘图的绘图引擎。
100.(4)hal
101.hal,用于将硬件抽象化。hal隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。也就是说,上层所需使需要的有关硬件的操作都需要调用hal相关的api,例如音视频接口、gps接口、通话接口、wi-fi 接口以及其他接口。
102.(5)内核层
103.内核层是硬件和软件之间的层。
104.内核层包括内存管理模块,进程/线程,音视频驱动、gps驱动、显示驱动、wi-fi驱动等。其中,内存管理模块,用于实现系统内存的分配与回收,压缩堆区数据等。
105.以下实施例中所涉及的技术方案均可以在具有上述硬件架构和软件架构的电子设备100 中实现。
106.考虑到电子设备处于低内存场景(即电子设备的可用内存低于阈值2)时,电子设备的内核会按照一定策略(例如lru)对堆区数据进行压缩。那么,当电子设备执行gc时,可能需要对压缩的堆区数据进行解压,解压的过程既要消耗系统的内存,加重系统内存的紧张,又要消耗系统的cpu资源。可见,如果在cpu高负载的场景下执行gc,容易影响系统的流畅性和稳定性,甚至可能造成系统崩溃。为此,本技术实施例提供的一种gc的方法,电子设备统计各个进程的堆区数据的压缩比,而后根据堆区数据的压缩比和cpu的负载情况,采用不同的延迟策略,延迟执行gc,由此提升系统的流畅性和稳定性,避免系统崩溃的问题。
107.如图4所示,为本技术实施例提供了一种gc的方法的流程示意图,该方法包括:
108.401、app的进程请求分配第一内存。
109.示例性的,app的进程中某个任务请求分配第一内存,请求分配的第一内存可以是该任务指定大小的内存,也可以是系统默认大小的内存,本技术实施例对此不做限定。
110.402、判断本进程预计占用的堆内存除以目标利用率的数值(图4中用本进程预计占用的堆内存/目标利用率表示该数值)是否小于阈值1。如果等于或大于阈值1,则执行步骤403,如果小于阈值1,则执行步骤417。
111.app的进程每次申请分配内存时,均会触发对本进程占用的堆内存进行检查。需要说明的是,本步骤中本进程预计占用的堆内存包括本进程实际已占用的堆内存以及本次申请的堆内存。即,本进程预计占用的堆内存的大小=本进程实际占用的堆内存的大小+ 第一内存的大小。换言之,此时判断本进程预计占用的堆内存除以目标利用率数值是否小于阈值1,相当于判断如果为进程分配了本次申请的第一内存,本进程占用的堆内存和本进程能够使用的最大堆内存(包括本进程已占用的堆内存和空闲的堆内存)的比例是否还能够维持理想的利用率(即目标利用率)。如果能够维持目标利用率,即不高于目标利用率,则可以分配内存,即执行步骤417。如果不能维持理想的利用率,即高于目标利用率,则需要进一步根据堆区数据压缩比和cpu的负载情况,采用不同的延迟gc的策略,即执行步骤403以及之后的步骤。
112.403、检测堆区数据压缩比是否等于或大于阈值3。如果堆区数据压缩比小于阈值3,则触发轻量级gc,即执行步骤407。如果堆区数据压缩比等于或大于阈值3,则进一步判断当前cpu的负载,即执行步骤404。
113.其中,堆区数据压缩比,是指本进程中压缩的堆区数据的大小与本进程中全部堆区数据(包括压缩的堆区数据和未压缩的堆区数据)的大小的比值。
114.需要说明的是,进程在申请分配虚拟机堆内存时,会通过调用内存分配器(例如mmap 分配器)将内核态内存映射为用户态内存,并标记为匿名页内存。其中,匿名页内存是指应用的进程运行过程中动态分配的且没有文件名称标记的内存。在本技术实施例中,在进程调用内存分配器(例如mmap分配器)分配匿名页内存时,可以对本进程分配的匿名页内存进行标记,便于内核层识别出该匿名页内存为堆内存,便于后续计算堆区数据压缩比。在一个具体的实现中,进程在申请分配虚拟机堆内存时,例如将匿名页内存中vma_name的字段标记为第一值。当vma_name的字段为第一值时,表明该匿名页为堆内存。如此,内核可以根据vma_name的字段识别出堆区数据。例如,内核可设置一参数object1,用于统计本进程申请分配的堆区数据量(例如单位为页)。
115.另外,内核还可以设置另一个参数object2,用于统计本进程中压缩的堆区数据量(例如单位为页)。object2的初始值为0。当内核压缩内存数据时,可以根据vma_name的字段判断当前压缩的数据是否为堆区数据。还需要说明的是,内核是以页为单位对内存数据进行压缩的。因此,当内核确定压缩的内存数据为堆区数据时,object2加一。如此,可以内核可以统计出压缩的堆区数据的大小,进而计算出堆区数据压缩比。即,堆区数据压缩比=object2除以object1。
116.如前文所述,当内核对堆区数据进行压缩后,电子设备执行gc(包括轻量级gc和全量级gc)时,会对压缩的堆区数据进行解压,然而解压动作需要额外申请内存资源以及消耗更多的cpu资源。为此,本进程或者系统可以设置阈值3。当堆区数据的压缩比不高(即,堆区数据压缩比小于阈值3)时,那么电子设备因执行解压动作额外申请的内存资源以及消耗的cpu资源均不高,并不会影响到系统的正常运行。那么电子设备可以直接执行轻量级gc,即执行步骤407。当堆区数据的压缩比较高(即堆区数据压缩比等于或大于阈值3)时,电子设备需要进一步判断当前的cpu负载情况,即执行步骤404。
117.404、判断cpu负载是否超过阈值4。
118.如果cpu负载(也称为cpu的占用率)超过阈值4(例如40%),表明当前cpu 负载过
重,则不宜立即执行轻量级gc,可以通过上调阈值1的方法延迟执行轻量级gc,即执行步骤405。如果cpu负载没有超过阈值4,则可以直接执行轻量级gc,即执行步骤407。
119.405、上调阈值1。
120.在一个实施例中,电子设备可以采用步进法上调阈值1的数值。在该实施例中,电子设备可以采用默认设置的步长和预设次数,或者接收用户设置的步长和预设次数。例如,电子设备可以先以步长(例如为2m)为单位上调一次阈值1,然后判断本进程预计占用的堆内存除以目标利用率的数值是否小于上调后的阈值1。如果仍然等于或大于上调后的阈值1,则再次以步长为单位上调阈值1(例如再次上调2m,累积已上调4m)。当电子设备上调次数小于预设次数(例如3次)时,再次判断本进程预计占用的堆内存除以目标利用率的数值是否小于上调后的阈值1,如果仍然等于或大于上调后的阈值1,再次上调阈值1。如果电子设备上调次数等于预设次数时,执行步骤406。需要说明的是,在任一次上调阈值1的过程中,如果检测到本进程预计占用的堆内存除以目标利用率的数值小于调整后的阈值1时,则停止再次上调阈值1,直接分配第一内存,即执行步骤 417。
121.406、判断本进程预计占用的堆内存除以目标利用率的数值是否小于阈值1。如果等于或大于阈值1,则执行步骤407,如果小于阈值1,则执行步骤417。
122.可以理解的是,上调阈值1意味着上调了本进程使用堆内存的上限。在一些场景中,上调阈值1后,能够使得本进程预计占用的堆内存除以目标利用率的数值小于上调后的阈值1,那么能够完成第一内存的分配。在该场景下,电子设备通过上调阈值1的方法减少了电子设备执行轻量级gc的次数。
123.在其他一些场景中,上调阈值1后,本进程预计占用的堆内存除以目标利用率的数值仍然可能等于或大于上调后的阈值1。例如,本进程的其他任务可能在该时间段也申请分配了堆内存,造成本进程预计占用的堆内存除以目标利用率的数值仍然等于或大于上调后的阈值1。那么,不能完成第一内存的分配,仍然需要执行轻量级gc回收更多的内存。可见在该场景下,电子设备也通过上调阈值1的方法延迟了电子设备执行轻量级 gc的时机,避免在当前cpu负载过重时执行轻量级gc,有利于保证系统的流畅性和稳定性。
124.407、执行轻量级gc。
125.电子设备针对本进程在特定时间段内新申请的堆内存进行扫描,判断堆内存中的数据是否最近被引用过,然后电子设备可以采用例如lru的策略回收最近最少引用的堆内存。其中,特定时间段是指从电子设备上一次执行gc(包括轻量级gc和全量级gc) 后到本次执行轻量级gc前的时间段。
126.可以理解的是,相较于全量级gc,电子设备执行轻量级gc占用的内存资源和cpu 资源本身较少。由于电子设备执行轻量级gc时并未扫描全部的堆区数据,那么扫描到的压缩数据也较少,因电子设备压缩行为占用的额外的内存资源和cpu资源也不会太多,有利于保证系统的流畅性和稳定性。
127.408、判断本进程预计占用的堆内存除以目标利用率的数值是否小于阈值1。如果等于或大于阈值1,则执行步骤409,如果小于阈值1,则执行步骤417。
128.409、上调阈值1。
129.也就是说,在电子设备执行轻量级gc后,如果电子设备当前的内存情况仍然不能满足需求,即本进程预计占用的堆内存除以目标利用率的数值仍等于或大于阈值1,那么电
子设备再次上调阈值1。通过再次上调阈值1的方法,再次减少电子设备执行全量级gc的次数,或者延长电子设备执行全量级gc的时机。
130.410、判断本进程预计占用的堆内存除以目标利用率的数值是否小于阈值1。如果等于或大于阈值1,则执行步骤411,如果小于阈值1,则执行步骤417。
131.在一些场景中,上调阈值1后,能够使得本进程预计占用的堆内存除以目标利用率的数值小于上调后的阈值1,那么能够完成第一内存的分配。在该场景下,电子设备通过上调阈值1的方法减少了电子设备执行一次全量级gc。
132.在其他一些场景中,上调阈值1后,本进程预计占用的堆内存除以目标利用率的数值仍然可能等于或大于上调后的阈值1。例如,本进程中可能有多个任务并行,那么多个任务可能同时或先后申请分配堆内存。那么在本任务执行本次内存分配请求时,通过上调阈值1的方法提高了本进程的堆内存的使用上限,即最大堆内存,但可能其他任务提前分配到所需的堆内存(即本进程已占用的堆内存增大),从而造成此时本进程预计占用的堆内存(本任务申请分配的内存和本进程已经占用的堆内存)除以目标利用率的数值仍然高于阈值1,仍然不能完成本任务的本次内存分配请求。那么,仍然需要执行轻量级gc回收更多的内存。可见在该场景下,电子设备也通过上调阈值1的方法延迟了电子设备执行全量级gc的时机。
133.411、检测堆区数据压缩比。
134.也就是说,此时电子设备执行过一次轻量级gc,并且上调阈值1之后,电子设备的内存情况仍然不能满足需求时,电子设备也不能立即执行全量级gc。这是因为,电子设备执行全量级gc时占用的内存资源和cpu资源较大,并且由于电子设备需要扫描全部的堆区数据。当堆区数据中的压缩数据量较大时,电子设备因解压行为需要额外占用的内存资源和cpu资源会加重系统的内存紧张程度,影响系统运行的稳定性和流畅性,甚至造成系统的崩溃。本技术将根据堆区数据的压缩比情况分情况采用不同的策略延迟电子设备执行全量级gc,即分情况分别执行下述步骤412、步骤413或步骤414a中的任一步骤。
135.其中,检测堆区数据压缩比的具体方法请参考步骤403中相关内容的描述,这里不再赘述。
136.412、当堆区数据压缩比较低时,如堆区数据压缩比小于阈值5时,避开cpu负载的高峰期执行全量级gc。
137.在一些实施例中,当检测到堆区数据压缩比较低(例如位于区间1,区间1例如为小于阈值5,阈值5例如为30%)时,继续检测cpu的负载。当cpu负载过重时,例如 cpu负载大于阈值7(可以与步骤404中的阈值4相同,或者大于步骤404中的阈值4),暂停执行全量级gc,以避免在cpu负载的高峰期执行全量级gc,保证系统的流畅度和稳定性。持续检测cpu的负载,当cpu负载低于阈值7时,电子设备可以执行全量级 gc。可以理解的,cpu负载的高峰期包括cpu启动app的时间段,或者cpu执行负载较重的任务(例如人脸解锁任务,图像识别任务、语音语义识别任务、图形渲染任务等) 的时间段,或者cpu同时执行大量任务的时间段等。
138.在另一些实施例中,当检测到堆区数据压缩比较低(例如小于阈值5,阈值5例如为30%)时,电子设备也可以直接延迟执行全量级gc的时间,延迟的时长可以根据电子设备当前运行的前台进程或核心进程进行确定。需要说明的是,本技术实施例对延迟执行全量级
gc的具体方案不做具体限定。
139.413、当堆区数据压缩比中等时,如堆区数据压缩比等于或大于阈值5,且小于阈值 6时,在cpu空闲时执行全量级gc。
140.当检测到堆区数据压缩比较低(例如位于区间2,例如区间2例如为阈值5和阈值6 之间,阈值5例如为30%,阈值6例如为50%)时,继续检测cpu的负载。当cpu负载较重时,例如cpu负载大于阈值8(阈值8小于阈值7),暂停执行全量级gc,电子设备可以在cpu空闲时执行全量级gc,以保证系统的流畅度和稳定性。其中,cpu空闲,是指cpu在发出i/o请求后,等待i/o设备完成i/o请求的时间。
141.414a、当堆区数据压缩比较高时,如堆区数据压缩比等于或大于阈值6时,冻结本进程。
142.当检测到堆区数据压缩比较高(例如位于区间3,区间3例如为等于或大于阈值6,阈值6例如为50%)时,若电子设备继续执行全量级gc,需要解压的堆区数据量也较大,需要因解压行为占用大量的内存资源和cpu资源,会严重影响系统的流畅度和稳定性,甚至会导致系统崩溃。因此,在该场景下,电子设备直接冻结本进程,从内存分配源头暂停本进程执行全量级gc(当然本进程也无法执行轻量级gc)。在一个具体实现中,电子设备的内核可以在进程列表将本进程的状态设置为停止,并保存本进程的上下文,以便后续解冻该进程。
143.可以理解的是,通常冻结的是后台进程,那么用户无法感知进程被冻结,也不会影响到用户的使用体验。
144.414b、当接收到解冻本进程的指令后,解冻本进程,并执行全量级gc。
145.一些场景中,当电子设备接收到解冻本进程的指令后,解冻本进程,并执行全量级 gc。其中,解冻本进程的指令包括但不限于,用户将本进程对应的app切换到前台运行的指令等。
146.可选的,在步骤412、步骤413以及步骤414b之后,当电子设备执行全量级gc后,电子设备还可以下调阈值1。这是因为,全量级gc扫描到堆区数据更多,通过能够释放更多的堆内存,使得空闲的堆内存增多,因此在执行全量级gc后电子设备可以适时地下调阈值1,保证堆内存的利用率。
147.415、判断本进程预计占用的堆内存除以目标利用率的数值是否小于阈值1。如果等于或大于阈值1,则执行步骤416,如果小于阈值1,则执行步骤417。
148.416、触发内存溢出机制。
149.在触发内存溢出机制时,电子设备清理所有申请堆内存的进程,本流程结束。
150.417、分配第一内存。
151.综上,本技术实施例提出一种检测堆区数据压缩比的方法,使得电子设备内核的gc线程可以感知堆区数据的压缩量级(即堆区数据的压缩比),从而便于根据堆区数据的压缩量级,进行高效的gc管控。在堆区数据的压缩量级不同的情况下,结合电子设备当前cpu的负载采用不同策略减少电子设备执行gc(轻量级gc和全量级gc)的次数或者延迟电子设备执行gc(轻量级gc和全量级gc)的时机,避免电子设备在cpu高负载的情况下执行gc。由此,本技术降低了电子设备在执行gc时整机占用的系统资源(包括内存资源和cpu资源),有利于保证系统的流畅性和稳定性。
152.还需要说明的是,上述步骤401-步骤417仅为本技术实施例提供的一个实施例,在
其他实施例中,上述步骤401-步骤417中部分步骤可以缺省,或者步骤之间的执行顺序可以变化,或者在方案不矛盾的情况下步骤间可以进行其他组合。例如,在一些实施例中,步骤405可以缺省,或者步骤407可以缺省,或者步骤409可以缺省。又例如,在其他一些实施例中,步骤403可以替换为步骤411,并且,电子设备可以根据堆区数据压缩比的情况,采用不同的策略延迟gc。例如,当堆区数据压缩比较低时,可以直接执行轻量级gc。当堆区数据压缩比较高时,采用上调阈值1的方法延迟执行轻量级gc。在本技术揭露的技术范围内的其他变化或替换均涵盖在本技术的保护范围之内,这里不再一一列举。
153.本技术实施例还提供一种芯片系统,如图5所示,该芯片系统包括至少一个处理器1101 和至少一个接口电路1102。处理器1101和接口电路1102可通过线路互联。例如,接口电路 1102可用于从其它装置(例如电子设备100的存储器)接收信号。又例如,接口电路1102 可用于向其它装置(例如处理器1101)发送信号。示例性的,接口电路1102可读取存储器中存储的指令,并将该指令发送给处理器1101。当所述指令被处理器1101执行时,可使得电子设备执行上述实施例中的电子设备100(比如,手机)执行的各个步骤。当然,该芯片系统还可以包含其他分立器件,本技术实施例对此不作具体限定。
154.本技术实施例还提供一种装置,该装置包含在电子设备中,该装置具有实现上述实施例中任一方法中电子设备行为的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括至少一个与上述功能相对应的模块或单元。例如,检测模块或单元、确定模块或单元、以及处理模块或单元等。
155.本技术实施例还提供一种计算机存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行如上述实施例中任一方法。
156.本技术实施例还提供一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行如上述实施例中任一方法。
157.可以理解的是,上述电子设备等为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本技术实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。
158.本技术实施例可以根据上述方法示例对上述电子设备等进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
159.通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
160.在本技术实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以
是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
161.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:快闪存储器、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
162.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何在本技术揭露的技术范围内的变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1