虚拟机垃圾回收运行方法及电子设备与流程

文档序号:31447021发布日期:2022-09-07 12:08阅读:154来源:国知局
虚拟机垃圾回收运行方法及电子设备与流程

1.本技术涉及智能终端技术领域,尤其涉及一种虚拟机垃圾回收运行方法及电子设备。


背景技术:

2.gc(garbage collection,垃圾回收)是指一种自动的存储器管理机制。当一些被占用的内存不再需要时,就应该予以释放以让出空间,这种存储资源管理就称为垃圾回收。
3.在虚拟机运行期间,如果产生的垃圾达到一定数量阈值,虚拟机的守护线程就开始进行垃圾回收,即发生gc。若gc频繁发生,会导致cpu(central processing unit,中央处理器)负载变高,电子设备(如手机)整机发热、功耗增加,还可能发生由于cpu资源被守护线程抢占而导致的前台应用卡顿掉帧的现象。由此,用户使用体验较差。


技术实现要素:

4.为了解决上述技术问题,本技术实施例提供一种虚拟机垃圾回收运行方法及电子设备及电子设备。在该方法中,电子设备根据gc守护线程进行gc的频繁情况以及电子设备的温度值,动态地调整gc守护线程的运行核,以在gc频繁发生时降低gc运行的功耗,减轻电子设备的发热现象,尽量避免由于cpu资源被守护线程抢占而导致的前台应用卡顿掉帧的现象,以此提升用户的使用体验。
5.第一方面,本技术实施例提供一种虚拟机垃圾回收运行方法。该方法包括:电子设备在gc守护线程每次完成gc运行时,获取本次gc运行的相关数据以及设备温度值;电子设备结合本次gc运行的相关数据,判断gc运行频繁情况;电子设备根据设备温度值以及gc运行频繁情况,调整gc守护线程的运行核。这样实现了gc守护线程的运行核的动态调整,能够在gc频繁发生时降低gc运行的功耗,减轻电子设备的发热现象,还可以避免由于cpu资源被守护线程抢占而导致的前台应用卡顿掉帧的现象,以此提升了用户的使用体验。
6.示例性的,gc运行的相关数据可以包括:gc运行开始时间和gc结束时间。
7.根据第一方面,电子设备根据设备温度值以及gc运行频繁情况,调整gc守护线程的运行核,包括:在设备温度值大于预设的温度阈值时,电子设备调整gc守护线程运行在电子设备中处理能效比最低的cpu核上。cpu核的处理能效比越低,其功耗就越高,发热现象就越严重。在设备温度值较高时,将gc守护线程的运行核调整为电子设备中处理能效比最低的cpu核上,能够有效降低电子设备的功耗,减轻电子设备的发热现象。
8.示例性的,电子设备中处理能效比最低的cpu核可以是cpu小核。
9.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备根据设备温度值和gc运行频繁情况,调整gc守护线程的运行核,包括:在设备温度值小于等于预设的温度阈值时,如果gc运行频繁,则电子设备将gc守护线程由运行在第一cpu核上调整为运行在第二cpu核上;其中,第二cpu核的处理能效比低于第一cpu核的处理能效比;在设备温度值小于等于预设的温度阈值时,如果gc运行不频繁,则电子设备将gc守护线程由运行在第一cpu
核上调整为运行在第三cpu核上;其中,第三cpu核的处理能效比高于第一cpu核的处理能效比。这样,在设备温度值较低时,如果gc运行频繁,则将gc守护线程的运行核由处理能效比较高的cpu核调整为处理能效比较低的cpu核,以此降低电子设备的功耗,减轻电子设备的发热现象。在设备温度值较低时,如果gc运行不频繁,则将gc守护线程的运行核由处理能效比较低的cpu核调整为处理能效比较高的cpu核,以此提升gc守护线程的运行效率。
10.示例性的,第一cpu核为cpu中核时,第二cpu核可以是cpu小核。再示例性的,第一cpu核为cpu小核时,第三cpu核可以是cpu中核。其中,cpu小核、cpu中小核、cpu中核的处理能效比依次增高。
11.根据第一方面,或者以上第一方面的任意一种实现方式,上述方法还包括:电子设备获取本次gc运行时的中断程序时长;其中,中断程序时长用于指示由gc守护线程向除gc守护线程之外的其它线程发送中断请求的时刻,到gc守护线程向其它线程发送结束中断请求的时刻的时长;在设备温度值小于等于预设的温度阈值时,如果中断程序时长大于预设的时长阈值,则电子设备不对gc守护线程的运行核进行绑定。其中,中断程序时长越长,表明gc守护线程的运行对其它前端程序运行的影响越大。这样,在gc运行过程中中断程序时长过长时,电子设备不对gc守护线程的运行核进行限定,能够避免由于gc守护线程的绑核操作而导致其它程序无法正常运行的问题。
12.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备不对gc守护线程的运行核进行绑定,包括:如果gc守护线程的运行核已进行绑定,则电子设备取消对gc守护线程的运行核的绑定操作;如果gc守护线程的运行核未进行绑定,则电子设备维持gc守护线程的运行核未进行绑定的状态。
13.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备调整gc守护线程的运行核,包括:电子设备调整gc守护线程的绑核强度值;电子设备根据与调整后的绑核强度值对应的绑核策略,调整gc守护线程的运行核;其中,不同的绑核强度值对应不同的绑核策略;绑核策略至少包括:将gc守护线程绑定在cpu小核上运行,将gc守护线程绑定在cpu中小核上运行,将gc守护线程绑定在cpu中核上运行,不对gc守护线程的运行核进行绑定。这样,电子设备通过调整gc守护线程的绑核强度值,以实现对gc守护线程运行核的调整,例如将gc守护线程的运行核调整为cpu小核、cpu中小核、cpu中核,或者是不对gc守护线程的运行核进行限定,以在gc频繁发生时降低gc运行的功耗,减轻电子设备的发热现象,尽量避免由于cpu资源被守护线程抢占而导致的前台应用卡顿掉帧的现象,以此提升用户的使用体验。
14.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备调整gc守护线程的绑核强度值,包括:电子设备增加gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第二cpu核上;电子设备减小gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第三cpu核上;或者,电子设备减小gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第二cpu核上;电子设备增加gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第三cpu核上;其中,第二cpu核的处理能效比低于第一cpu核的处理能效比,第三cpu核的处理能效比高于第一cpu核的处理能效比;电子设备重新设置gc守护线程的绑核强度值,以调整gc守护线程运行在电子设备中处理能效比最低的cpu核上,或者,不对gc守护线程的运行
核进行绑定。
15.示例性的,第一cpu核为cpu中核时,第二cpu核可以是cpu小核。再示例性的,第一cpu核为cpu小核时,第三cpu核可以是cpu中核。其中,cpu小核、cpu中小核、cpu中核的处理能效比依次增高。
16.示例性的,随着绑核强度值的增高,相应的绑核策略指示将gc守护线程的运行核调整至处理能效比更高的cpu核上。
17.再示例性的,随着绑核强度值的降低,相应的绑核策略指示将gc守护线程的运行核调整至处理能效比更高的cpu核上。
18.根据第一方面,或者以上第一方面的任意一种实现方式,当绑核强度值分别为0、1、2、3时,绑核策略依次为:将gc守护线程绑定在cpu小核上运行;将gc守护线程绑定在cpu中小核上运行;将gc守护线程绑定在cpu中核上运行;不对gc守护线程的运行核进行绑定。电子设备调整gc守护线程的绑核强度值,包括:在设备温度值大于预设的温度阈值时,电子设备将gc守护线程的绑核强度值重新设置为0;在设备温度值小于等于预设的温度阈值时,如果gc运行频繁,则电子设备减小gc守护线程的绑核强度值;在设备温度值小于等于预设的温度阈值时,如果gc运行不频繁,则电子设备增加gc守护线程的绑核强度值;在设备温度值小于等于预设的温度阈值时,如果中断程序时长大于预设的时长阈值,则电子设备将gc守护线程的绑核强度值重新设置为3。
19.示例性的,电子设备调整gc守护线程的绑核强度值的流程可以参见如下述图6所示的流程。
20.根据第一方面,或者以上第一方面的任意一种实现方式,在电子设备调整gc守护线程的绑核强度值之后,还包括:电子设备检测调整后的gc守护线程的绑核强度值的合法性;其中,合法性指的是绑核强度值是否属于预设数值之一,若绑核强度值属于预设数值之一,则绑核强度值合法,否则绑核强度值不合法;在调整后的gc守护线程的绑核强度值不合法时,电子设备增加或减小gc守护线程的绑核强度值,以使再次调整后的gc守护线程的绑核强度值合法。这样,在调整后的gc守护线程的绑核强度值不合法时,gc调控模块再次调整gc守护线程的绑核强度值使其合法,由此能够避免由于绑核强度值不合法而导致gc守护线程运行核调整失败的问题。
21.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备结合本次gc运行的相关数据,判断gc运行频繁情况,包括:电子设备根据本次gc运行的运行开始时间和前一次gc运行的运行结束时间,计算本次gc运行时的gc运行间隔时长;电子设备根据本次gc运行时的gc运行间隔时长,判断gc运行频繁情况;或者,电子设备根据连续多次gc运行时的gc运行间隔时长,判断gc运行频繁情况;其中,连续多次gc运行包括所述本次gc运行。
22.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备根据连续多次gc运行时的gc运行间隔时长,判断gc运行频繁情况,包括:在连续多次gc运行中,如果gc运行间隔时长低于预设间隔阈值的gc次数超过预设次数阈值,则电子设备判断出gc运行频繁。这样,电子设备通过多次gc运行情况判断gc是否运行频繁,提升了判断gc运行是否频繁的准确性。
23.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备包括:gc运行模块和gc监控模块;电子设备在gc守护线程每次完成gc运行时,获取本次gc运行的相关数据,
包括:gc运行模块向gc监控模块发送gc开始时间;gc运行模块运行gc守护线程;gc运行模块在运行完成gc守护线程时,向gc监控模块发送gc结束时间。
24.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备还包括:gc调控模块;电子设备获取设备温度值,包括:gc运行模块在运行完成gc守护线程时,读取设备温度值,并将设备温度值发送给gc调控模块;或者,在gc运行模块在运行完成gc守护线程时,gc调控模块读取设备温度值。
25.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备获取本次gc运行时的中断程序时长,包括:gc运行模块在运行完成gc守护线程时,向gc调控模块发送本次gc运行时的中断程序时长,以使gc调控模块根据设备温度值和中断程序时长调整gc守护线程的运行核。
26.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备结合本次gc运行的相关数据,判断gc运行频繁情况,根据设备温度值以及gc运行频繁情况,调整gc守护线程的运行核,包括:gc监控模块结合本次gc运行的相关数据,判断gc运行频繁情况,并将gc运行频繁情况发送至gc调控模块;gc调控模块根据设备温度值以及gc运行频繁情况,调整gc守护线程的运行核。
27.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备还包括:art虚拟机;在电子设备在gc守护线程每次完成gc运行时,获取本次gc运行的相关数据之前,还包括:art虚拟机启动gc守护线程;art虚拟机在应用运行产生的垃圾内存达到预设的内存阈值时,向gc运行模块发送触发信息;其中,触发信息用于指示gc运行模块运行gc守护线程以进行gc操作。
28.根据第一方面,或者以上第一方面的任意一种实现方式,在art虚拟机启动gc守护线程之后,还包括:art虚拟机向gc调控模块发送gc守护线程的线程id;电子设备根据设备温度值以及gc运行频繁情况,调整gc守护线程的运行核,包括:gc调控模块根据gc守护线程的线程id,以及设备温度值和gc运行频繁情况,调整gc守护线程的运行核。
29.示例性的,本实现方式可以参见如下述图5所示的模块交互示意图中的步骤流程。
30.根据第一方面,或者以上第一方面的任意一种实现方式,电子设备根据设备温度值以及gc运行频繁情况,调整gc守护线程的运行核,包括:gc调控模块根据设备温度值和gc运行频繁情况,调整gc守护线程的绑核强度值;gc调控模块将调整后的绑核强度值发送给gc运行模块;gc运行模块根据gc守护线程的线程id,以及与调整后的绑核强度值对应的绑核策略,调整gc守护线程的运行核。
31.示例性的,本实现方式可以参见如下述图7所示的模块交互示意图中的步骤流程。
32.第二方面,本技术实施例提供一种电子设备。该电子设备包括:一个或多个处理器;存储器;以及一个或多个计算机程序,其中一个或多个计算机程序存储在存储器上,当计算机程序被一个或多个处理器执行时,使得电子设备执行如第一方面以及第一方面中任意一项的虚拟机垃圾回收运行方法。
33.第二方面以及第二方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第二方面以及第二方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
34.第三方面,本技术实施例提供一种计算机可读存储介质。该计算机可读存储介质
包括计算机程序,当计算机程序在电子设备上运行时,使得电子设备执行第一方面以及第一方面中任意一项的虚拟机垃圾回收运行方法。
35.第三方面以及第三方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第三方面以及第三方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
36.第四方面,本技术实施例提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现第一方面以及第一方面中任意一项的虚拟机垃圾回收运行方法。
37.第四方面以及第四方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第四方面以及第四方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
附图说明
38.图1为示例性示出的应用场景示意图;
39.图2为示例性示出的cpu运行情况示意图;
40.图3为示例性示出的电子设备的硬件结构示意图;
41.图4为示例性示出的电子设备的软件结构示意图;
42.图5为本技术实施例提供的电子设备的模块交互示意图;
43.图6为本技术实施例提供的gc守护线程的绑核流程示意图;
44.图7为本技术实施例提供的电子设备的模块交互示意图;
45.图8为本技术实施例提供的虚拟机垃圾回收运行方法的流程示意图。
具体实施方式
46.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
47.本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。
48.本技术实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一目标对象和第二目标对象等是用于区别不同的目标对象,而不是用于描述目标对象的特定顺序。
49.在本技术实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本技术实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
50.在本技术实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个系统是指两个或两个以上的系统。
51.在一种应用场景中,参照图1,当虚拟机的守护线程(如heaptaskdeamon线程)频繁
进行gc时,会导致cpu负载增高,进而导致电子设备功耗增加、整机发热。同时,当虚拟机的守护线程频繁进行gc时,虚拟机的守护线程可能会运行在cpu的超大核上,导致cpu负载增高以及cpu资源分配不合理的问题。由此,用户使用体验较差。
52.参照图2,在虚拟机运行期间,每当heap size达到一定阈值,heaptaskdeamon线程就开始进行垃圾回收。若heaptaskdeamon线程频繁进行gc,heaptaskdeamon线程就会运行在超大核(如图2中cpu7)上。heaptaskdeamon线程运行在超大核上,不仅会增加整机功耗,而且heaptaskdeamon线程抢占了前台应用的cpu资源,使cpu资源分配不合理,进而造成前台应用卡顿丢帧的现象。
53.如图3所示为电子设备100的结构示意图。可选地,电子设备100可以为终端,也可以称为终端设备,终端可以为蜂窝电话(cellular phone)或平板电脑(pad)等设备,本技术不做限定。需要说明的是,电子设备100的结构示意图可以适用于图1中进行gc的电子设备,如手机。应该理解的是,图3所示电子设备100仅是电子设备的一个范例,并且电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图3中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
54.电子设备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可以包括压力传感器,陀螺仪传感器,气压传感器,磁传感器,加速度传感器,距离传感器,接近光传感器,指纹传感器,温度传感器,触摸传感器,环境光传感器,骨传导传感器等。
55.处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,ap),调制解调处理器,图形处理器(graphics processing unit,gpu),图像信号处理器(image signal processor,isp),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,dsp),基带处理器,和/或神经网络处理器(neural-network processing unit,npu)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
56.其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
57.处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。usb接口130是符合usb标准规范的接口,具体可以是mini usb接口,micro usb接口,usb type c接口等。usb接口130可以用于连接充电器为电子设备100充电,也可以用于电子设备100与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如ar设备等。
58.充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过usb接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子
设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
59.电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。
60.电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。天线1和天线2用于发射和接收电磁波信号。移动通信模块150可以提供应用在电子设备100上的包括2g/3g/4g/5g等无线通信的解决方案。无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wireless local area networks,wlan)(如无线保真(wireless fidelity,wi-fi)网络),蓝牙(bluetooth,bt),全球导航卫星系统(global navigation satellite system,gnss),调频(frequency modulation,fm),近距离无线通信技术(near field communication,nfc),红外技术(infrared,ir)等无线通信的解决方案。
61.在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。
62.电子设备100通过gpu,显示屏194,以及应用处理器等实现显示功能。gpu为图像处理的微处理器,连接显示屏194和应用处理器。gpu用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个gpu,其执行程序指令以生成或改变显示信息。显示屏194用于显示图像,视频等。显示屏194包括显示面板。在一些实施例中,电子设备100可以包括1个或n个显示屏194,n为大于1的正整数。
63.电子设备100可以通过isp,摄像头193,视频编解码器,gpu,显示屏194以及应用处理器等实现拍摄功能。摄像头193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件把光信号转换成电信号,之后将电信号传递给isp转换成数字图像信号。isp将数字图像信号输出到dsp加工处理。dsp将数字图像信号转换成标准的rgb,yuv等格式的图像信号。在一些实施例中,电子设备100可以包括1个或n个摄像头193,n为大于1的正整数。
64.数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
65.视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,mpeg)1,mpeg2,mpeg3,mpeg4等。
66.外部存储器接口120可以用于连接外部存储卡,例如micro sd卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
67.内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理,使得电子设备100实现本技术实施中的虚拟机垃圾回收运行方法。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一
programming interface,api)和编程框架。应用程序框架层包括一些预先定义的函数。
80.如图4所示,应用程序框架层可以包括窗口管理器,视图系统,温度服务等。
81.窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
82.视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
83.温度服务,用于实时监控电子设备的温度信息。
84.系统库与运行时层包括系统库和安卓运行时(android runtime)。android runtime包括核心库、虚拟机管理器和虚拟机。android runtime负责安卓系统的调度和管理。
85.核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
86.虚拟机管理器用于实现虚拟机的创建和管理。
87.应用程序层和应用程序框架层运行在虚拟机中,如art虚拟机。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
88.如图4所示,art虚拟机中的垃圾回收功能模块可以包括运行模块、监控模块和调控模块。其中,运行模块用于运行gc,监控模块用于监控gc是否运行频繁,调控模块用于根据gc运行情况调整gc的运行核。
89.系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(media libraries)等。
90.表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2d和3d图层的融合。
91.媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:mpeg4,h.264,mp3,aac,amr,jpg,png等。
92.内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。
93.可以理解的是,图4示出的软件结构中的层以及各层中包含的部件,并不构成对电子设备100的具体限定。在本技术另一些实施例中,电子设备100可以包括比图示更多或更少的层,以及每个层中可以包括更多或更少的部件,本技术不做限定。
94.可以理解的是,电子设备为了实现本技术中的虚拟机垃圾回收运行方法,其包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本技术能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
95.本技术实施例提供一种虚拟机垃圾回收运行方法。具体的,针对每个应用程序,电子设备统计其gc运行的相关数据。电子设备根据其gc运行频繁情况以及设备温度值动态地
调整gc守护线程的运行核。进而,当某个应用程序频繁出现gc现象时,电子设备会调整与该应用程序对应的gc守护线程的运行核,以此降低gc守护线程的运行功耗,减轻电子设备的发热现象,并避免出现cpu资源分配不平衡的问题。
96.下述以视频应用为例,根据视频应用发生gc的情况,调整与视频应用对应的gc守护线程的运行核。进而,当视频应用频繁出现gc现象时,调整与视频应用对应的gc守护线程的运行核,例如对gc守护线程的运行核进行绑定,以此降低相应的gc守护线程的运行功耗,减轻电子设备的发热现象。当视频应用的gc现象不频繁时,可以不对与视频应用对应的gc守护线程的运行核进行绑定,以提高相应的gc守护线程的运行效率。
97.需要指出的是,对gc守护线程的运行核进行绑定时,gc守护线程只能运行在绑定的cpu核上。例如,将gc守护线程的运行核绑定在cpu小核上,则gc守护线程只能运行在的cpu小核上。对gc守护线程的运行核不进行绑定时,gc守护线程可以运行在任意cpu核上,可以是cpu小核,也可以是cpu大核。
98.如图5所示为电子设备的各模块的一种交互示意图。参照图5,本技术提供的虚拟机垃圾回收运行方法的流程,具体包括:
99.s501,虚拟机管理器响应于用户点击视频应用图标,创建art虚拟机。
100.当用户点击电子设备页面上的视频应用图标,以开启视频应用时,虚拟管理器会在android runtime中创建与该视频应用对应的art虚拟机。
101.需要指出的是,针对每个应用程序,当用户点击该应用程序的图标以开启该应用程序时,虚拟管理器均会创建与该应用程序对应的art虚拟机。虚拟机管理器可以用于实现对多个art虚拟机的管理。
102.s502,art虚拟机程序启动,并启动gc守护线程。
103.在与视频应用对应的art虚拟机创建完成后,该art虚拟机对应的程序启动。随即,art虚拟机启动gc守护线程,如heaptaskdeamon线程。
104.其中,heaptaskdeamon线程也可以称之为虚拟机的守护线程。在art虚拟机运行期间,如果视频应用产生的垃圾内存达到预设的内存阈值,heaptaskdeamon线程就开始进行垃圾回收操作,也即art虚拟机发生gc。
105.s503,art虚拟机向虚拟机管理器发送art虚拟机启动完成标识。
106.art虚拟机启动完成标识,用于指示art虚拟机已启动完成。示例性的,art虚拟机启动完成标识中可以包括但不限于art虚拟机身份标识和启动完成标识。其中,art虚拟机身份标识,可以用于区分不同的art虚拟机。可选的,art虚拟机身份标识可以是art虚拟机编号。
107.art虚拟机向虚拟机管理器发送art虚拟机启动完成标识,以通知虚拟机管理器本art虚拟机已完成启动,使虚拟机管理器可以执行对该art虚拟机的管理操作。
108.s504,虚拟机管理器向视频应用发送art虚拟机身份标识。
109.虚拟机管理器接收到art虚拟机启动完成标识之后,获取该art虚拟机启动完成标识中携带的art虚拟机身份标识。进而,虚拟机管理器可以根据art虚拟机与应用程序的对应关系,将该art虚拟机身份标识发送给相应的应用程序,以使该应用程序可以运行在相应的art虚拟机上。在本实施例中,虚拟机管理器将art虚拟机身份标识发送给视频应用,以使视频应用可以运行在相应的art虚拟机上。
110.s505,视频应用运行在与接收到的art虚拟机身份标识对应的art虚拟机上。
111.虚拟机管理器将art虚拟机身份标识提供给视频应用之后,视频应用根据art虚拟机身份标识确定相应的art虚拟机,并运行在该art虚拟机上。也即,视频应用可以根据art虚拟机的身份标识处理本应用程序的业务。
112.s506,art虚拟机向gc调控模块发送gc守护线程的线程id。
113.在art虚拟机启动gc守护线程之后,将gc守护线程的线程id发送给gc调控模块,以使gc调控模块可以根据线程id调整gc守护线程的运行核。
114.需要指出的是,gc调控模块,以及下述提及的gc运行模块和gc监控模块均可以理解为art虚拟机中的垃圾回收功能模块的子模块。相应的,gc运行模块、gc监控模块以及gc调控模块所执行的操作,都可以理解为是art虚拟机中的垃圾回收功能模块所执行的操作。
115.s507,art虚拟机监控视频应用运行产生的垃圾内存。
116.在应用程序的运行过程中,不可避免地会产生垃圾内存。art虚拟机会监控运行在其上的应用程序产生的垃圾内存,也即监控视频应用运行产生的垃圾内存。示例性的,art虚拟机会在进行内存分配时监控视频应用运行而产生的垃圾内存。再示例性的,art虚拟机会在调用函数system.gc()时监控视频应用运行而产生的垃圾内存。
117.s508,art虚拟机确定视频应用运行产生的垃圾内存达到预设的内存阈值。
118.art虚拟机监控视频应用运行产生的垃圾内存后,会将监控到的垃圾内存与预设的内存阈值进行比较,判断此时视频应用运行产生的垃圾内存是否达到预设的内存阈值。
119.s509,art虚拟机向gc运行模块发送触发信息。
120.当视频应用运行产生的垃圾内存达到内存阈值时,art虚拟机向gc运行模块发送触发信息。其中,触发信息用于指示gc运行模块运行gc守护线程以进行gc操作。
121.art虚拟机在内存分配、调用函数system.gc()等情况下均有可能触发gc。在应用程序运行过程中,art虚拟机会不断地为应用程序的进程分配内存。当被分配的内存不再被使用后,该内存随即变成可回收的垃圾内存。一旦监控到垃圾内存的数量达到预设的内存阈值,art虚拟机就会触发gc。
122.以应用程序为视频应用为例,在视频应用的运行过程中,当用户频繁切换视频应用播放的视频时,或者,用户点击视频应用弹出的广告弹窗时,视频应用会产生大量的垃圾内存。当art虚拟机监控到视频应用运行产生的垃圾内存达到预设的内存阈值时,art虚拟机就会触发gc。示例性的,art虚拟机触发gc时,会向gc运行模块发送gc指令,以使gc运行模块运行gc守护线程实现gc。
123.s510,gc运行模块向gc监控模块发送gc开始时间。
124.gc运行模块接收到触发信息时,也即art虚拟机触发gc时,gc运行模块记录本次gc运行的gc开始时间,并将该gc开始时间发送给gc监控模块。
125.s511,gc运行模块运行gc守护线程,并确定在gc守护线程运行时的中断程序时长。
126.gc运行模块运行gc守护线程以实现gc操作。在gc守护线程运行以进行gc操作时,电子设备中除gc守护线程之外的其它线程需要中断,以避免gc操作影响其他线程的运行。因此,gc运行模块会在gc守护线程的运行过程中,统计本次gc运行时的中断程序时长。
127.中断程序时长,用于指示由gc守护线程向除gc守护线程之外的其它线程发送中断请求的时刻,到gc守护线程向其它线程发送结束中断请求的时刻的时长。其中,gc守护线程
向除其之外的所有其他线程发送中断请求,用于指示其他线程进行线程中断处理;gc守护线程向除其之外的所有其他线程发送结束中断请求,用于指示其他线程停止中断恢复正常运行。
128.在gc守护线程运行进行gc操作之前,gc守护线程会向除其之外的所有其他线程发送中断请求,以指示这些线程进行线程中断处理。这些线程接收到gc守护线程发送的中断请求后,进行线程中断处理,并向gc守护线程发送中断响应。当gc守护线程接收到所有线程反馈的中断响应后,开始进行gc操作,并在gc操作完成时再向这些线程发送结束中断请求,以指示这些线程可以恢复正常运行。
129.在gc守护线程运行时,gc运行模块记录gc守护线程向除gc守护线程之外的其它线程发送中断请求的时刻,以及gc守护线程向其它线程发送结束中断请求的时刻,根据这两个时刻即可计算出中断程序时长。其中,中断程序时长越长,表明gc守护线程的运行对其它线程正常运行的影响越大。
130.s512,gc运行模块在gc守护线程完成gc运行时,向gc监控模块发送gc结束时间。
131.在gc运行模块完成本次gc运行时,记录本次gc的gc结束时间,并将该gc结束时间发送给gc监控模块。
132.s513,gc运行模块向gc调控模块发送中断程序时长。
133.在gc运行模块完成本次gc运行时,还可以统计本次gc运行时的中断程序时长,并将该中断程序时长发送给gc调控模块,以使gc调控模块可以结合中断程序时长确定gc守护线程运行核的调整策略。可选的,gc运行模块还可以将中断程序时长发送给gc监控模块,并通过gc监控模块将该中断程序时长传递给gc调控模块。
134.可选的,gc运行模块执行gc的统一入口是函数collectgarbageinternal(),所有类型的gc都是在该函数中执行的。在本实施例中,可以预先在gc运行模块的函数collectgarbageinternal()中进行插装记录gc运行的相关数据,如插装记录每次gc运行的gc开始时间、gc结束时间以及中断程序时长等。
135.s514,gc监控模块根据当次gc运行的gc开始时间和前一次gc运行的gc结束时间统计当次gc的运行间隔时长,并判断gc运行是否频繁。
136.gc监控模块接收到gc运行模块每次发生gc时发送的gc开始时间以及gc结束时间后,将gc开始时间和gc结束时间分别进行存储。例如,gc监控模块将gc开始时间和gc结束时间分别对应存储至gc开始时间数组和gc结束时间数组中,以便gc监控模块可以根据gc开始时间数组和gc结束时间数组中存储的数值,统计gc运行间隔时长。
137.gc运行间隔时长,指的是相邻两次gc运行的间隔时长。其中,本次gc运行时的gc运行间隔时长,可以通过计算本次gc运行时的gc开始时间与前一次gc运行时的gc结束时间的差值来确定。
138.gc监控模块可以根据接收到的每次gc运行时的gc开始时间以及gc结束时间,统计连续多次gc运行中每相邻两次gc运行的gc运行间隔时长。
139.作为另一种可选的实施方式,gc运行模块可以统计每相邻两次gc运行时的gc运行间隔时长,并将每次统计得到的gc运行间隔时长发送给gc监控模块。在本实施方式中,gc运行模块也可以将每次发生gc时的gc开始时间以及gc结束时间,分别对应存储至gc开始时间数组和gc结束时间数组中,以便gc运行模块可以根据gc开始时间数组和gc结束时间数组中
存储的数值,分别统计各次gc运行时的gc运行间隔时长,并将统计得到的gc运行间隔时长发送至gc监控模块。此时,gc监控模块可以将每次接收到的gc运行间隔时长存储至相应的gc运行间隔时长数组中。
140.其中,gc运行间隔时长可以用于表征表征gc运行的频繁情况,gc运行间隔时长越短,表明gc运行得越频繁。
141.可选的,gc监控模块可以根据本次gc运行时的gc运行间隔时长,判断gc运行频繁情况。例如,在本次gc运行时的gc运行间隔时长低于预设间隔阈值时,gc监控模块判断出gc运行频繁;在本次gc运行时的gc运行间隔时长不低于预设间隔阈值时,gc监控模块判断出gc运行不频繁。
142.可选的,gc监控模块可以根据连续多次gc运行时的gc运行间隔时长,判断gc运行频繁情况。其中,这连续多次gc运行中包括本次gc运行,本次gc运行为这连续多次gc运行中的最后一次gc运行。
143.作为一种可选的实施方式,在连续多次gc运行中,如果gc运行间隔时长低于预设间隔阈值的gc次数超过预设次数阈值,则gc监控模块可以判断出gc运行频繁。
144.也即,gc监控模块如果统计出,在连续的n次gc运行中,与前一次gc运行的gc运行间隔时长低于预设间隔阈值的gc次数超过m次,则gc监控模块可以判断出当前gc运行频繁。gc监控模块如果统计出,在连续的n次gc运行中,与前一次gc运行的gc运行间隔时长低于预设间隔阈值的gc次数不超过m次,则gc监控模块可以判断出当前gc运行不频繁。其中,n、m为正整数。关于n值、m值以及预设间隔阈值,可以根据实际情况而定,本实施例对此不做具体限定。
145.需要指出的是,在连续的n次gc运行中,最后一次gc运行即为本次gc运行。而且,在连续的n次gc运行中,与前一次gc运行的gc运行间隔时长低于预设间隔阈值的m次gc运行,可以是不连续的。
146.示例性的,n为8,m为4,预设间隔阈值为100ms。也即,如果gc监控模块统计到在连续的8次gc运行中,与前一次gc运行的gc运行间隔时长低于100ms的gc次数超过4次,则gc监控模块可以判断出当前gc运行频繁。如果gc监控模块统计到在连续的8次gc运行中,与前一次gc运行的gc运行间隔时长低于100ms的gc次数不超过4次,则gc监控模块可以判断出当前gc运行不频繁。
147.s515,gc监控模块向gc调控模块发送gc运行是否频繁的标识。
148.gc监控模块向gc调控模块发送的gc运行是否频繁的标识,可以指示gc运行频繁,也可以指示gc运行不频繁。例如,当标识为“1”时,表明gc运行频繁;当标识为“0”时,表明gc运行不频繁。
149.gc监控模块在判断出当前gc运行是否频繁后,将gc运行是否频繁的标识发送给gc调控模块,以使gc调控模块可以根据该标识获知当前gc运行是否频繁。
150.s516,gc调控模块从温度服务中读取设备温度值。
151.温度服务,可以实时监控电子设备的温度值。示例性的,电子设备中温度传感器将实时采集到的温度数据发送到传感器驱动。传感器驱动将接收到的温度数据发送给温度服务,以使温度服务可以实时监控到电子设备的温度值。
152.示例性的,gc调控模块可以通过get()函数在温度服务中读取设备温度值。
153.再示例性的,gc调控模块向温度服务发送温度读取请求,温度服务接收到温度读取请求后,将电子设备当前的温度值发送给gc调控模块,以使gc调控模块可以结合电子设备当前的温度值确定gc守护线程运行核的调整策略。其中,温度读取请求,指的是意在获取电子设备当前温度值的请求。gc调控模块在接收到gc监控模块发送的gc的频繁标识之后,随即向温度服务发送温度读取请求,以获取电子设备当前的温度值。
154.需要指出的是,s516可以在s515后执行,也可以在s513后执行,本实施例不对步骤“gc调控模块从温度服务中读取设备温度值”的执行顺序进行限定,可以根据实际应用进行调整。
155.作为另一种可选的实施方式,gc监控模块在向gc调控模块发送gc的频繁标识之后,从温度服务中读取设备温度值,并将读取到的设备温度值发送给gc调控模块。
156.作为又一种可选的实施方式,gc运行模块在本次gc运行结束时,从温度服务中读取设备温度值,并将读取到的设备温度值直接发送给gc调控模块,或者通过gc监控模块转发给gc调控模块。
157.可选的,gc调控模块每当接收到电子设备的温度值之后,将该温度值进行存储。示例性的,gc调控模块可以将每次接收到的温度值存储在温度数组中,并结合温度数组中最新存储的温度数据确定gc守护线程运行核的调整策略。示例性的,gc调控模块在每次接收到的温度值时,可以使用该温度值对电子设备的当前温度值进行更新(也即gc调控模块只存储最新接收到的温度值),并结合更新后的电子设备当前温度值确定gc守护线程运行核的调整策略。
158.s517,gc调控模块根据设备温度值、gc运行是否频繁的标识以及中断程序时长,调整gc守护线程的运行核。
159.当发生频繁gc现象时,gc守护线程会被分配到cpu超大核,导致cpu负载变高,整机发热,前台卡顿,功耗增加。可以理解的,电子设备(如手机)cpu的核可以分为cpu小核、cpu中小核、cpu大核以及cpu超大核等。cpu的核越大,其处理能效比就越高,但其发热也会相应地增加。
160.在本实施例中,gc调控模块根据电子设备的温度值、gc运行是否频繁的标识以及中断程序时长,调整gc守护线程的运行核,以使gc守护线程可以运行在适当的cpu核上。
161.可选的,在电子设备的温度值大于预设的温度阈值时,gc调控模块可以调整gc守护线程运行在该电子设备中处理能效比最低的运行核上。例如,gc调控模块可以调整gc守护线程运行在cpu小核上。
162.可选的,在电子设备温度值小于等于预设的温度阈值时,如果gc运行频繁,则gc调控模块可以调整gc守护线程运行在处理能效比更低的运行核上,如将gc守护线程由运行在第一cpu核上调整为运行在第二cpu核上,其中,第二cpu核的处理能效比低于第一cpu核的处理能效比。在电子设备温度值小于等于预设的温度阈值时,如果gc运行不频繁,则gc调控模块可以调整gc守护线程运行在处理能效比更高的运行核上,如将gc守护线程由运行在第一cpu核上调整为运行在第三cpu核上,其中,第三cpu核的处理能效比高于第一cpu核的处理能效比。
163.例如,在电子设备温度值小于等于预设的温度阈值时,如果gc运行频繁,则gc调控模块可以调整gc守护线程由运行在cpu中核上至运行在cpu小核上,以降低gc守护线程的运
行功耗。在电子设备温度值小于等于预设的温度阈值时,如果gc运行不频繁,则gc调控模块可以调整gc守护线程由运行在cpu小核上至运行在cpu中核上,以提高gc守护线程的运行效率。
164.可选的,在电子设备温度值小于等于预设的温度阈值时,如果中断程序时长大于预设的时长阈值,则gc调控模块可以不对gc守护线程的运行核进行绑定,以避免由于gc守护线程的绑核操作而导致中断程序时长过长的问题,进而避免由于gc守护线程绑核操作而影响电子设备的前端其他程序。此时,gc守护线程可以运行在任意cpu核上,可以是cpu小核或cpu中核,也可以是cpu大核或cpu超大核。
165.这样,gc调控模块根据电子设备的温度值、gc运行是否频繁的标识以及中断程序时长,调整gc守护线程的运行核,以使gc守护线程可以运行在适当的cpu核上,能够降低gc运行功耗,而且还可以防止出现gc守护线程抢占cpu大核或cpu超大核的现象,进而在一定程度上减缓电子设备的发热卡顿现象。
166.在本实施例中,gc调控模块可以根据电子设备的温度值、gc的频繁标识以及中断程序时长,动态阶梯式地调整gc守护线程的运行核。示例性的,gc调控模块可以调整gc守护线程的绑核强度值,并根据与调整后的绑核强度值对应的绑核策略,来调整gc守护线程的运行核。可选的,gc守护线程的绑核强度值的初始值为默认值。
167.其中,不同的绑核强度值对应不同的绑核策略。示例性的,绑核策略至少包括:将gc守护线程绑定在cpu小核上运行,将gc守护线程绑定在cpu中小核上运行,将gc守护线程绑定在cpu中核上运行,以及不对gc守护线程的运行核进行绑定等。
168.其中,gc调控模块调整gc守护线程的绑核强度值,可以是gc调控模块增加gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第二cpu核上,减小gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第三cpu核上;或者可以是gc调控模块减小gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第二cpu核上,增加gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第三cpu核上;或者还可以是重新设置gc守护线程的绑核强度值,以调整gc守护线程运行在电子设备中处理能效比最低的运行核上,或者,实现不对gc守护线程的运行核进行绑定的操作。
169.示例性的,gc守护线程的绑核强度值越大,gc守护线程的运行核的处理能效比越高,相应的设备发热也会增加。例如,当绑核强度值为0时,绑核策略可以是将gc守护线程的运行核调整为cpu小核(也可以称之为将gc守护线程绑定至cpu小核);当绑核强度值为1时,绑核策略可以是将gc守护线程的运行核调整为cpu中小核;当绑核强度值为2时,绑核策略可以是将gc守护线程的运行核调整为cpu中核;当绑核强度值为3时,绑核策略为不对gc守护线程的运行核进行限定,也即不对gc守护线程进行绑核操作。当绑核强度值为3时,gc守护线程的运行核可以按照已有技术来确定,可能为cpu大核或cpu超大核。
170.再示例性的,gc守护线程的绑核强度值越小,gc守护线程的运行核的处理能效比越高,相应的设备发热也会增加。在此,本实施例不再对本示例进行详细阐述。
171.如图6所示为gc守护线程运行核的调整流程示意图。参照图6,依据前述示例(即gc守护线程的绑核强度值越大,gc守护线程的运行核的处理能效比越高的示例)中绑核强度值与绑核策略的对应关系,本技术提供的gc调控模块调整gc守护线程的运行核的流程,具
体包括:
172.s601,gc调控模块获取gc守护线程的绑核强度值。
173.此步骤中的绑核强度值,指的是gc守护线程当前的绑核强度值,也即gc调控模块前一次调整gc守护线程运行核时确定的gc守护线程的绑核强度值。
174.s602,gc调控模块判断当前温度值是否大于温度阈值,若是,则执行s603,若否,则执行s604。
175.其中,电子设备的当前温度是温度服务反馈的。若电子设备的当前温度值大于预设的温度阈值(此时设备发热现象严重),则gc调控模块认为电子设备当前负载高、功耗高。示例性的,预设的温度阈值可以是50度。
176.本实施例中,在gc调控模块调整gc守护线程运行核之前,首先会考虑电子设备的发热现象是否严重。若电子设备发热现象严重,无论gc守护线程当前的绑核强度值是多少,gc调控模块调整gc守护线程运行核的策略都会遵从于降低电子设备的功耗,减轻发热现象。
177.s603,gc调控模块将gc守护线程的绑核强度值设置为0。
178.当gc调控模块判断出电子设备的当前温度值大于预设的温度阈值,则gc调控模块可以直接更新gc守护线程的绑核强度值,将绑核强度值设置为0。这样,gc调控模块就可以将gc守护线程绑定在cpu小核上,以此降低电子设备的功耗,防止gc守护线程抢占cpu资源。
179.s604,gc调控模块判断频繁标识是否指示gc运行频繁,若是,则执行s605,若否,则执行s606。
180.当gc调控模块判断出电子设备的当前温度值小于等于预设的温度阈值,则gc调控模块认为电子设备当前负载不高,功耗也不高。此时,gc调控模块会根据接收到的gc频繁标识判断当前gc运行是否频繁,并根据当前gc运行是否频繁的结果,确定gc守护线程的绑核强度值的调整策略。其中,若gc当前运行频繁,gc调控模块可以适当减小gc守护线程的绑核强度值,使gc守护线程运行在处理能效比较低的cpu核上,以降低设备功耗,减轻发热现象;若gc当前运行不频繁,gc调控模块可以适当增大gc守护线程的绑核强度值,使gc守护线程运行在处理能效比较高的cpu核上,以提升gc运行效率。
181.s605,gc调控模块将gc守护线程的绑核强度值减1,执行s607。
182.在本实施例中,若gc当前运行频繁,gc调控模块可以将gc守护线程的绑核强度值在当前值的基础上减1,以使gc守护线程可以运行在处理能效比较低的cpu核上,降低设备功耗。
183.s606,gc调控模块将gc守护线程的绑核强度值加1,执行s607。
184.在本实施例中,若gc当前运行不频繁,gc调控模块可以将gc守护线程的绑核强度值在当前值的基础上加1,以使gc守护线程可以运行在处理能效比较高的cpu核上,提升gc运行效率。
185.s607,gc调控模块判断中断程序时长是否大于时长阈值,若是,则执行s608,若否,则执行s609。
186.在本实施例中,gc调控模块在调整gc守护线程运行核时,除了考虑设备温度值、gc运行是否频繁,还会考虑对gc守护线程的绑核操作是否影响了其它程序的正常运行。若本次gc运行时的中断程序时长大于预设的时长阈值,则gc调控模块会认为gc守护线程的绑核
操作可能会影响其它程序的正常运行,造成前台应用卡顿丢帧的现象;若本次gc运行时的中断程序时长小于等于预设的时长阈值,则gc调控模块会认为gc守护线程的绑核操作不会影响其它程序的正常运行。示例性的,预设的时长阈值可以是5ms。
187.s608,gc调控模块将gc守护线程的绑核强度值设置为3。
188.若gc调控模块判断出本次gc运行时的中断程序时长大于预设的时长阈值,gc调控模块可以将gc守护线程的绑核强度值设置为3,以取消对gc守护线程的绑核操作。这样,能够避免由于gc守护线程的绑核操作而导致其它程序无法正常运行的问题。
189.s609,gc调控模块判断gc守护线程的绑核强度值是否合法,若否,则执行s610,若是,则执行s611。
190.在gc调控模块调整gc守护线程的绑核强度值之后,gc调控模块还会对调整后的绑核强度值进行合法性判断,也即判断调整后的绑核强度值是否为预设的绑核强度值。例如,若调整后的gc守护线程的绑核强度值为-1或4,则该绑核强度值不合法。
191.s610,gc调控模块适应性地调整gc守护线程的绑核强度值。
192.在gc调控模块判断出调整后的绑核强度值不合法时,gc调控模块还会对gc守护线程的绑核强度值进行适应性地再次调整,例如可以是增加或减小gc守护线程的绑核强度值,以使其为预设的绑核强度值中的一个值,也即使其为合法的绑核强度值。可选的,当gc调控模块适应性地再次调整gc守护线程的绑核强度值时,可以将与不合法的绑核强度值相邻的一个合法的绑核强度值,作为再次调整后的绑核强度值。也即,gc调控模块可以将与不合法的绑核强度值差值最小的一个合法的绑核强度值,作为再次调整后的绑核强度值。
193.例如,当调整后的gc守护线程的绑核强度值为-1时,gc调控模块可以将gc守护线程的绑核强度值适应性地再次调整为与不合法的绑核强度值-1相邻的一个合法的绑核强度值0,也即再次调整为与不合法的绑核强度值-1差值最小的一个合法的绑核强度值0。
194.再例如,当调整后的gc守护线程的绑核强度值为4时,gc调控模块可以将gc守护线程的绑核强度值适应性地再次调整为与不合法的绑核强度值4相邻的一个合法的绑核强度值3,也即再次调整为与不合法的绑核强度值4差值最小的一个合法的绑核强度值3。
195.这样,在调整后的gc守护线程的绑核强度值不合法时,gc调控模块再次调整gc守护线程的绑核强度值使其合法,由此能够避免由于绑核强度值不合法而导致gc守护线程运行核调整失败的问题。
196.s611,gc调控模块根据gc守护线程的绑核强度值,调整gc守护线程的运行核。
197.gc调控模块调整完成gc守护线程的绑核强度值之后,根据gc守护线程当前的绑核强度值执行绑核或取消绑核的操作。当gc守护线程的绑核强度值为3时,gc调控模块取消对gc守护线程的绑核操作,也即不对gc守护线程的运行核进行绑定;当gc守护线程的绑核强度值不为3时,gc调控模块按照与该绑核强度值相应的绑核策略绑定gc守护线程的运行核。
198.其中,gc调控模块可以根据gc守护线程的线程id以及与绑核策略对应的绑核参数,来实现对gc守护线程运行核的调整。示例性的,绑核参数可以包括但不限于cpu绑核编码。又示例性的,绑核参数可以包括但不限于绑核数量和cpu绑核编码。cpu核的大小不同,对应的绑核数量和cpu绑核编码不同。其中,绑核参数涉及的参数类型可以根据相应的绑核函数确定,绑核数量和cpu绑核编码可以根据电子设备的实际硬件情况具体设定,本实施例对此不做具体限定。例如,与cpu小核对应的cpu绑核编码为1111 0000,与cpu中小核对应的
cpu绑核编码为1111 1110,与cpu中核对应的cpu绑核编码为0000 1110。
199.可选的,gc调控模块可以通过调整gc守护线程的cpu亲合力来实现对gc守护线程运行核的绑定。其中,cpu亲合力能够将一个或多个进程绑定到一个或多个处理器上运行。一个进程的cpu亲合力掩码(或称cpu绑核编码)决定了该进程将在哪个或哪几个cpu核上运行。
200.示例性的,gc调控模块可以采用函数sched_setaffinity(线程id,绑核数量,cpu绑核编码)作为绑核函数,来实现对gc守护线程的cpu亲合力的调整,也即实现对gc守护线程运行核的绑定。例如,若绑核策略为将gc守护线程的运行核调整为cpu小核,则在函数sched_setaffinity的参数中,线程id可以设置成gc守护线程的线程id,绑核数量可以设置成电子设备中cpu小核的数量,cpu绑核编码可以设置成与cpu小核对应的cpu绑核编码。gc调控模块运行该函数sched_setaffinity,即可实现将gc守护线程的运行核调整为cpu小核。
201.需要指出的是,gc守护线程运行核的调整会在下次gc发生前完成。进而,当下次gc发生时,gc守护线程会运行在调整后的cpu核上。
202.当视频应用运行产生的垃圾内存再次达到内存阈值时,art虚拟机会再次触发gc运行,此时s509~s517会被再次执行,以实现对gc守护线程运行核的动态调整。这样,即可实现根据监控统计到的信息动态阶梯式地逐步调整gc守护线程的运行核,gc守护线程会因为gc频繁或设备温度过高而运行在cpu小核上。而且,随着设备温度的降低,设备负载降低,gc守护线程也不再会受绑核的限制,以此提高gc效率。
203.为了验证上述虚拟机垃圾回收运行方法的有效性,可以将如图5和图6所示的虚拟机垃圾回收运行方法应用于手机中,分析手机应用该虚拟机垃圾回收运行方法前后的功耗变化。在本次验证中,选取今日头条、uc浏览器、微博、淘宝、拼多多等作为试验的应用程序在手机中运行,对应用该虚拟机垃圾回收运行方法前后手机功耗变化情况进行分析,分析结果如表1所示。其中,在验证时,无论是手机应用该虚拟机垃圾回收运行方法之前,还是手机应用该虚拟机垃圾回收运行方法之后,每个应用程序都运行3分钟,且在每个应用程序运行期间用户均每10s操作一下(如滑动一下)。为了提高验证结果的准确性,上述试验过程重复进行两次,并根据两次试验结果的平均值来分析应用该虚拟机垃圾回收运行方法前后手机的功耗变化。
204.表1
[0205][0206]
如表1所示,相比较手机应用该虚拟机垃圾回收运行方法之前,手机应用该虚拟机垃圾回收运行方法之后在每个应用程序运行时的功耗均有所降低。尤其是,今日头条和uc浏览器这两个应用程序运行时,手机应用该虚拟机垃圾回收运行方法之后的功耗降低更加明显。当应用程序运行时gc发生得越频繁,手机应用该虚拟机垃圾回收运行方法之后的功耗降低就更明显。
[0207]
如图7所示为电子设备的各模块的另一种交互示意图。参照图7,本技术提供的虚拟机垃圾回收运行方法的流程,具体包括:
[0208]
s701,虚拟机管理器响应于用户点击视频应用图标,创建art虚拟机。
[0209]
s702,art虚拟机程序启动,并启动gc守护线程。
[0210]
s703,art虚拟机向虚拟机管理器发送art虚拟机启动完成标识。
[0211]
s704,虚拟机管理器向视频应用发送art虚拟机身份标识。
[0212]
s705,视频应用运行在与接收到的art虚拟机身份标识对应的art虚拟机上。
[0213]
s706,art虚拟机监控视频应用运行产生的垃圾内存。
[0214]
s707,art虚拟机确定视频应用运行产生的垃圾内存达到内存阈值。
[0215]
s708,art虚拟机向gc运行模块发送触发信息。
[0216]
s709,gc运行模块向gc监控模块发送gc开始时间。
[0217]
s710,gc运行模块运行gc守护线程,并确定在gc守护线程运行时的中断程序时长。
[0218]
s711,gc运行模块在gc守护线程完成gc运行时,向gc监控模块发送gc结束时间。
[0219]
s712,gc运行模块向gc调控模块发送中断程序时长。
[0220]
s713,gc监控模块根据当次gc运行的gc开始时间和前一次gc运行的gc结束时间统计当次gc的运行间隔时长,并判断gc运行是否频繁。
[0221]
s714,gc监控模块向gc调控模块发送gc运行是否频繁的标识。
[0222]
s715,gc调控模块从温度服务中读取设备温度值。
[0223]
s716,gc调控模块根据设备温度值、gc运行是否频繁的标识以及中断程序时长,调整gc守护线程的绑核强度值。
[0224]
s717,gc调控模块向gc运行模块发送gc守护线程的绑核强度值。
[0225]
s718,gc运行模块根据gc守护线程的绑核强度值,调整gc守护线程的运行核。
[0226]
其中,如图7所示的流程与如图6所示的流程的区别在于,执行“调整gc守护线程的运行核”步骤的主体不同。
[0227]
在如图7所示的流程中,gc调控模块根据电子设备的温度值、gc运行是否频繁的标识以及中断程序时长,调整gc守护线程的绑核强度值,并将调整后的gc守护线程的绑核强度值发送给gc运行模块。进而,gc运行模块可以根据gc守护线程的绑核强度值,调整gc守护线程的运行核。由此,在本流程中是由gc运行模块执行“调整gc守护线程的运行核”的操作,而且gc守护线程是由gc运行模块运行的,故gc运行模块就无需将gc守护线程的线程id发送给gc调控模块。
[0228]
关于如图7所示的流程中未详细解释的步骤,可以参见对如图6所示流程中步骤的解释,在此不再赘述。如图7所示的流程与如图6所示的流程所能达到的技术效果也是一致的,在此也不再赘述。
[0229]
如图8所示为本技术实施例提供的一种虚拟机垃圾回收运行方法的流程示意图,参照图8,具体包括:
[0230]
s801,电子设备在垃圾回收gc守护线程每次完成gc运行时,获取本次gc运行的相关数据以及设备温度值。
[0231]
示例性的,gc运行的相关数据包括:gc运行开始时间和gc结束时间。
[0232]
s802,电子设备结合本次gc运行的相关数据,判断gc运行频繁情况。
[0233]
示例性的,电子设备根据本次gc运行的运行开始时间和前一次gc运行的运行结束时间,计算本次gc运行时的gc运行间隔时长。
[0234]
可选的,电子设备根据本次gc运行时的gc运行间隔时长,判断gc运行频繁情况。
[0235]
可选的,电子设备根据连续多次gc运行时的gc运行间隔时长,判断gc运行频繁情况;其中,连续多次gc运行包括本次gc运行。
[0236]
示例性的,在连续多次gc运行中,如果gc运行间隔时长低于预设间隔阈值的gc次数超过预设次数阈值,则电子设备判断出gc运行频繁。
[0237]
s803,电子设备根据设备温度值以及gc运行频繁情况,调整gc守护线程的运行核。示例性的,在设备温度值大于预设的温度阈值时,电子设备调整gc守护线程运行在电子设备中处理能效比最低的cpu核上,例如可以是cpu小核上。
[0238]
示例性的,在设备温度值小于等于预设的温度阈值时,如果gc运行频繁,则电子设备将gc守护线程由运行在第一cpu核上调整为运行在第二cpu核上;其中,第二cpu核的处理能效比低于第一cpu核的处理能效比。
[0239]
示例性的,在设备温度值小于等于预设的温度阈值时,如果gc运行不频繁,则电子设备将gc守护线程由运行在第一cpu核上调整为运行在第三cpu核上;其中,第三cpu核的处理能效比高于第一cpu核的处理能效比。
[0240]
在上述技术方案的基础上,电子设备还获取本次gc运行时的中断程序时长;其中,中断程序时长用于指示由gc守护线程向除gc守护线程之外的其它线程发送中断请求的时
刻,到gc守护线程向其它线程发送结束中断请求的时刻的时长;在设备温度值小于等于预设的温度阈值时,如果中断程序时长大于预设的时长阈值,则电子设备不对gc守护线程的运行核进行绑定。示例性的,如果gc守护线程的运行核已进行绑定,则取消对gc守护线程的运行核的绑定操作;如果gc守护线程的运行核未进行绑定,则维持gc守护线程的运行核未进行绑定的状态。
[0241]
可选的,电子设备调整所述gc守护线程的绑核强度值,并根据与调整后的绑核强度值对应的绑核策略,调整gc守护线程的运行核;其中,不同的绑核强度值对应不同的绑核策略;其中,绑核策略可以包括:将gc守护线程绑定在cpu小核上运行,将gc守护线程绑定在cpu中小核上运行,将gc守护线程绑定在cpu中核上运行,不对gc守护线程的运行核进行绑定。
[0242]
示例性的,电子设备增加gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第二cpu核上;电子设备减小gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第三cpu核上。
[0243]
示例性的,电子设备减小gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第二cpu核上;电子设增加gc守护线程的绑核强度值,以将gc守护线程由运行在第一cpu核上调整为运行在第三cpu核上。
[0244]
示例性的,电子设备重新设置gc守护线程的绑核强度值,以调整gc守护线程运行在所述电子设备中处理能效比最低的cpu核上,或者,不对gc守护线程的运行核进行绑定。
[0245]
作为以一种示例性的实施方式,当绑核强度值分别为0、1、2、3时,绑核策略依次为:将gc守护线程绑定在cpu小核上运行;将gc守护线程绑定在cpu中小核上运行;将gc守护线程绑定在cpu中核上运行;不对gc守护线程的运行核进行绑定。参照图6:电子设备在设备温度值大于预设的温度阈值时,将gc守护线程的绑核强度值重新设置为0;电子设备在设备温度值小于等于预设的温度阈值时,如果gc运行频繁,则减小gc守护线程的绑核强度值,如果gc运行不频繁,则增加gc守护线程的绑核强度值;电子设备在设备温度值小于等于预设的温度阈值时,如果中断程序时长大于预设的时长阈值,则将gc守护线程的绑核强度值重新设置为3。
[0246]
示例性的,在电子设备调整所述gc守护线程的绑核强度值之后,电子设备还检测调整后的所述gc守护线程的绑核强度值的合法性;其中,合法性指的是绑核强度值是否属于预设数值之一,若绑核强度值属于所述预设数值之一,则绑核强度值合法,否则绑核强度值不合法。在调整后的gc守护线程的绑核强度值不合法时,电子设备增加或减小gc守护线程的绑核强度值,以使再次调整后的gc守护线程的绑核强度值合法。
[0247]
本流程未尽详细解释之处可以参见前述实施例,在此不再赘述。
[0248]
本实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的虚拟机垃圾回收运行方法。
[0249]
本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的虚拟机垃圾回收运行方法。
[0250]
另外,本技术的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行
时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的虚拟机垃圾回收运行方法。
[0251]
其中,本实施例提供的电子设备(如手机)、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
[0252]
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0253]
在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0254]
以上所述,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1