类加载方法、装置、设备及介质制造方法及图纸

技术编号:38825832 阅读:16 留言:0更新日期:2023-09-15 20:05
本公开提供了一种类加载方法、装置、设备及介质,该方法包括:当接收到携带待加载类名的类加载请求后,首先,调用第一路径类加载器在第一镜像文件中查找待加载类名;其中,第一路径类加载器为系统内置类加载器,第一路径类加载器关联有第一可执行文件的路径,第一可执行文件中包括自定义类,第一镜像文件为第一可执行文件对应的镜像文件;然后,如果确定在第一镜像文件中未查找到待加载类名,则调用第一路径类加载器的父级加载器,并由父级加载器调用第一路径类加载器中的类加载函数,对待加载类名对应的类进行加载。由此可知,在需要加载大量的自定义类的动态化场景下,提高了类加载效率,进一步保证了Android平台下类加载的性能。能。能。

【技术实现步骤摘要】
类加载方法、装置、设备及介质


[0001]本公开涉及计算机领域,尤其涉及一种类加载方法、装置、设备及介质。

技术介绍

[0002]对于在Android平台下运行的应用程序,其运行过程中会涉及到大量类Class的加载。其中,自定义类是应用程序运行过程中需要动态加载的数量较多的类。
[0003]在需要加载大量的自定义类的动态化场景,应用程序运行过程中,为了保证自定义类能够在合适的时机被加载,需要定义新的类加载器,并利用新定义的类加载器加载自定义类。但是,新定义的类加载器由于违反了Android平台下的类加载器的限制,因此不能调用新定义的类加载器从镜像文件中查找自定义类,只能通过调用其父级加载器优先从系统类的文件中加载自定义类,在未加载成功的情况下,才能从自定义类的文件中加载自定义类。显然,在需要加载大量的自定义类的动态化场景下,类加载方式繁琐且类加载效率较低,影响了Android平台下类加载的性能。

技术实现思路

