【技术实现步骤摘要】
类加载方法和装置
[0001]本申请涉及计算机
,尤其涉及类加载方法和装置。
技术介绍
[0002]在java虚拟机(java virtual machine,JVM)框架下,java虚拟机将磁盘中描述类数据的字节码.class文件加载到内存,并对这些数据进行校正、转换解析和初始化,最终形成可以被java虚拟机直接使用的java类型,这就是标准JVM的类加载机制。
[0003]从安卓5.0(Android5.0)开始谷歌(Google)开放了Art运行模式。基于Art运行模式,系统服务(system server)进程和每个应用都运行在独立的Art实例上。在系统服务进程或应用运行时,如果需要加载某个类(class)的类信息(class info),则首先根据该类的类名查找到类定义(class definition),然后动态分配内存,加载类数据,通过动态链接填充类的属性、方法等信息。其中,类数据是用于描述类的信息,如类所包含的方法的数量等。类信息包括:类的属性、方法等。
[0004]上述技术方案,通常先 ...
【技术保护点】
【技术特征摘要】
1.一种类加载方法,其特征在于,应用于计算机设备,所述计算机设备包括目标二进制文件,所述目标二进制文件包括多个类的类名与所述多个类的类信息之间的对应关系,类信息所述方法包括:根据所述多个类的类名与所述多个类的类信息之间的对应关系,在所述多个类的类名中查找待加载类的类名,并获取所述待加载类的类名对应的类信息;其中,所述多个类包括第一类,所述第一类的类信息是指运行所述第一类所需的类信息,所述待加载类为运行所述计算机设备中的某应用程序时所需的类;根据所述待加载类的类名对应的类信息,运行所述应用程序。2.根据权利要求1所述的方法,其特征在于,所述目标二进制文件还包括:所述多个类的类地址,以及所述多个类的类地址与所述多个类的类名的哈希值之间的对应关系;一个类的类地址所指示的存储空间用于存储一个类的类信息;所述方法还包括:根据所述多个类的类地址与所述多个类的类名的哈希值之间的对应关系,在所述多个类的类名的哈希值中查找目标哈希值,并获取所述目标哈希值对应的类地址;其中,所述目标哈希值是所述待加载类的类名的哈希值;所述根据所述多个类的类名与所述多个类的类信息之间的对应关系,在所述多个类的类名中查找所述待加载类的类名,并获取所述待加载类的类名对应的类信息,包括:在所述目标哈希值对应的类地址所指示的存储空间中,查找所述待加载类的类名,其中,在所述存储空间中,所述待加载类的类名是所述待加载类的类信息的一部分,以及所述目标哈希值对应的类地址所指示的存储空间中的类信息为所述待加载类的类信息。3.根据权利要求2所述的方法,其特征在于,一个哈希值对应一个桶,一个桶包括零个、一个或多个类地址;所述根据所述多个类的类地址与所述多个类的类名的哈希值之间的对应关系,在所述多个类的类名的哈希值中查找所述目标哈希值,并获取所述目标哈希值对应的类地址,包括:根据多个桶与所述多个类的类名的哈希值之间的对应关系,在所述多个类的类名的哈希值中查找所述目标哈希值,并获取所述目标哈希值对应的桶,并将所述目标哈希值对应的桶所包括的类地址作为所述目标哈希值对应的类地址。4.根据权利要求3所述的方法,其特征在于,一个桶具有一个首地址和一个尾地址,所述多个桶包括第一桶,所述第一桶的首地址和尾地址所限定的存储空间用于存储所述第一桶包括的类地址;在所述将所述目标哈希值对应的桶所包括的类地址作为所述目标哈希值对应的类地址之前,所述方法还包括:从所述多个桶的首地址和尾地址中,查找所述目标哈希值对应的桶的首地址和尾地址;从所述目标哈希值对应的桶的首地址至尾地址所限定的存储空间中,读取所述目标哈希值对应的桶所包括的类地址。5.根据权利要求1至4任一项所述的方法,其特征在于,所述方法还包括:将运行所述应用程序所需的全量二进制文件从所述计算机设备的外存中加载到所述计算机设备的内存中;所述全量二进制文件包括所述目标二进制文件。6.根据权利要求5所述的方法,其特征在于,所述方法还包括:创建所述应用程序的至少两个类加载器;
建立所述至少两个类加载器与所述全量二进制文件之间的对应关系;其中,所述至少两个类加载器包括第一类加载器,所述第一类加载器用于在与所述第一类加载器对应的二进制文件中查找所述待加载类的类信息。7.根据权利要求6所述的方法,其特征在于,所述方法还包括:根据双亲委派机制,在所述至少两个类加载器中确定当前执行查找操作的类加载器,以通过所述确定的当前执行查找操作的类加载器,在所述全量二进制文件中查找所述待加载类的类信息。8.根据权利要求7所述的方法,其特征在于,类加载器与二进制文件存在对应关系,包括:类加载器与二进制文件的路径存在对应关系;所述方法还包括:根据所述至少两个类加载器与所述全量二进制文件的路径之间的对应关系,在所述全量二进制文件的路径中查找目标栈帧所在的二进制文件的路径,并获取所述目标栈帧所在的二进制文件的路径对应的类加载器,将所确定的类加载器作为所述双亲委派机制中所采用的初始类加载器;所述目标栈帧是调用待加载方法的栈帧,所述待加载方法所属所述待加载类。9.根据权利要求7所述的方法,其特征在于,所述方法还包括:建立所述至少两个类加载器与所述全量二进制文件中的类之间的对应关系;其中,所述第一类加载器与所述第一类加载器对应的二进制文件所包含的类之间存在对应关系;将当前调用所述待加载类的类所对应的类加载器,作为所述双亲委派机制中所采用的初始类加载器。10.根据权利要求1至9任一项所述的方法,其特征在于,所述二进制文件包括共享动态链接库SO文件。11.一种计算机设备,其特征在于,所述计算机设备包括目标二进制文件,所述目标二进制文件包括多个类的类名与所述多个类的类信息之间的对应关系,类名与类的类信息一一对应;所述计算机设备包括:查找单元,用于根据所述多个类的类名与所述多个类的...
【专利技术属性】
技术研发人员:王新建,张清华,杨勇勇,张斌,刘伟,
申请(专利权)人:华为技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。