[发明专利]加载和运行应用程序的方法、装置及相关产品在审
申请号: | 202010294919.1 | 申请日: | 2020-04-15 |
公开(公告)号: | CN113535137A | 公开(公告)日: | 2021-10-22 |
发明(设计)人: | 何忠政;黄海涛;程帅;史晓华;胡健 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F8/41;G06F8/71 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 加载 运行 应用程序 方法 装置 相关 产品 | ||
本申请涉及加载和运行应用程序的方法、装置及相关产品。所述方法通过加载所述应用程序的类时,根据所述类及所述类的祖先类的实例成员的信息计算得到所述类对应的对象大小,其中,所述实例成员的信息包括实例成员的存量布局信息和增量布局信息;根据所述对象大小创建所述类对应的对象。本申请提供的实施例,由于增量布局不改变存量布局,发布了类库的新版本时,即使不对应用程序进行重新编译,也不需要重新计算存量成员的偏移量,可以减少由于类加载的过程进行偏移量的重新计算导致的计算资源消耗,缓解了应用程序启动时的卡顿,运行时访问存量成员不需要访问间接表,而且不会出现二进制兼容的问题,提高了应用程序运行效率。
技术领域
本申请涉及计算机技术领域,尤其涉及一种加载和运行应用程序的方法、装置及相关产品。
背景技术
面向对象软件的二进制兼容问题,也称脆弱基类(Fragile Base Class)问题,是困扰软件维护的重要问题。在面向对象软件发布后,面向对象软件依赖的库或第三方代码中部分父类(基类)发生了改变,而导致已发布的面向对象软件需要重新进行编译、调试、测试和部署。
发明内容
本申请提出了一种加载和运行应用程序的方法及装置、生成字节码文件的方法、字节码文件、终端设备以及存储介质。
第一方面,本申请的实施例提供了一种加载和运行应用程序的方法,应用于终端设备,所述方法包括:
加载所述应用程序的类时,根据所述类及所述类的祖先类的实例成员的信息计算得到所述类对应的对象大小,其中,所述实例成员的信息包括实例成员的存量布局信息和增量布局信息;
根据所述对象大小创建所述类对应的对象。
结合第一方面的第一种可能的实现方式中,在所述对象的对象布局中,从所述对象的基地址开始按照如下顺序连续排布:先是按照继承链从祖先类依次到所述类的存量布局,然后是按照继承链从所述类依次到所述祖先类的增量布局。
由于增量布局不改变存量布局、也不允许删除存量成员,存量布局不变。因此,即使类代码更新了子版本,对于存量成员来讲,不管是在编译时,还是在启动应用程序进行类加载时都不需要重新计算存量成员的偏移量。降低应用程序启动时的计算量,加快应用程序启动速度,同时还提高了编译器编译的效率。
另外,由于不改变存量布局,也就是说,即使父类的类代码更新了子版本,也不影响根据更新之前的版本编译的应该程序在运行时访问存量成员,能够解决二进制兼容的技术问题。对于增量成员,仍然可以采用类加载时对增量成员的偏移量进行初始化的方式来解决访问增量成员的二进制兼容的问题,但如上所述,由于不需要对存量成员的偏移量进行初始化,降低应用程序启动时的计算量,加快应用程序启动速度。另外,由于不改变存量布局,因此访问存量成员时也不需要采用先访问间接表的方式获取存量成员的偏移量,不需要额外读取内存,提高访问效率,应用程序的运行效率更高。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述存量布局中包括每个类的主版本的存量成员,所述增量布局中包括每个类的子版本相对于所述每个类的主版本增加的增量成员,其中,所述主版本发布后不再兼容根据主版本之前的版本类代码编译的应用程序,子版本发布后兼容根据所述主版本或者所述主版本的任一子版本的类代码编译的应用程序。
结合第一方面或者第一方面的第一种可能的实现方式,在第三种可能的实现方式中,加载所述应用程序的类还包括:
根据所述增量布局信息计算得到所述对象的增量布局中每个类的反向偏移量,所述类的反向偏移量用于表示在所述增量布局中每个类的起始地址相对于所述对象的结束地址的偏移量。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述方法还包括:
根据所述对象的基地址、所述对象大小、所述增量成员所属的类的反向偏移量以及所述增量成员的第一偏移量计算所述增量成员的地址,以访问所述增量成员;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010294919.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种基于电子钱包的汇款方法、系统和电子设备
- 下一篇:生产监控方法和装置