[0004]为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种类加载方法、装置、设备及介质。
[0005]第一方面,本公开提供了一种类加载方法,该方法包括:
[0006]当接收到携带待加载类名的类加载请求后,调用第一路径类加载器在第一镜像文件中查找待加载类名;其中,第一路径类加载器为系统内置类加载器,第一路径类加载器关联有第一可执行文件的路径,第一可执行文件中包括自定义类,第一镜像文件为第一可执行文件对应的镜像文件;
[0007]如果确定在第一镜像文件中未查找到待加载类名,则调用第一路径类加载器的父级加载器,并由父级加载器调用第一路径类加载器中的类加载函数,对待加载类名对应的类进行加载。
[0008]第二方面,本公开提供了一种类加载装置,该装置包括:
[0009]待加载类名查找模块,用于当接收到携带待加载类名的类加载请求后,调用第一路径类加载器在第一镜像文件中查找所述待加载类名;其中,所述第一路径类加载器为系统内置类加载器,所述第一路径类加载器关联有第一可执行文件的路径,所述第一可执行文件中包括自定义类,所述第一镜像文件为所述第一可执行文件对应的镜像文件;
[0010]类加载模块,用于如果确定在所述第一镜像文件中未查找到所述待加载类名,则调用所述第一路径类加载器的父级加载器,并由所述父级加载器调用所述第一路径类加载器中的类加载函数,对所述待加载类名对应的类进行加载。
[0011]第三方面,本公开提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现上述的方法。
[0012]第四方面,本公开提供了一种设备,包括:存储器,处理器,及存储在所述存储器上
并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现上述的方法。
[0013]第五方面,本公开提供了一种计算机程序产品,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现上述的方法。
[0014]本公开实施例提供的技术方案与现有技术相比至少具有如下优点:
[0015]本公开实施例提供了一种类加载方法、装置、设备及介质,当接收到携带待加载类名的类加载请求后,首先,调用第一路径类加载器在第一镜像文件中查找待加载类名,然后,如果确定在第一镜像文件中未查找到待加载类名,则调用第一路径类加载器的父级加载器,并由父级加载器调用第一路径类加载器中的类加载函数,对待加载类名对应的类进行加载。由于第一路径类加载器为系统内置类加载器,第一路径类加载器关联有第一可执行文件的路径,第一可执行文件中包括自定义类,第一镜像文件为第一可执行文件对应的镜像文件,因此,第一路径类加载器可以直接在第一镜像文件中查找自定义类,相比于现有方案中在调用父级加载器加载系统类失败之后,才能加载自定义的方案来说,显然简化了自定义类的查找流程;另外,如果从镜像文件中未查找到该类名,还可以利用父级加载器返回至第一路径类加载器继续进行加载,这样,保证了类加载过程的完善性和可靠性。综上,在需要加载大量的自定义类的动态化场景下,提高了类加载效率,进一步保证了Android平台下类加载的性能。
附图说明
[0016]此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
[0017]为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0018]图1为现有技术提供的一种类加载方法的原理示意图;
[0019]图2为现有技术提供的另一种类加载方法的原理示意图;
[0020]图3为本公开实施例提供的一种类加载方法的流程示意图;
[0021]图4为本公开实施例提供的另一种类加载方法的流程示意图;
[0022]图5为本公开实施例提供的一种类加载方法的原理示意图;
[0023]图6为本公开实施例提供的另一种类加载方法的原理示意图;
[0024]图7为本公开实施例提供的又一种类加载方法的流程示意图;
[0025]图8为本公开实施例提供的一种类加载装置的结构示意图;
[0026]图9为本公开实施例提供的一种类加载设备的结构示意图。
具体实施方式
[0027]为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
[0028]在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采
用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
[0029]Android平台下的类加载过程可以通过ART(Android runtime,Android 5及以上版本)虚拟机实现。在应用程序运行过程中,ART虚拟机使用镜像文件(后缀名为.art,Android应用的镜像文件默认为base.art)加快应用程序的启动速度。其中,镜像文件包含应用程序包列出的一些字符串和类的虚拟机内部表示。具体的,在进行类加载时,ART虚拟机中的类加载器会优先从镜像文件中查找类是否存在,如果存在,则不会去预先定义的可执行文件的路径下加载类,由于镜像文件的类查找效率大于可执行文件的类查找效率,因此,从镜像文件中查找类能够节约类查找时间,从而加快应用程序的启动速度。
[0030]需要说明的是,为了保证镜像文件能够被正确使用,ART虚拟机限定了类加载器的类名必须为路径类加载器(PathClassLoader)或启动类加载器(BootClassLoader),也就是说,ART虚拟机中的PathClassLoader和BootClassLoader能本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种类加载方法,其特征在于,所述方法包括:当接收到携带待加载类名的类加载请求后,调用第一路径类加载器在第一镜像文件中查找所述待加载类名;其中,所述第一路径类加载器为系统内置类加载器,所述第一路径类加载器关联有第一可执行文件的路径,所述第一可执行文件中包括自定义类,所述第一镜像文件为所述第一可执行文件对应的镜像文件;如果确定在所述第一镜像文件中未查找到所述待加载类名,则调用所述第一路径类加载器的父级加载器,并由所述父级加载器调用所述第一路径类加载器中的类加载函数,对所述待加载类名对应的类进行加载。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:如果确定在所述第一镜像文件中查找到所述待加载类名,则从所述第一镜像文件中加载所述待加载类名对应的类。3.根据权利要求1所述的方法,其特征在于,所述由所述父级加载器调用所述第一路径类加载器中的类加载函数,对所述待加载类名对应的类进行加载,包括:由所述父级加载器调用所述第一路径类加载器中的类加载函数,基于所述第一可执行文件的路径对所述待加载类名对应的类进行加载。4.根据权利要求3所述的方法,其特征在于,所述由所述父级加载器调用所述第一路径类加载器中的类加载函数,基于所述第一可执行文件的路径对所述待加载类名对应的类进行加载,包括:由所述父级加载器通过预设类转发函数调用所述第一路径类加载器中的类加载函数,基于所述第一可执行文件的路径对所述待加载类名对应的类进行加载。5.根据权利要求3所述的方法,其特征在于,所述由所述父级加载器调用所述第一路径类加载器中的类加载函数,基于所述第一可执行文件的路径对所述待加载类名对应的类进行加载之前,还包括:调用所述父级加载器从第二镜像文件中查找所述待加载类名;其中,所述父级加载器关联有第二可执行文件的路径,所述第二可执行文件中包括系统类,所述第二镜像文件为所述第二可执行文件对应的镜像文件;如果确定所述父级加载器从第二镜像文件中未查找到所述待加载类名,则调用所述父级加载器基于所述第二可执行文件的路径查找所述待加载类名;相应的,所述由所述父级加...

【专利技术属性】
技术研发人员:段启智
申请(专利权)人:北京字节跳动网络技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1