WO2019071601A1 - 一种类卸载方法及电子设备 - Google Patents
一种类卸载方法及电子设备 Download PDFInfo
- Publication number
- WO2019071601A1 WO2019071601A1 PCT/CN2017/106154 CN2017106154W WO2019071601A1 WO 2019071601 A1 WO2019071601 A1 WO 2019071601A1 CN 2017106154 W CN2017106154 W CN 2017106154W WO 2019071601 A1 WO2019071601 A1 WO 2019071601A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- class
- mapping table
- relationship
- reference mapping
- classes
- Prior art date
Links
Images
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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44594—Unloading
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/46—Indexing scheme relating to G06F9/46
- G06F2209/462—Lookup
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/481—Exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
一种类卸载方法及电子设备,涉及电子技术领域,能够在应用运行过程中动态卸载类,提升可用内存空间。具体方案为:在应用启动后,电子设备加载n个类(201),n为正整数,生成引用映射表,引用映射表包括n个类与n个类对应的m个类对象之间的引用关系,以及n个类对应的m个类对象的依赖关系(202),依赖关系用于表示不同类对象之间相互依赖的映射关系,m为大于或者等于n的正整数,在应用运行过程中,根据引用映射表卸载n个类中的第一类(203)。
Description
本申请要求于2017年10月9日提交中国专利局、申请号为201710931802.8、申请名称为“一种个性化加载类加载器的方法和设备”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
本申请涉及电子技术领域,尤其涉及一种类卸载方法及电子设备。
在电子设备的系统启动阶段,被频繁使用的公用类可以通过全局加载的方式常驻内存,这样可以使得所有进程或应用(application)共享相同的类,从而节省内存。而事实上,并不是所有的类都被频繁使用或被很多应用公用,因而若所有的类都常驻内存,则将使得内存占用较大,从而无法达到节省内存的目的。
现有技术提供的方案可以在应用运行过程中根据需要动态加载类,以避免预先加载所有的类导致的内存占用增大的问题。例如,参见图1a,现有技术中提供的一种方案为,通过插件化技术将应用功能对应的类模块化、插件化,并在宿主应用需要时以插件形式加载相关的模块,从而实现类的按需加载。参见图1b,在现有技术提供的另一种方案中,根据开放服务网关协议(open service gateway initiative,OSGi)规范将应用分解成多个模块(bundle),每个模块对应相关的类、引用库以及运行时上下文等,这些模块由自己的类加载器(classloader)加载运行。当模块需要更新时,通过创建一个新的类加载器来加载更新后的模块。
但是,在现有技术提供的方案中,参见图2,加载后的类在应用关闭时被卸载,而在应用运行过程中,无论已经加载的类是否在运行都始终驻留在内存中,从而导致内存占用较大。
发明内容
本申请实施例提供一种类卸载方法及电子设备,能够在应用运行过程中动态卸载类,释放类占用的内存,从而提升系统可用内存。
为达到上述目的,本申请实施例采用如下技术方案:
第一方面,本申请实施例提供一种类卸载方法,包括:在应用启动后,电子设备加载n个类,n为正整数,并生成引用映射表。其中,引用映射表包括n个类与n个类对应的m个类对象之间的引用关系,以及n个类对应的m个类对象的依赖关系,依赖关系用于表示不同类对象之间相互依赖的映射关系,m为大于或者等于n的正整数。而后,在应用运行过程中,电子设备根据引用映射表卸载n个类中的第一类。
这样,电子设备可以在应用运行过程中根据引用映射表动态卸载类,并及时释放类占用的内存空间,提升系统可用内存。
结合第一方面,在一种可能的实现方式中,在电子设备根据引用映射表卸载n个
类中的第一类之前,该方法还包括:当从内存中清除m个类对象中的第一类对象时,若引用映射表中保存有第一类对象的引用关系,则电子设备从引用映射表中删除第一类对象的引用关系。若引用映射表中保存有第一类对象的引用关系和依赖关系,则电子设备从引用映射表中删除第一类对象的引用关系和依赖关系。
这样,可以使得引用映射表中保存的引用关系和依赖关系,与应用的运行过程中类和类对象的实时状态保持一致。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,电子设备根据引用映射表卸载n个类中的第一类包括:当第一类出现异常时,电子设备根据引用映射表卸载n个类中的第一类。
这样,电子设备可以在应用运行过程中确定第一类出现异常时,及时卸载第一类,以释放第一类占用的内存空间。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,电子设备根据引用映射表卸载n个类中的第一类包括:当检测到第一类对应的更新后的第二类时,电子设备根据引用映射表卸载n个类中的第一类。
这样,电子设备可以在应用运行过程中确定第一类有更新时,及时卸载第一类,并释放第一类占用的内存空间。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,在电子设备根据引用映射表卸载n个类中的第一类之后,该方法还包括:电子设备加载第二类。当创建第二类对应的第二类对象时,电子设备将第二类对象的引用关系,或者将第一类对象的引用关系和依赖关系保存至引用映射表中。
这样,电子设备可以在应用运行过程以更新后的第二类替换第一类,从而修复出现异常的第一类,或者实现对第一类的更新。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,电子设备根据引用映射表卸载n个类中的第一类包括:当引用映射表满足预设条件时,电子设备卸载第一类。其中,预设条件包括:引用映射表中的第一类对应的所有类对象的优先级小于或者等于第一预设阈值,引用映射表中的第一类对应的所有类对象依赖的类对象的优先级小于或者等于第二预设阈值。
这样,当引用映射表满足预设条件时,第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象的重要程度较低,电子设备可以将第一类卸载。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,该方法还可以包括将:电子设备从引用映射表中删除第一类对应的所有类对象的引用关系和依赖关系。
这样,当第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象的重要程度较低时,电子设备可以从引用映射表中删除第一类对应的所有类对象的引用关系和依赖关系,以使得引用映射表中保存的引用关系和依赖关系,与应用的运行过程中类和类对象的实时状态保持一致。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,电子设备根据引用映射表卸载n个类中的第一类包括:当引用映射表中不包括第一类对应的所有类对象的引用关系和依赖关系时,电子设备卸载第一类。
其中,当引用映射表中不包括第一类对应的所有类对象的引用关系和依赖关系时,第一类可能已经不再被使用,因而电子设备可以及时卸载第一类。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,当引用映射表中不包括第一类对应的所有类对象的引用关系和依赖关系时,电子设备卸载第一类包括:当引用映射表满足预设条件时,电子设备从引用映射表中删除第一类对应的所有类对象的引用关系和依赖关系,以使得引用映射表中不包括第一类对应的所有类对象的引用关系和依赖关系,电子设备卸载第一类。
这样,当满足预设条件时,第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象的重要程度较低,电子设备可以卸载第一类。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,当引用映射表满足预设条件时,该方法还包括:电子设备从内存中清除第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象。
这样,当满足预设条件时,第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象的重要程度较低,电子设备可以从内存中清除第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,当引用映射表中的第一类对应的第三类对象正在前台运行时,第三类对象的优先级大于第一预设阈值;当第三类对象依赖的类对象正在前台运行时,第三类对象依赖的类对象的优先级大于第二预设阈值。
这样,当第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象不在前台运行时,才可以卸载第一类。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,在电子设备生成引用映射表之后,该方法还包括:当应用关闭时,电子设备删除引用映射表。
这样,电子设备在确定应用关闭时,删除与该应用对应的引用映射表,从而清除该应用运行过程中创建的类对象的引用依赖关系,节省电子设备的存储空间。
第二方面,本申请实施例提供一种电子设备,包括:加载单元,用于在应用启动后,加载n个类,n为正整数。生成单元,用于生成引用映射表。其中,引用映射表包括n个类与n个类对应的m个类对象之间的引用关系,以及n个类对应的m个类对象的依赖关系,依赖关系用于表示不同类对象之间相互依赖的映射关系,m为大于或者等于n的正整数。卸载单元,用于在应用运行过程中,根据引用映射表卸载n个类中的第一类。
结合第二方面,在一种可能的实现方式中,电子设备还包括:删除单元,用于在卸载单元根据引用映射表卸载n个类中的第一类之前,当从内存中清除m个类对象中的第一类对象时,若引用映射表中保存有第一类对象的引用关系,则从引用映射表中删除第一类对象的引用关系。若引用映射表中保存有第一类对象的引用关系和依赖关系,则从引用映射表中删除第一类对象的引用关系和依赖关系。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,卸载单元具体用于:当第一类出现异常时,根据引用关系卸载第一类。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,卸载单元具
体用于:当检测到第一类对应的更新后的第二类时,根据引用映射表卸载n个类中的第一类。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,加载单元还用于:在卸载单元根据引用映射表卸载n个类中的第一类之后,加载第二类。当创建第二类对应的第二类对象时,将第二类对象的引用关系,或者将第一类对象的引用关系和依赖关系保存至引用映射表中。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,卸载单元具体用于:当引用映射表中不包括第一类对应的所有类对象的引用关系和依赖关系时,卸载第一类。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,卸载单元具体用于:当引用映射表满足预设条件时,从引用映射表中删除第一类对应的所有类对象的引用关系和依赖关系,以使得引用映射表中不包括第一类对应的所有类对象的引用关系和依赖关系,卸载第一类。其中,预设条件包括:引用映射表中的第一类对应的所有类对象的优先级小于或者等于第一预设阈值,引用映射表中的第一类对应的所有类对象依赖的类对象的优先级小于或者等于第二预设阈值。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,删除单元还用于:当引用映射表满足预设条件时,从内存中清除第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,当引用映射表中的第一类对应的第三类对象正在前台运行时,第三类对象的优先级大于第一预设阈值;当第三类对象依赖的类对象正在前台运行时,第三类对象依赖的类对象的优先级大于第二预设阈值。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,删除单元还用于:在生成单元生成引用映射表之后,当应用关闭时,删除引用映射表。
第三方面,本申请实施例提供一种电子设备,包括:一个或多个处理器和一个或多个存储器。一个或多个存储器与一个或多个处理器耦合,一个或多个存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当一个或多个处理器执行计算机指令时,电子设备执行如第一方面任一项的类卸载方法。
第四方面,本申请实施例提供一种计算机存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行如第一方面任一项的类卸载方法。
第五方面,本申请实施例提供一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行如第一方面任一项的类卸载方法。
其中,关于上述第二方面至第五方面的有益效果可以参见上述第一方面中的描述,这里不再赘述。
图1a为本申请实施例提供的一种类加载示意图;
图1b为本申请实施例提供的另一种类加载示意图;
图2为本申请实施例提供的一种类卸载时序图;
图3为本申请实施例提供的一种手机的结构示意图;
图4a本申请实施例提供的一种方法流程图;
图4b为本申请实施例提供的一种类卸载时序图;
图5为本申请实施例提供的另一种方法流程图;
图6为本申请实施例提供的另一种方法流程图;
图7为本申请实施例提供的另一种方法流程图;
图8为本申请实施例提供的另一种方法流程图;
图9为本申请实施例提供的另一种方法流程图;
图10为本申请实施例提供的一种场景示意图;
图11为本申请实施例提供的一种场景示意图;
图12为本申请实施例提供的另一种场景示意图;
图13为本申请实施例提供的一种电子设备的结构示意图。
为了便于理解,示例的给出了部分与本申请实施例相关概念的说明以供参考。如下所示:
类(class):是java等程序语言中一种用户定义类型,也称类类型,每个类包含数据说明和一组操作数据或传递消息的函数。
类对象:指类的实例。
引用:编程中将函数实例化的一种方式,例如,类对象是类的一个引用。
依赖关系:如果一个类对象的元素改变了,那么另一个类对象也随之改变,则该类对象与另一个类对象之间存在依赖关系,另一个类对象依赖该类对象。例如,一个类对象使用另一个类对象作为操作的参数,或者一个类对象用另一个类对象作为它的数据成员,或者一个类对象向另一个类对象发消息等,这样的两个类对象之间都存在依赖关系。
安装包:是可自行解压缩文件的集合,例如可以是安卓安装包(androidpackage,apk),其中包括应用安装的所有文件。运行这个安装包,可以将此软件的所有文件释放到电子设备硬盘上,从而在电子设备上运行应用。
在现有技术提供的方案中,由于加载后的类在应用关闭时被卸载,而在应用运行过程中,则无论已经加载的类是否在运行都始终驻留在内存中,从而导致内存占用较大。本申请实施例提供的类卸载方法及电子设备,可以在应用运行过程中,根据已经加载的类与类对象之间的映射关系,以及已创建的类对象之间的依赖关系,动态卸载已经加载的类,从而可以在类卸载之后及时释放类占用的内存,以节省电子设备的内存。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
需要说明的是,本申请实施例提供的设备可以为可以支持应用运行的电子设备,例如可以是终端或服务器等。其中,当电子设备为终端时,电子设备具体可以为手机、平板电脑、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)等设备。
具体的,本申请实施例以手机为例,对本申请实施例提供的电子设备进行介绍。如图3所示,手机10可以包括:显示器11、处理器12、存储器13、电源14、射频(radio frequency,RF)电路15、重力传感器16、音频电路17、扬声器18、麦克风19等部件,这些部件之间可以以总线连接,也可以直连连接。本领域技术人员可以理解,图3中示出的手机结构并不构成对手机的限定,可以包括比图示更多的部件,或者组合某些部件,或者不同的部件布置。
其中,显示器11可用于显示由用户输入的信息或提供给用户的信息,以及手机的各种菜单,还可以接受用户的输入操作。具体的,显示器11可以包括显示面板111以及触控面板112。
显示面板111可以采用液晶显示器(liquid crystal display,LCD)、有机发光二极管(organic light-emitting diode,OLED)等形式来配置。
触控面板112,也可以称为触摸屏、触敏屏、触控屏等,可收集用户在其上或附近的接触或者非接触操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板112上或在触控面板112附近的操作,也可以包括体感操作;该操作包括单点控制操作、多点控制操作等操作类型),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板112可以包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位、姿势,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信号,并将接收到的触摸信号转换成处理器12能够处理的信息,然后将该信息送给处理器12,并能接收处理器12发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板112,也可以采用未来发展的任何技术实现触控面板112,本申请实施例对此不进行限定。
进一步的,触控面板112可覆盖显示面板111,用户可以根据显示面板111显示的内容(该显示的内容包括以下任意一种或多种的组合:软键盘、虚拟鼠标、虚拟按键、图标等等),在显示面板111上覆盖的触控面板112上或者附近进行操作。触控面板112检测到在其上或附近的操作后,通过输入/输出子系统传送给处理器12以确定用户输入,随后处理器12根据用户输入通过输入/输出子系统在显示面板111上提供相应的视觉输出。虽然在图3中,触控面板112与显示面板111是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板112与显示面板111集成而实现手机的输入和输出功能。
处理器12是手机10的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器13内的软件程序和/或模块,以及调用存储在存储器13内的数据,执行手机10的各种功能和处理数据,从而对手机10进行整体监控。在具体实现中,作为一种实施例,处理器12可包括一个或多个处理单元;处理器12可集成应用处理器和调制解调处理器。其中,应用处理器主要处理操作系统、用户界面和
应用等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器12中。
存储器13可用于存储数据、软件程序以及模块,可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);或者非易失性存储器(non-volatile memory),例如只读存储器(read-only memory,ROM),快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);或者上述种类的存储器的组合。
电源14,可以为电池,通过电源管理系统与处理器12逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
RF电路15可用于收发信息或通话过程中,信号的接收和发送,特别地,将接收到的信息给处理器12处理;另外,将处理器12生成的信号发送出去。通常,RF电路包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(low noise amplifier,LNA)、双工器等。此外,RF电路15还可以通过无线通信与网络和其他设备通信。
重力传感器(gravity sensor)16,可以检测手机在各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等。需要说明的是,手机10还可以包括其它传感器,比如压力传感器、光传感器、陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路17、扬声器18、麦克风19可提供用户与手机10之间的音频接口。音频电路17可将接收到的音频数据转换后的电信号,传输到扬声器18,由扬声器18转换为声音信号输出;另一方面,麦克风19将收集的声音信号转换为电信号,由音频电路17接收后转换为音频数据,再将音频数据输出至RF电路15以发送给比如另一手机,或者将音频数据输出至处理器12以便进一步处理。
尽管未示出,手机10还可以包括无线保真(wireless fidelity,WiFi)模块、蓝牙模块、摄像头等功能模块,在此不再一一赘述。
具体的,以下将结合图3所示的手机10,对本申请实施例提供的类卸载方法及电子设备进行详细说明。需要说明的是,本申请实施例所提供的电子设备也可以是除图3所示手机之外的其他任一电子设备。
本申请实施例提供一种类卸载方法,参见图4a,该方法主要可以包括:
201、在应用启动后,手机加载n个类,n为正整数。
其中,这里的应用可以是手机的系统应用,也可以是第三方应用;可以是手机自带的应用,也可以是通过安装包运行的应用。例如,本申请实施例中的应用具体可以为微信、视频播放器、浏览器或淘宝等。应用启动后是指应用开始启动的时刻之后,包括应用启动的过程。在应用启动后,手机可以在应用运行过程中的不同阶段,根据运行需求动态加载多个类。例如,手机可以根据图1a或图1b所示的方式加载n个类。
202、手机生成引用映射表,引用映射表包括n个类与n个类对应的m个类对象之间的引用关系,以及n个类对应的m个类对象的依赖关系,依赖关系用于表示不同类对象之间相互依赖的映射关系,m为正整数。
在应用启动后,手机可以根据运行需求,通过加载器加载类。在加载一个类之后,手机可以在该类的基础上创建一个或多个该类的类对象,也可以称为该类的引用或实例。
并且,在应用启动后,手机可以生成并维护一个与该应用对应的引用映射表,该引用映射表中可以保存有手机加载的n个类与n个类对应的m个类对象之间的引用关系,以及n个类对应的m个类对象的依赖关系。其中,该引用映射表中包括的类为该应用运行过程中加载的类,该引用映射表中包括的类对象为该应用运行过程中创建的类对象。
具体的,对于n个类中的每一个类,该引用映射表中可以保存有该类的引用关系,即该类与该类对应的已经创建的所有类对象之间的引用关系。对于m个类对象中的每一个类对象,该引用映射表中可以保存有该类对象的引用关系,即该类对象与该类对象对应的类之间的引用关系,该引用映射表中还可以保存有该类对象的依赖关系,该类对象的依赖关系为该类对象与该类对象依赖的类对象的映射关系。其中,一个类的引用关系包括该类对应的所有类对象的引用关系。
示例性的,当应用启动后生成的引用映射表为如下表1时,类a的引用关系可以包括编号1-编号2中包括的引用关系;类对象A1的引用关系为编号1对应的引用关系。
需要说明的是,这里的依赖关系可以仅包括直接依赖关系,也可以包括直接依赖关系和间接依赖关系。其中,直接依赖关系是指,一个类对象与该类对象直接依赖的类对象之间的映射关系;间接依赖关系是指,一个类对象与该类对象间接依赖的类对象之间的映射关系。示例性的,当类对象A1依赖类对象B1,类对象B1依赖类对象C1时,类对象A1与类对象B1之间具有直接依赖关系,类对象A1与类对象C1之间具有间接依赖关系。示例性的,当依赖关系仅包括直接依赖关系时,引用映射表可以参见如下表1;当依赖关系包括直接依赖关系和间接依赖关系时,引用映射表可以参见如下表2。
表1
引用关系 | 依赖关系 | 编号 |
类a-类对象A1 | 类对象A1-类对象B1、类对象C1 | 1 |
类a-类对象A2 | 类对象A1-类对象C2 | 2 |
类b-类对象B1 | 类对象B1-类对象C3 | 3 |
类c-类对象C1 | 4 | |
类c-类对象C2 | 5 | |
类c-类对象C3 | 6 |
表2
需要注意的是,虽然表1中表示的依赖关系时直接依赖关系,但从表1所表示的直接依赖关系中,手机也可以通过计算或查找等处理得到间接依赖关系。其中,当引用映射表中仅保存直接依赖关系时,可以节省手机的存储空间。
具体的,手机可以通过监控应用的运行状态(例如启动或关闭等),在应用启动后生成该引用映射表,也可以在应用启动后创建一个类对象(或加载一个类)时,生成该引用映射表。并且,在应用启动后,当每创建一个类对象时,手机可以将该类对象与类的引用关系保存至引用映射表中;若该类对象依赖其它类对象,则手机还可以将该类对象的依赖关系保存在引用关系表中。
这样,手机可以通过引用映射表保存已加载的类与已创建的类对象之间的引用关系,以及已创建的类对象与类对象之间的依赖关系,并且引用映射表中保存的引用关系和依赖关系是动态变化的,与应用的运行过程中类和类对象的实时状态保持一致。
203、在应用的运行过程中,手机根据引用映射表卸载n个类中的第一类。
其中,这里的第一类为映射关系表中包括的n个类中的任意一个类。在步骤203中,手机可以根据步骤202中的引用映射表保存的已加载的类与已创建的类对象之间的引用关系,以及已创建的类对象与类对象之间的依赖关系,在应用运行过程中动态卸载已加载的类,即手机可以根据引用映射表中类和类对象的实时状态卸载类,从而及时释放被卸载的类占用的内存。
因而,与现有技术中需要等到应用关闭后才能卸载类,并释放类占用的内存空间相比,本申请实施例提供的类卸载方法,可以在应用运行过程中动态卸载类,并及时释放类占用的内存空间,从而提升系统可用内存。
并且,在本申请实施例中,手机可以通过类加载器提供一个卸载接口,当需要根据引用映射表卸载一个类时,手机可以通过类加载器提供的卸载接口卸载该类。
进一步地,参见图5,在步骤203之前,该方法还可以包括:
204、当从内存中清除m个类对象中的第一类对象时,若引用映射表中保存有第一类对象的引用关系,则手机从引用映射表中删除第一类对象的引用关系,若引用映射表中保存有第一类对象的引用关系和依赖关系,则手机从引用映射表中删除第一类对象的引用关系和依赖关系。
其中,第一类对象的引用关系用于表示第一类对象与第一类之间的映射关系;第一类对象的依赖关系用于表示第一类对象与第一类对象依赖的类对象之间的映射关系。
由于系统(例如安卓操作系统)的内存释放机制或其它原因,应用运行过程中已
创建的类对象可能会被清除。例如,系统可以根据预设的时间间隔,查找是否可以从内存中清除一个或多个已创建的类对象,或者系统可以在内存不足时,查找是否可以从内存中清除一个或多个已创建的类对象。
当从内存中清除m个类对象中的一个类对象时,若引用映射表中保存有第一类对象的引用关系,则手机可以从引用映射表中删除第一类对象的引用关系,若引用映射表中保存有第一类对象的引用关系和依赖关系,则手机从引用映射表中删除第一类对象的引用关系和依赖关系,从而对引用映射表进行更新,以使得引用映射表中保存的引用关系和依赖关系,与应用的运行过程中类和类对象的实时状态保持一致。在该种情况下,手机可以在步骤203中根据更新后的引用映射关系表卸载上述n个类中的任意一个类。
示例性的,以表1中的类对象C1为例,由于类对象C1不依赖其它类对象,因而引用映射表中仅保存有类对象C1的引用关系,不包括类对象C1的依赖关系。当由于系统内存释放机制的作用等原因,使得类对象C1从内存中被清除时,手机可以从引用映射表中删除类对象C1的引用关系。
具体的,参见图6,在上述步骤203中,手机根据引用映射表卸载n个类中的第一类可以包括:
205、当引用映射表中不包括第一类对应的所有类对象的引用关系和依赖关系时,手机卸载第一类。
由于引用映射表中保存的引用关系和依赖关系与应用的运行过程中类和类对象的实时状态保持一致,因而当引用映射表中不包括第一类对应的所有类对象的引用关系和依赖关系时,第一类对象对应的所有类对象可能已经从内存中清除了,因而手机可以将第一类卸载。
在一种具体的实现方式中,参见图6,上述步骤205可以包括:
206、当引用映射表满足第一预设条件时,手机从引用映射表中删除第一类对应的所有类对象的引用关系和依赖关系,以使得引用映射表中不包括第一类对应的所有类对象的引用关系和依赖关系。
其中,第一预设条件可以包括:引用映射表中的第一类对应的所有类对象的优先级小于或者等于第一预设阈值,引用映射表中的第一类对应的所有类对象依赖的类对象的优先级小于或者等于第二预设阈值。
207、手机卸载第一类。
其中,类对象的优先级可以用于表示类对象的重要程度,当引用映射表中的第一类对应的所有类对象的优先级小于或者等于第一预设阈值,且引用映射表中的第一类对应的所有类对象依赖的类对象的优先级小于或者等于第二预设阈值时,可以说明引用映射表中的第一类对应的所有类对象的重要程度较低(例如不再被使用,或长时间未被使用等),且第一类对应的所有类对象依赖的类对象的重要程度也较低,此时,手机可以从引用映射表中删除第一类对应的所有类对象的引用关系和依赖关系,并卸载重要程度较低的第一类。
需要说明的是,在步骤206中,第一预设阈值与第二预设阈值可以相同也可以不
同。当引用映射表中的第一类对应多个类对象时,不同类对象可以对应一个第一预设阈值的数值也可以对应不同第一预设阈值的数值,即第一预设阈值具体可以包括一个数值也可以包括多个数值。类似的,当引用映射表中的第一类对应的所有类对象依赖的类对象包括多个时,第二预设阈值具体也可以包括一个数值或包括多个数值。并且,在应用运行的不同阶段,第一预设阈值或第二预设阈值的具体数值也可以发生变化。
其中,优先级具体可以根据预设的业务策略进行划分。例如,在一种划分方式中,前台类对象的优先级可以高于后台类对象的优先级;在另一种情况下,使用频率高的类对象的优先级可以高于使用频率低的类对象的优先级;在另一种情况下,较长时间段内未被使用的类对象的优先级可以高于较短时间段内未被使用的类对象的优先级;在另一种情况下,被更多类对象依赖的类对象的优先级可以高于被更少类对象依赖的类对象的优先级。具体的,优先级可以通过多种方式来表示,例如可以通过等级来表示,或者可以根据预设打分机制通过分数来表示等。
在一种实现方式中,当引用映射表中的第一类对应的第三类对象正在前台运行时,该第三类对象的优先级大于第一预设阈值;当第三类对象依赖的类对象正在前台运行时,第三类对象依赖的类对象的优先级高于第二预设阈值。也就是说,在该种实现方式中,当引用映射表中的第一类对应的类对象正在前台运行或者,第一类对应的类对象依赖的类对象正在前台运行时,第一类不能被卸载,否则可能导致前台运行程序出错,从而影响用户使用。
举例来说,当第一类为类a时,在表1所示的情况下,当类a对应的类对象A1和类对象A2的优先级小于或者等于第一预设阈值,以及类对象A1和类对象A2依赖的类对象B1、类对象C1和类对象C2的优先级小于或者等于第二预设阈值时,手机可以卸载类a。
值得说明的是,手机在确定引用映射表是否满足第一预设条件时,与采用表1所示的引用映射表相比,采用表2所示的引用映射表可以更为快速地查找并第一类对应的类对象直接依赖和间接依赖的所有类对象,并确定被依赖的类对象的优先级,从而提高类卸载效率,降低处理时延。
进一步地,当引用映射表满足第一预设条件时,该方法还可以包括:
208、手机从内存中清除第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象。
当引用映射表满足第一预设条件时,手机可以从内存中清除第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象,从而释放第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象所占用的空间,从而节省系统内存。
需要说明的是,在引用映射表满足第一预设条件时,上述步骤206、步骤207和步骤208没有明确的先后关系。手机在步骤206中从引用映射表中删除第一类对应的所有类对象的引用关系和依赖关系时,通过在步骤208中从内存中清除第一类对应的所有类对象和第一类对应的所有类对象依赖的类对象,可以使得引用映射表中保存的引用关系和依赖关系与应用的运行过程中类和类对象的实时状态保持一致。
具体的,在步骤206和步骤208中,手机可以在第一类对应的第一类对象的优先
级小于或者等于第一预设阈值,且第一类对象依赖的类对象的优先级小于或者等于第二预设阈值时,将第一类对象和第一类对象依赖的类对象从内存中清除,并删除第一类对象的依赖关系。
举例来说,当第一类为类a,引用映射表为表1所示的情况时,手机可以根据类对象A1-类对象B1和类对象C1-类对象C2的顺序确定类对象的优先级。例如,若第一预设阈值和第二预设阈值相等且均为60分,则手机可以首先确定类对象A1的优先级是否小于或者等于60分,若类对象A1的优先级大于60分,则类对象A1不能从内存中清除,第一类不能被卸载;若类对象A1的优先级小于或者等于60分,则确定类对象A1直接依赖的类对象B1和类对象C1是否小于或者等于60分;若类对象B1和类对象C1大于60分,则第一类不能被卸载;若类对象B1和类对象C1小于或者等于60分,则当类对象A1间接依赖的类对象C3(类对象C3也是类对象B1直接依赖的类对象)的优先级大于60分时,第一类不能被卸载;当类对象A1间接依赖的类对象C3小于或者等于60分,手机可以清除类对象A1、类对象B1和类对象C3,删除类对象A1的依赖关系以及类对象A1与类a的引用关系。
与清除类对象A1的过程类似,手机可以清除类对象A2,并删除类对象A2的依赖关系以及类对象A2与类a的引用关系。
由于引用映射表中,类a对应的所有类对象包括类对象A1和类对象A2,当类对象A1的引用关系和依赖关系,以及类对象A2的引用关系和依赖关系均被删除时,即表1中编号1和编号2对应的两行被删除时,引用映射表中不包括类a对应的所有类对象的引用关系和依赖关系,此时手机可以将类a卸载。其中,删除类对象A1的引用关系和依赖关系,以及类对象A2的引用关系和依赖关系之后的引用映射表可以参见表3。
此外,在步骤205的一种情况中,当第一类对应的所有类对象均不依赖其它类对象时,引用映射表中可以包括第一类的引用关系,但不包括第一类对应的类对象的依赖关系。在该种情况下,当第一类对应的所有类对象从内存中清除,从而使得第一类的引用关系被删除时,引用映射表中不包括第一类的引用关系和依赖关系,因而手机可以卸载第一类。
其中,当由于系统内存释放机制的作用等原因使得第一类对应的所有类对象从内存中清除时,第一类可能不再被使用了,因而手机可以将第一类卸载。
举例来说,当第一类为表1中的类c时,类c对应的所有类对象不依赖其它类对象,因而引用映射表中仅保存有类c对应的类对象的引用关系,不包括类c对应的类对象的依赖关系。当由于系统内存释放机制的作用等原因,使得类c对应的类对象C1、类对象C2和类对象C3从内存中被清除时,手机可以从引用映射表中删除类c的引用关系,以使得引用映射表中不包括类c的引用关系和依赖关系,从而卸载类c。
在另一种实现方式中,虽然附图未示出,但手机在上述步骤203中根据引用映射表卸载n个类中的第一类可以包括:
209、当引用映射表满足第一预设条件时,手机卸载第一类。
210、手机从引用映射表中删除第一类对应的所有类对象的引用关系和依赖关系。
在步骤209和步骤210中,当引用映射表满足第一预设条件时,可以说明第一类对应的类对象的优先级较低、重要程度较低,且第一类对应的类对象依赖的类对象的优先级和重要程度也较低,因而手机可以卸载第一类,并从引用映射表中删除第一类对应的所有类对象的引用关系和依赖关系。
进一步地,参见图7,在上述步骤202之后,本申请实施例提供的方法还可以包括:
211、当应用关闭时,手机删除引用映射表。
手机可以通过监控应用的运行状态,在确定应用关闭当应用关闭时,删除与该应用对应的引用映射表,从而清除该应用运行过程中创建的类对象的引用关系和依赖关系,节省手机的存储空间。
因此,参见图8,本申请实施例提供的方法可以通过监控应用的运行状态生成引用映射表,并根据引用映射表动态加载或卸载类,或者删除引用映射表。
在上述步骤203中,手机具体可以在满足第二预设条件时,根据引用映射表卸载n个类中的第一类。
例如,附图虽未示出,但在一种情况下,在应用运行过程中,步骤203可以包括:
301、当第一类出现异常时,手机根据引用关系卸载第一类。
在另一种情况下,在应用运行过程中,步骤203可以包括:
302、当检测到第一类对应的更新后的第二类时,手机根据引用映射表卸载n个类中的第一类。
需要注意的是,除了步骤301或步骤302所描述的第二预设条件以外,手机还可以在满足其它预设条件时根据引用映射表卸载n个类中的第一类,例如当应用在后台运行的时间大于或者等于预设时长时卸载第一类等,本申请实施例不作具体限定。
另外,需要说明的是,在步骤301-302中,手机根据引用映射表卸载n个类中的第一类,具体可以根据上述步骤205,或步骤206-步骤208,或步骤209-210实现。
进一步地,在步骤301或步骤302之后,该方法还可以包括:
303、手机加载第二类。
304、当创建第二类对应的第二类对象时,手机将第二类对象的引用关系,或者将第一类对象的引用关系和依赖关系保存至引用映射表中。
其中,当创建第二类对应的第二类对象时,手机可以将第二类对象的引用关系,保存至引用映射表中。若第二类对象依赖其它类对象,则手机还可以将第二类对象的依赖关系保存至引用映射表中。这样,可以使得引用映射表中保存的引用关系和依赖关系与应用的运行过程中类和类对象的实时状态保持一致,从而使得手机可以根据引用映射表中类和类对象的实时状态卸载类。
参见图9,当上述步骤203具体通过步骤209-210实现时,在上述步骤301、步骤303和步骤304描述的场景中,手机可以通过应用层监控应用运行状态,确定应用运行过程中的第一类发生异常时,调用类加载器提供的类卸载接口,以使得手机可以根据引用映射表通过步骤203尝试卸载第一类。若第一类不满足步骤205中的条件,也
不满足步骤206-步骤208中的条件,则手机不能成功卸载第一类。若第一类满足步骤205中的条件,或者第一类满足步骤206-步骤208中的条件,则手机可以成功卸载第一类。
并在第一类卸载成功后,在应用运行过程中加载第一类更新后的第二类,该第二类为第一类修复后的类,并且,当创建第二类对应的第二类对象时,手机将第二类对象的引用关系,或者将第一类对象的引用关系和依赖关系保存至引用映射表中,从而可以实现在应用运行过程中快速、精准的代码热替换和热修复,使得应用运行过程中第一类的功能恢复正常。其中,第二类与第一类可以具有预设的关联关系,以便于手机检测与第一类对应的第二类。示例性的,第二类可以与第一类的标识相同,但存储位置不同。
或者,在上述步骤301、步骤303和步骤304描述的场景中,步骤301还可以包括当第一类出现异常,且检测到第一类对应的更新后的第二类时,手机可以根据引用映射表卸载n个类中的第一类。也就是说,在手机确定应用运行过程中的第一类发生异常,且检测到手机中保存有第一类更新后的第二类,即开发人员对第一类修复后的第二类时,可以根据引用映射表通过步骤203尝试卸载第一类。
具体的,在本申请实施例中,手机可以在确定应用运行过程中的第一类发生异常时,向服务器请求下载第一类更新后的第二类;或者,手机可以周期性地从服务器获取多个更新后的类,或者接收服务器推送的多个更新后的类,该多个更新后的类可以包括第一类更新后的第二类。
需要说明的是,由于更新包的代码量很大,当应用存在或可能存在某些问题,导致在运行过程中出现逻辑异常甚至崩溃等状况,但该问题的影响不足以发布一个系统更新包来修复,例如当该应用中的一个类出现异常时,本申请实施例通过从服务器获取第二类,并将第二类替换第一类,可以实现对第一类的修复或更新。由于一个类的代码量很小,因而获取第二类需要的流量较小、速度较快,且将第二类替换第一类的处理效率也较高。
示例性的,参见图10,在微信运行过程中,当08:08聊天界面上输入文字的类出现问题使得用户无法输入文字时,用户可以暂时不输入文字,例如用户可以先去刷朋友圈,或者也可以输入语音或查看聊天记录等。在不关闭微信的情况下,经过一段时间后,例如在08:15用户可以正常在聊天界面输入文字。这是由于,在输入语音,刷朋友圈,或查看聊天记录的时候,手机可以卸载在聊天界面输入文字对应的类,并加载修复后的类,从而在用户无感知的情况下,快速修复无法查看弹幕的问题。
示例性的,参见图11,在视频播放器播放视频的过程中,当用户查看弹幕时弹幕无法显示,用户可以暂时关闭查看弹幕的按钮,在观看一会视频后,用户可以正常查看弹幕。这是由于,在用户暂时不查看弹幕的时候,手机可以卸载查看弹幕对应的类,并加载修复后的类,从而在用户无感知的情况下,快速修复无法查看弹幕的问题。
与上述步骤301、步骤303和步骤304描述的场景类似,在上述步骤302、步骤303和步骤304描述的场景中,手机可以在检测到第一类对应的更新后的第二类时,尝试卸载第一类。并在第一类卸载成功后,在应用运行过程中加载第一类更新后的第二类,当创建第二类对应的第二类对象时,手机将第二类对象的引用关系,或者将第
一类对象的引用关系和依赖关系保存至引用映射表中,从而实现在应用运行过程中快速、精准的代码热替换,使得对应用运行过程中第一类的功能进行更新。其中,第二类与第一类可以具有预设的关联关系,以方便手机根据第一类检测对应的第二类。示例性的,第二类可以与第一类的标识相同,但存储位置不同。
在上述步骤302、步骤303和步骤304描述的场景中,手机可以周期性地从服务器获取多个更新后的类,或者接收服务器推送的多个更新后的类,该多个更新后的类可以包括第一类更新后的第二类。
当需要更新应用中的一个类时,本申请实施例通过从服务器获取第二类,并将第二类替换为第一类,可以实现对第一类的更新。由于一个类的代码量很小,因而与采用代码量较大的更新包进行类更新相比,获取第二类需要的流量较小、速度较快,且将第二类替换第一类的处理效率也较高。
在一种可能的场景中,手机通过apk运行应用,在本申请实施例提供的方法中,当手机检测到应用内部某个功能模块对应的类的重要程度较低(例如该类不再被使用或长时间段内未被使用)时,手机可以自动卸载这个类,并释放这个类占用的内存,从而可以提升系统可用内存,提高用户使用体验。
当用户使用的某个功能模块出现紧急问题时,动态卸载出问题的模块对应的类,并且可以使得用户在不用重启apk的情况下,在后台自动替换模块,从而实现用户无感知的热修复。
示例性的,参见图12,在微信运行过程中,当用户间隔一段时间后在聊天界面再次接收到消息时,发现消息内容框旁边中多了一个小天使的标识,这样可以提升用户使用感受。这可能是由于在用户未接收消息的时间段内,手机对显示消息内容的类进行了更新。
此外,在本申请实施例中,在应用关闭后,手机还可以卸载该应用对应的所有的类。
可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对电子设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图13示出了上述和实施例中涉及的电子设备40的一种可能的组成示意图,如图13所示,该电子设备40可以包括加载单元41、生成单元42和卸载单元43。其中,加载单元41可以用于在应用启动后,加载n个类,n为正整数。生成单元42,可以用于生成引用映射表,引用映射表包括
n个类与n个类对应的m个类对象之间的引用关系,以及n个类对应的m个类对象的依赖关系,依赖关系用于表示不同类对象之间相互依赖的映射关系,m为大于或者等于n的正整数。卸载单元43,可以用于在应用运行过程中,根据引用映射表卸载n个类中的第一类。
进一步地,电子设备40还可以包括删除单元44,可以用于支持电子设备40执行上述方法实施例中的步骤204和步骤211。
此外,加载单元41还可以用于支持电子设备40执行上述方法实施例中的步骤303和步骤304,卸载单元43还可以用于支持电子设备40执行上述方法实施例中的步骤205、步骤206、步骤207、步骤208、步骤209、步骤210,以及步骤301和步骤302。加载单元41、生成单元42、卸载单元43和删除单元44,还可以用于本文所描述的技术的其它过程。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
当然,电子设备包括但不限于上述所列举的单元模块,例如,电子设备还可以包括存储单元,该存储单元用于保存电子设备的程序代码和相关数据,如演示内容片段的索引与功能的标识的关联关系等。电子设备还可以包括通信单元,该通信单元可以包括用于向其他设备发送数据或者信号的发送单元,接收其他设备发送数据或者信号的接收单元等。并且,上述功能单元的具体所能够实现的功能也包括但不限于上述实例的方法步骤对应的功能,电子设备的其他单元的详细描述可以参考其所对应方法步骤的详细描述,本申请实施例这里不再赘述。
其中,图13中的加载单元41、生成单元42、卸载单元43和删除单元44可以是处理器或控制器,例如可以是中央处理器(central processing unit,CPU),通用处理器,数字信号处理器(digital signal processor,DSP),专用集成电路(application-specific integrated circuit,ASIC),现场可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。存储单元可以是存储器。通信单元可以是收发器、RF电路或通信接口等。
当图13中的加载单元41、生成单元42、卸载单元43和删除单元44为处理器,通信模块为RF电路,存储单元为存储器时,本申请实施例所提供的电子设备可以为图3所示的手机。其中,上述通信单元还可以包括WiFi模块和蓝牙模块。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。
另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (24)
- 一种类卸载方法,其特征在于,包括:在应用启动后,加载n个类,n为正整数;生成引用映射表,所述引用映射表包括所述n个类与所述n个类对应的m个类对象之间的引用关系,以及所述n个类对应的m个类对象的依赖关系,所述依赖关系用于表示不同类对象之间相互依赖的映射关系,m为大于或者等于n的正整数;在所述应用运行过程中,根据所述引用映射表卸载所述n个类中的第一类。
- 根据权利要求1所述的方法,其特征在于,在所述根据所述引用映射表卸载所述n个类中的第一类之前,所述方法还包括:当从内存中清除所述m个类对象中的第一类对象时,若所述引用映射表中保存有所述第一类对象的引用关系,则从所述引用映射表中删除所述第一类对象的引用关系;若所述引用映射表中保存有所述第一类对象的引用关系和依赖关系,则从所述引用映射表中删除所述第一类对象的引用关系和依赖关系。
- 根据权利要求1或2所述的方法,其特征在于,所述根据所述引用映射表卸载所述n个类中的第一类包括:当所述第一类出现异常时,根据所述引用映射表卸载所述n个类中的第一类。
- 根据权利要求1-3任一项所述的方法,其特征在于,所述根据所述引用映射表卸载所述n个类中的第一类包括:当检测到所述第一类对应的更新后的第二类时,根据所述引用映射表卸载所述n个类中的第一类。
- 根据权利要求4所述的方法,其特征在于,在所述根据所述引用映射表卸载所述n个类中的第一类之后,所述方法还包括:加载所述第二类;当创建所述第二类对应的第二类对象时,将所述第二类对象的引用关系,或者将第一类对象的引用关系和依赖关系保存至所述引用映射表中。
- 根据权利要求1-5任一项所述的方法,其特征在于,所述根据所述引用映射表卸载所述n个类中的第一类包括:当所述引用映射表中不包括所述第一类对应的所有类对象的引用关系和依赖关系时,卸载所述第一类。
- 根据权利要求6所述的方法,其特征在于,所述当所述引用映射表中不包括所述第一类对应的所有类对象的引用关系和依赖关系时,卸载所述第一类包括:当所述引用映射表满足预设条件时,从所述引用映射表中删除所述第一类对应的所有类对象的引用关系和依赖关系,以使得所述引用映射表中不包括所述第一类对应的所有类对象的引用关系和依赖关系;卸载所述第一类;其中,所述预设条件包括:所述引用映射表中的所述第一类对应的所有类对象的优先级小于或者等于第一预设阈值,所述引用映射表中的所述第一类对应的所有类对象依赖的类对象的优先级小于或者等于第二预设阈值。
- 根据权利要求7所述的方法,其特征在于,当所述引用映射表满足所述预设条 件时,所述方法还包括:从内存中清除所述第一类对应的所有类对象和所述第一类对应的所有类对象依赖的类对象。
- 根据权利要求7或8所述的方法,其特征在于,当所述引用映射表中的所述第一类对应的第三类对象正在前台运行时,所述第三类对象的优先级大于所述第一预设阈值;当所述第三类对象依赖的类对象正在前台运行时,所述第三类对象依赖的类对象的优先级大于所述第二预设阈值。
- 根据权利要求1-9任一项所述的方法,其特征在于,在所述生成引用映射表之后,所述方法还包括:当所述应用关闭时,删除所述引用映射表。
- 一种电子设备,其特征在于,包括:加载单元,用于在应用启动后,加载n个类,n为正整数;生成单元,用于生成引用映射表,所述引用映射表包括所述n个类与所述n个类对应的m个类对象之间的引用关系,以及所述n个类对应的m个类对象的依赖关系,所述依赖关系用于表示不同类对象之间相互依赖的映射关系,m为大于或者等于n的正整数;卸载单元,用于在所述应用运行过程中,根据所述引用映射表卸载所述n个类中的第一类。
- 根据权利要求11所述的电子设备,其特征在于,还包括:第一删除单元,用于在所述卸载单元根据所述引用映射表卸载所述n个类中的第一类之前,当从内存中清除所述m个类对象中的第一类对象时,若所述引用映射表中保存有所述第一类对象的引用关系,则从所述引用映射表中删除所述第一类对象的引用关系;若所述引用映射表中保存有所述第一类对象的引用关系和依赖关系,则从所述引用映射表中删除所述第一类对象的引用关系和依赖关系。
- 根据权利要求11或12所述的电子设备,其特征在于,所述卸载单元具体用于:当所述第一类出现异常时,根据所述引用映射表卸载所述n个类中的第一类。
- 根据权利要求11-13任一项所述的电子设备,其特征在于,所述卸载单元具体用于:当检测到所述第一类对应的更新后的第二类时,根据所述引用映射表卸载所述n个类中的第一类。
- 根据权利要求14所述的电子设备,其特征在于,所述加载单元还用于:在所述卸载单元根据所述引用映射表卸载所述n个类中的第一类之后,加载所述第二类;当创建所述第二类对应的第二类对象时,将所述第二类对象的引用关系,或者将第一类对象的引用关系和依赖关系保存至所述引用映射表中。
- 根据权利要求11-15任一项所述的电子设备,其特征在于,所述卸载单元具体用于:当所述引用映射表中不包括所述第一类对应的所有类对象的引用关系和依赖关系时,卸载所述第一类。
- 根据权利要求16所述的电子设备,其特征在于,所述卸载单元具体用于:当所述引用映射表满足预设条件时,从所述引用映射表中删除所述第一类对应的所有类对象的引用关系和依赖关系,以使得所述引用映射表中不包括所述第一类对应的所有类对象的引用关系和依赖关系;卸载所述第一类;其中,所述预设条件包括:所述引用映射表中的所述第一类对应的所有类对象的优先级小于或者等于第一预设阈值,所述引用映射表中的所述第一类对应的所有类对象依赖的类对象的优先级小于或者等于第二预设阈值。
- 根据权利要求17所述的电子设备,其特征在于,还包括:第二删除单元,用于当所述引用映射表满足所述预设条件时,从内存中清除所述第一类对应的所有类对象和所述第一类对应的所有类对象依赖的类对象。
- 根据权利要求17或18所述的电子设备,其特征在于,当所述引用映射表中的所述第一类对应的第三类对象正在前台运行时,所述第三类对象的优先级大于所述第一预设阈值;当所述第三类对象依赖的类对象正在前台运行时,所述第三类对象依赖的类对象的优先级大于所述第二预设阈值。
- 根据权利要求11-19任一项所述的电子设备,其特征在于,还包括:第三删除单元,用于在所述生成单元生成所述引用映射表之后,当所述应用关闭时,删除所述引用映射表。
- 一种电子设备,其特征在于,包括:一个或多个处理器和一个或多个存储器;所述一个或多个存储器与所述一个或多个处理器耦合,所述一个或多个存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,当所述一个或多个处理器执行所述计算机指令时,所述电子设备执行如权利要求1-10任一项所述的类卸载方法。
- 一种计算机存储介质,其特征在于,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1-10任一项所述的类卸载方法。
- 一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如权利要求1-10任一项所述的类卸载方法。
- 如权利要求11-21任意一项所述的电子设备,所述的电子设备为芯片。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201780080320.4A CN110114756A (zh) | 2017-10-09 | 2017-10-13 | 一种类卸载方法及电子设备 |
EP17928527.5A EP3693851B1 (en) | 2017-10-09 | 2017-10-13 | Class unloading method and electronic device |
US16/754,701 US11163589B2 (en) | 2017-10-09 | 2017-10-13 | Class unloading method and electronic device |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710931802 | 2017-10-09 | ||
CN201710931802.8 | 2017-10-09 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2019071601A1 true WO2019071601A1 (zh) | 2019-04-18 |
Family
ID=66101261
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/CN2017/106154 WO2019071601A1 (zh) | 2017-10-09 | 2017-10-13 | 一种类卸载方法及电子设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11163589B2 (zh) |
EP (1) | EP3693851B1 (zh) |
CN (1) | CN110114756A (zh) |
WO (1) | WO2019071601A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11403075B2 (en) * | 2019-11-25 | 2022-08-02 | International Business Machines Corporation | Bytecode verification using class relationship caching |
CN112685096A (zh) * | 2020-12-24 | 2021-04-20 | 京东方科技集团股份有限公司 | 场景切换控制方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1360694A (zh) * | 1999-07-13 | 2002-07-24 | 太阳微系统有限公司 | 实现单独的类装载器的方法和设备 |
CN102253854A (zh) * | 2011-07-26 | 2011-11-23 | 华为技术有限公司 | 业务处理方法和Java虚拟机 |
CN104182356A (zh) * | 2014-09-19 | 2014-12-03 | 深圳市茁壮网络股份有限公司 | 一种内存管理方法、装置及终端设备 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020147971A1 (en) | 2001-02-15 | 2002-10-10 | Adams James Andrew | Object-oriented class loading system and method |
US6915511B2 (en) | 2001-05-22 | 2005-07-05 | Sun Microsystems, Inc. | Dynamic class reloading mechanism |
US6985909B2 (en) | 2001-12-28 | 2006-01-10 | Sap Ag | Modified class loaders and methods of use |
US7203941B2 (en) * | 2002-11-14 | 2007-04-10 | Microsoft Corporation | Associating a native resource with an application |
US7765551B2 (en) | 2003-02-10 | 2010-07-27 | Novell, Inc. | System for dynamically loading application resources from the first server to the second server based on the modified application resources from the first server |
US7526760B1 (en) * | 2004-03-17 | 2009-04-28 | Sun Microsystems, Inc. | Methods for implementing virtual method invocation with shared code |
US20080005190A1 (en) * | 2006-06-28 | 2008-01-03 | Nokia Corporation | System, Method, Apparatus and Computer Program Product for Providing Resource Reclamation in a Virtual Machine |
US8060812B2 (en) * | 2007-07-27 | 2011-11-15 | International Business Machines Corporation | Methods, systems, and computer program products for class verification |
CN102722432B (zh) * | 2011-03-29 | 2016-02-24 | 国际商业机器公司 | 追踪内存访问的方法和装置 |
US9116798B2 (en) * | 2011-11-30 | 2015-08-25 | Oracle International Corporation | Optimized memory management for class metadata |
GB2506596A (en) * | 2012-10-02 | 2014-04-09 | Ibm | Managing a set of software modules in a runtime environment |
US9772828B2 (en) * | 2014-04-22 | 2017-09-26 | Oracle International Corporation | Structural identification of dynamically generated, pattern-instantiation, generated classes |
US9286085B2 (en) * | 2014-06-27 | 2016-03-15 | International Business Machines Corporation | Correlating class loader objects across execution environments |
US10114745B2 (en) * | 2014-10-07 | 2018-10-30 | Red Hat, Inc. | Assisted garbage collection in a virtual machine |
US20160196119A1 (en) * | 2015-01-05 | 2016-07-07 | Google Inc. | Apparatus and Methods for Virtual and Interface Method Calls |
CN105893110A (zh) * | 2015-10-09 | 2016-08-24 | 乐视网信息技术(北京)股份有限公司 | 用于具有显示界面的软件程序的内存回收的方法和装置 |
CN107220076B (zh) * | 2016-09-27 | 2018-10-30 | 华为技术有限公司 | 一种内存回收方法及装置 |
US10346086B2 (en) * | 2017-06-08 | 2019-07-09 | Oracle International Corporation | Determining an age category for an object stored in a heap |
-
2017
- 2017-10-13 EP EP17928527.5A patent/EP3693851B1/en active Active
- 2017-10-13 WO PCT/CN2017/106154 patent/WO2019071601A1/zh unknown
- 2017-10-13 US US16/754,701 patent/US11163589B2/en active Active
- 2017-10-13 CN CN201780080320.4A patent/CN110114756A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1360694A (zh) * | 1999-07-13 | 2002-07-24 | 太阳微系统有限公司 | 实现单独的类装载器的方法和设备 |
CN102253854A (zh) * | 2011-07-26 | 2011-11-23 | 华为技术有限公司 | 业务处理方法和Java虚拟机 |
CN104182356A (zh) * | 2014-09-19 | 2014-12-03 | 深圳市茁壮网络股份有限公司 | 一种内存管理方法、装置及终端设备 |
Non-Patent Citations (1)
Title |
---|
See also references of EP3693851A4 |
Also Published As
Publication number | Publication date |
---|---|
US11163589B2 (en) | 2021-11-02 |
EP3693851A1 (en) | 2020-08-12 |
EP3693851A4 (en) | 2020-12-09 |
US20200241892A1 (en) | 2020-07-30 |
EP3693851B1 (en) | 2023-01-11 |
CN110114756A (zh) | 2019-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10379696B2 (en) | Method and apparatus for displaying popup window message | |
CN106293507B (zh) | 具有外部存储器的电子设备及操作电子设备的方法 | |
CN108702421B (zh) | 用于控制应用和组件的电子设备和方法 | |
CN111033466B (zh) | 对闪存进行分区以及实现具有映像升级能力的灵活引导 | |
EP3340424A1 (en) | Electronic device and method of controlling charging of the same | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
WO2019084737A1 (zh) | 更新SELinux安全策略的方法及终端 | |
CN107807861B (zh) | 冻屏解决方法、移动终端及计算机可读存储介质 | |
EP3451193B1 (en) | Electronic device and file data journaling method of electronic device | |
US11169866B2 (en) | Method for detecting memory leak and electronic device thereof | |
US20130086571A1 (en) | Dynamically Updating Firmware In A Computing System | |
US9411640B2 (en) | Method for efficiently managing application and electronic device implementing the method | |
US11693552B2 (en) | Display processing method and electronic device | |
KR20160014629A (ko) | 업데이트에 대한 기지의 의존관계를 관리하는 기법 | |
CN103810004B (zh) | 嵌入式系统升级的方法、装置及设备 | |
CN114879828A (zh) | 具有持久性存储器存储装置的固件接口 | |
WO2019165828A1 (zh) | 处理方法、存储介质及电子设备 | |
WO2019071609A1 (zh) | 一种加载应用和升级应用的方法及终端设备 | |
WO2018058436A1 (zh) | 一种加载软件程序的方法、用户终端及存储介质 | |
WO2019071601A1 (zh) | 一种类卸载方法及电子设备 | |
CN108563476B (zh) | 应用程序运行方法、装置、存储介质及电子设备 | |
CN105278942B (zh) | 组件管理方法及装置 | |
CN108132844B (zh) | 插件下载方法及装置 | |
WO2019072179A1 (zh) | 应用程序运行控制方法及装置 | |
WO2017206851A1 (zh) | 安装任务的分配方法及移动终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 17928527 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
ENP | Entry into the national phase |
Ref document number: 2017928527 Country of ref document: EP Effective date: 20200504 |