CN116974653B - 类加载方法及*** - Google Patents

类加载方法及*** Download PDF

Info

Publication number
CN116974653B
CN116974653B CN202311228738.9A CN202311228738A CN116974653B CN 116974653 B CN116974653 B CN 116974653B CN 202311228738 A CN202311228738 A CN 202311228738A CN 116974653 B CN116974653 B CN 116974653B
Authority
CN
China
Prior art keywords
class
information
target
loading
loaded
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311228738.9A
Other languages
English (en)
Other versions
CN116974653A (zh
Inventor
陈刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202311228738.9A priority Critical patent/CN116974653B/zh
Publication of CN116974653A publication Critical patent/CN116974653A/zh
Application granted granted Critical
Publication of CN116974653B publication Critical patent/CN116974653B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本说明书实施例提供类加载方法及***,其中类加载方法包括:根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图;建立所述待加载类与所述类加载视图中视图窗口之间的映射关系;在调用所述类加载器,加载所述可执行代码文件中包含的目标待加载类的情况下,基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息。

Description

类加载方法及***
技术领域
本说明书实施例涉及计算机技术领域,特别涉及一种类加载方法及***。
背景技术
随着互联网技术的发展,快节奏的生活环境下,对效率的要求逐渐提高。在应用程序运行场景下,对应用程序的弹性能力要求越来越高,而影响弹性能力很重要的一点就是需要应用程序冷启动的速度足够快。面对访问量的激增,可以在短时间内创建新的服务应对流量的增长。
现有技术中,通常采用预加载的方式实现应用程序的提前启动,实现服务的提前建立。然而这种方式针对特定的程序语言则无法实现,在应用程序提前加载时,容易出现加载错误,导致应用程序无法提供服务,在应用程序修复的过程中导致应用程序启动速度慢,因此,亟需一种较为有效的方法以解决上述问题。
发明内容
有鉴于此,本说明书实施例提供了一种类加载方法。本说明书一个或者多个实施例同时涉及一种类加载装置,一种类加载***,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种类加载方法,应用于服务器,包括:
根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图;
建立所述待加载类与所述类加载视图中视图窗口之间的映射关系;
在调用所述类加载器,加载所述可执行代码文件中包含的目标待加载类的情况下,基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息。
根据本说明书实施例的第二方面,提供了一种类加载装置,应用于服务器,包括:
确定模块,被配置为根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图;
映射关系建立模块,被配置为建立所述待加载类与所述类加载视图中视图窗口之间的映射关系;
加载模块,被配置为在调用所述类加载器,加载所述可执行代码文件中包含的目标待加载类的情况下,基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息。
根据本说明书实施例的第三方面,提供了一种类加载***,包括服务器和客户端;
所述服务器,响应于所述客户端针对初始页面提交的页面信息获取请求确定待执行代码文件;根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图;建立所述待加载类与所述类加载视图中视图窗口之间的映射关系;在调用所述类加载器,加载所述可执行代码文件中包含的目标待加载类的情况下,基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息;在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间;在接收到所述客户端提交的页面更新请求的情况下,在所述目标存储空间确定所述页面更新请求对应的目标可执行代码并反馈至所述客户端;
所述客户端,基于所述目标可执行代码对所述初始页面进行更新。
根据本说明书实施例的第四方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述类加载方法的步骤。
根据本说明书实施例的第五方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述类加载方法的步骤。
根据本说明书实施例的第六方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述类加载方法的步骤。
本说明书一个实施例根据初始类加载信息生成包含待加载类的可执行代码文件和待加载类对应的类加载器,并确定类加载器对应的类加载视图;建立待加载类与类加载视图中视图窗口之间的映射关系;在调用类加载器,加载可执行代码文件中包含的目标待加载类的情况下,基于映射关系确定目标待加载类对应的目标视图窗口,并在目标视图窗口对应的存储位置记录目标待加载类的类加载信息。通过基于类加载器信息生成待加载类对应的类加载器,确定类加载器对应的类加载视图,并建立待加载类与类加载视图中视图窗口之间的映射关系,实现了构建待加载类、类加载器与类加载视图三者之间的关联关系,从而使得后续加载待加载类时,能够在进行类的动态加载的基础上,保证类加载的正确性。通过构建待加载类、类加载器与类加载视图三者之间的关联关系,使得可以对待执行代码文件以动态类加载的方式进行提前编译,从而提高应用程序的启动速度。
附图说明
图1是本说明书一个实施例提供的一种类加载方法的结构示意图;
图2是本说明书一个实施例提供的一种类加载方法的流程图;
图3是本说明书一个实施例提供的一种类加载方法的类加载描述文件生成示意图;
图4是本说明书一个实施例提供的一种类加载方法的类加载示意图;
图5是本说明书一个实施例提供的一种类加载方法的处理过程流程图;
图6是本说明书一个实施例提供的一种类加载装置的结构示意图;
图7是本说明书一个实施例提供的一种类加载***的结构示意图;
图8是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
此外,需要说明的是,本说明书一个或多个实施例所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
JVM:JavaVirtualMachine(Java虚拟机),是一种用于计算设备的规范,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟计算机功能实现。
类加载:java文件通过编译器获得包含Java类的.class 文件。Java对应的类加载器将.class 文件加载到 JVM 中。类装载器的作用即为类的加载。
AOT:AheadofTime(提前编译),将代码编译为目标架构的本地代码,从而减少运行时开销的技。
GOT:Globaloffsettable(全局偏移表),用于定位全局变量和函数的表,通过相对偏移的方式实现了符号的可重定位。
JIT:JustInTime(及时编译),一种在运行时编译并执行代码的技术。
QPS:Query Per Second(每秒查询率),每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
实际应用场景下,对于应用程序的弹性能力要求越来越高,而影响弹性能力的一个关键因素即为冷启动的速度。需要应用程序冷启动的速度足够的快。例如一个在线服务的***,大部分时间访问量较低,即,10QPS。但是可能在某个特定时间段,访问量会达到100QPS,在请求量在1分钟内从10增长到100QPS的情况下,就需要在1分钟内创建新的服务来应对流量的增长,如果这个应用冷启动的时间是3分钟,那么显然是无法在1分钟内完成服务的创建。但是如果应用能在30秒内完成启动,那么就能应对在1分钟内突增的流量。通过提前编译这一技术即可克服上述问题。通过将代码提前编译成具体目标机器的代码,减少CPU开销从而提升启动速度。提前编译是通过将代码先编译成目标架构的代码,从而减少运行时内存和CPU开销,提升程序运行性能的技术。但是提前编译一般不能支持动态类加载,这样就导致应用程序无法使用提前编译。因此,亟需一种有效的方法以解决上述问题。
图1示出了根据本说明书一个实施例提供的一种类加载方法的结构示意图,如图1所示,在进行类加载时,确定待执行代码文件,根据待执行代码文件中包含的类代码确定类加载描述信息和类加载器信息。对待执行代码文件进行初步编译获得编译文件,再基于类加载描述信息在编译文件中确定类代码并编译,根据编译结果确定包含待加载类的可执行代码文件。基于类加载器信息构建待加载类对应的类加载器,并确定类加载器对应的类加载视图。建立待加载类与类加载视图中视图窗口之间的映射关系。在调用类加载器,加载可执行代码文件中包含的目标待加载类的情况下,基于映射关系确定目标待加载类对应的目标视图窗口,并在目标视图窗口对应的存储位置记录目标待加载类的类加载信息。在可执行代码中需要加载的类代码均加载完成的情况下,即完成了提前编译,从而提高后续任务的执行速度。
通过基于类加载器信息生成待加载类对应的类加载器,确定类加载器对应的类加载视图,并建立待加载类与类加载视图中视图窗口之间的映射关系,实现了构建待加载类、类加载器与类加载视图三者之间的关联关系,从而使得后续加载待加载类时,能够在进行类的动态加载的基础上,保证类加载的正确性。通过构建待加载类、类加载器与类加载视图三者之间的关联关系,使得可以对待执行代码文件以动态类加载的方式进行提前编译,从而提高应用程序的启动速度。
在本说明书中,提供了一种类加载方法,本说明书同时涉及一种类加载装置,一种类加载***,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
参见图2,图2示出了根据本说明书一个实施例提供的一种类加载方法的流程图,具体包括以下步骤。
步骤S202:根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图。
具体的,初始类加载信息可以是表示待加载类的属性的信息,也可以是用于创建类加载器的信息,包括但不限于类加载器的名称信息、类型信息和内存标识信息;待加载类是指将要执行的待执行代码文件中需要加载的类,以便于后续实现待执行代码文件对应的功能。类加载器是指用于实现类加载,可以将Java类加载待虚拟机中,用于实现Java类的实例化;相应的,类加载视图即为创建类加载器时,分配给类加载器的类加载试视图,用于在进行后续的类加载时,对类加载信息进行记录。
基于此,获取初始类加载信息,基于初始类加载信息生成包含待加载类的可执行代码文件,以及生成可执行代码文件中待加载类对应的类加载器。确定类加载器对应的类加载视图。用于基于类加载视图和类加载器对待加载类进行加载。
进一步的,考虑到可执行代码文件需要通过编译获得,且不同的可执行代码文件对应不同的类加载器,因此需要基于在基于待执行代码文件的基础确定初始类加载信息,进而确定类加载视图,具体实现如下:
根据待执行代码文件确定所述初始类加载信息,并将所述待执行代码文件编译为编译文件;基于所述初始类加载信息中的类加载描述信息在所述编译文件中确定类代码并编译,根据编译结果确定包含待加载类的可执行代码文件;基于所述初始类加载信息中的类加载器信息生成所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图。
具体的,待执行代码文件是指开发人员编辑的代码文件,用于实现代码对应的功能,待执行代码文件可以是应用程序开发、网站开发过程中编辑的代码文件,可以是通过代码编辑器进行编辑,获得的代码文件;类加载描述信息是指基于代码文件中包含的类代码确定的类地址信息和类属性信息,类加载描述信息即为类元数据,类属性信息包括但不限于类的名称信息;类加载器信息是指类待执行代码文件中记录的用于加载类的类加载器的名称信息、类型信息和内存标识信息;编译是指利用编译程序从源语言编写的源程序产生目标程序的过程,编译可以理解为将高级语言转换为计算机可以识别的二进制语言相应的,编译文件即为对待执行代码文件进行编译后获得的编译结果;类代码即为与所述类加载描述信息对应的代码,是指与类加载描述信息中包含的类属性信息对应的类的完整代码;编译是指利用编译程序从源语言编写的源程序产生目标程序的过程,即,将用高级程序设计语言书写的待执行代码文件,翻译为等价的机器语言格式代码,例如,将Java代语言编写的待执行代码编译为机器语言代码。
基于此,在进行类加载时,确定待执行代码文件。根据待执行代码文件确定待执行代码文件中包含的类代码,确定类代码对应的类属性信息和类地质信息等类加载描述信息,以及基于待执行代码文件确定类加载器信息。对待执行代码文件进行初步编译,将待执行代码文件编译为编译文件。基于类加载描述信息中包含的类名称信息等类属性信息,以及类地址信息,在编译文件中确定类代码,并对包含类代码的编译文件中的代码进行编译,根据编译结果确定包含待加载类的可执行代码文件。基于类加载器信息生成用于加载可执行代码文件中包含的待加载类对应的类加载器,并确定类加载器对应的类加载视图,类加载视图包含多个视图窗口,用于在进行待加载类的加载时,记录待加载类的类加载信息。
实际应用中,待执行代码文件中包含至少一个类代码,在对待执行代码进行编译前,需要根据待执行代码文件确定类加载描述信息和类加载器信息,即运行待执行代码文件中的待执行代码,确定待执行代码文件中包含的类代码,并记录类代码对应的类加载描述信息,以及记录类加载器信息。
举例说明,在网页加载场景下,并非每次进行网页加载都需要基于网页对应的待执行代码文件实现类加载。可以在确定网页对应的待执行代码文件后,基于待执行代码文件生成类加载时的描述信息,基于描述信息对待执行代码文件进行编译,获得编译文件。再对编译文件中的类代码进行编译。以及生成待加载类对应的类加载器,构建类加载视图。
综上所述,根据待执行代码文件确定初始类加载信息,进而基于初始类加载信息确定可执行代码文件,生成类加载器,确定类加载视图。从而实现对待加载类进行加载前的准备,以后于后续的类加载顺利完成。
进一步的,考虑到待执行代码文件中包含的类代码较多,每个类代码对应不同的名称以及代码位置,在加载类时,并不是每个类均需要加载,为了便于对待执行代码文件中包含的类代码进行描述,提高后续类加载的准确性,可以对待执行代码文件中包含的类代码进行统计,生成类加载描述文件,具体实现如下:
基于所述待执行代码文件生成类加载描述文件;在所述类加载描述文件中读取所述类加载描述信息和所述类加载器信息,并作为所述初始类加载信息。
具体的,类加载描述文件中记录待执行代码文件中待执行类代码的元数据,类加载规则信息以及类加载器信息,其中,类代码的元数据包括但不限于类的名称、类所在的代码位置等信息;类加载规则信息表示对于符合规则的类,通过指定的类加载器在指定位置加载,例如,对于包名为com.Fool的类,通过名称为C1的类加载器在/WEB/INF/lib这一位置进行加载。
基于此,确定待执行代码文件中包含的待执行类代码,基于待执行类代码的类属性信息和类地址信息,以及待执行代码文件中包含的类加载器信息生成类加载描述文件。在类加载描述文件中读取包含类属性信息和类地址信息的类加载描述信息和类加载器信息,将类加载描述信息和类加载器信息作为所述初始类加载信息,以便于后续进行类加载。
沿用上例,网页加载时由服务器通过提前编译待执行代码文件,实现网页对应的可执行代码的预先生成。由于网页中可以包含新闻、汽车、图片、购物等多个功能入口,各个功能模块可以对应一个独立的类加载器,从而实现类加载的隔离,避免在类具有相同名称的情况下,出现类加载错误的问题。在对新闻对应的代码进行提前编译时,确定新闻对应的待执行代码文件,在待执行代码文件中确定需要进行加载的类代码。基于类代码的名称、代码位置以及类加载器名称生成类加载描述文件,类加载描述文件中的类代码的名称、代码位置以及类加载器名称用于实现后续的类加载。
综上所述,基于待执行代码文件生成类加载描述文件,进而后续可以基于类加载描述文件实现对待执行代码文件中代码的编译,从而实现有效代码的编译,提高编译的准确性,降低资源的浪费。
进一步的,考虑到待执行代码文件中包含的类代码数量较多,类加载规则较为复杂,因此可以通过生成与待执行代码文件对应的类加载描述文件的方式对待执行类代码进行记录,用于后续的类加载,具体实现如下:
确定待执行代码文件中待执行类代码的初始类加载器信息、类属性信息和类地址信息;于所述类属性信息和所述类地址信息生成类加载描述信息;根据所述类加载描述信息和所述初始类加载器信息生成目标类加载器信息,并将所述目标类加载器信息作为所述待执行类代码对应的类加载器信息;基于所述类加载描述信息和所述类加载器信息生成类加载描述文件。
具体的,初始类加载器信息是指待执行代码文件中记录的类加载器的名称信息、类型信息、内存标识信息,类加载器的内存标识信息;类属性信息是指待执行类代码的类名称信息;地址信息是指待执行类代码的类所在代码位置信息;目标类加载器信息是指基于类加载器信息、类属性信息和类地址信息生成的类名称信息和类加载规则信息。
基于此,确定待执行代码文件中包含的待执行类代码,根据待执行类代码的名称信息、所在位置信息确定类属性信息和类地址信息,以及根据待执行代码文件确定待执行类代码的初始类加载器信息。基于类属性信息和类地址信息生成类加载描述信息。对类加载描述信息和初始类加载器信息进行整合生成目标类加载器信息,或者,基于类加载描述信息或初始类加载器信息生成目标类加载器信息。
综上所述,根据类加载描述信息和初始类加载器信息确定类加载器信息,从而使得类加载器信息与待执行类代码相匹配,提高类加载器信息的可读性,便于后续的类加载。
进一步的,考虑到类加载器信息的可读性,可以基于类加载描述信息和初始类加载器信息生成类加载器信息,具体实现如下:
根据所述类加载描述信息和所述初始类加载器信息生成至少两个候选类加载器信息;按照预设的选择规则,在至少两个候选类加载器信息中选择目标类加载器信息,并将所述目标类加载器信息作为所述待执行类代码对应的类加载器信息。
具体的,候选类加载器信息是指基于类加载器的名称信息、类型信息、内存标识信息生成的具有可读性的可选类加载器信息;选择规则可以是按照信息长度,可区分度、词汇出现的频率、类加载器类型进行选择;相应的,目标类加载器信息即为在至少两个候选类加载器信息选择的一个候选类加载器信息。
基于此,根据类加载描述信息中的类名称信息、类地址信息,以及初始类加载器信息中的类加载器名称信息、类型信息、内存标识信息生成至少两个候选类加载器信息。按照预设的选择规则,在至少两个候选类加载器信息中选择具有可读性的目标类加载器信息,并将目标类加载器信息作为待执行类代码对应的类加载器信息。
沿用上例,可以根据类的名称信息、位置信息、类加载器的信息进行类加载器名称的制定。制定ab/jsgd/suw/hgsg、jis/hihs/h9isb/hisd等多个候选类加载名称,从而在多个候选类加载名称中选择一个作为待执行类代码对应的类加载器名称。
综上所述,根据类加载描述信息中的类名称信息、类地址信息,以及初始类加载器信息中的类加载器名称信息、类型信息、内存标识信息生成至少两个候选类加载器信息,从而在至少两个候选类加载器信息中选择具有可读性的目标类加载器信息,从而提高类加载器的名称可读性,便于执行查找和修改任务。
进一步的,由于确定了至少两个候选类加载器信息,而需要在至少两个候选类加载器信息中选择一个作为类加载器信息,因此未被选择的候选类加载器信息将会被删除,具体实现如下:
删除至少两个候选类加载器信息中除所述目标类加载器信息之外的候选类加载器信息。
基于此,在至少两个候选类加载器信息中选择了目标类加载器信之后,即可确定至少两个候选类加载器信息中,除目标类加载器信息之外的候选类加载器信息,并删除,从而达到释放存储空间,删除无效候选类加载器信息的目的。
沿用上例,图3是本说明书一个实施例提供的一种类加载方法的类加载描述文件生成示意图;如图3所示,在网页加载场景下,确定网页中各个功能对应的待执行代码文件。在生成新闻功能的类加载描述文件的情况下,确定新闻功能对应的待执行代码文件。记录阶段,记录待执行代码文件中包含的类元数据、类加载器对应的内存标识信息;预编译准备阶段,确定类数据、类加载器、代码源,将代码源聚合到类加载器维度,实现类加载规则初始分配,以及包规则加载优化,提高规则的可读性。对无效空规则进行删除。为类加载器分配可读名称,件代码源分配及冲突解决,即建立类加载器与类代码之间的关系,生成类加载描述文件,其中,在编译类及方法选择阶段,基于类加载描述文件实现类加载,过滤待执行代码文件中未加载的类,以及过滤无需编译的方法。
综上所述,通过删除至少两个候选类加载器信息中,除目标类加载器信息之外的候选类加载器信息,实现存储空间的释放,删除无效候选类加载器信息。
进一步的,在打开应用程序或网页时,由于实时的进行代码的编译、类的加载将会导致等待时间延长,因此可以通过在首次打开应用程序或网页时,进行功能对应的代码的提前编译,以及类的提前加载,具体实现如下:
接收客户端针对目标任务提交的信息获取请求;对所述信息获取请求进行解析,根据解析结果确定所述目标任务对应的目标信息作为所述信息获取请求的反馈并发送至所述客户端;基于所述目标信息确定待执行代码,并执行所述根据待执行代码文件确定类加载描述信息和类加载器信息。
具体的,目标任务可以是应用程序启动任务、网页启动任务,以及针对程序的代码测试任务;信息获取请求即为与目标任务对应的用于获取信息的计算机指令,在目标任务为网页启动任务时,信息获取请求即为获取生成网页首页的相关信息的计算机指令;相应的,目标信息即为生成网页首页的图片、文字等信息。
基于此,在接收到客户端针对目标任务提交的信息获取请求的情况下,对信息获取请求进行解析,根据解析结果确定目标任务对应的目标信息,将目标信息作为信息获取请求的响应反馈至客户端,用于客户端执行目标任务。基于目标信息确定与目标任务关联的待执行代码,并根据待执行代码文件确定类加载描述信息和类加载器信息。
沿用上例,在目标任务为网页首页的加载任务的情况下,客户端所在的用户通过点击网页链接或图标的形式向服务器发送信息获取请求,用于在客户端生成网页的首页。服务器此时确定与网页中新闻、图片、购物等功能对应的待执行代码文件,并基于待执行代码文件实现提前编译以及类代码的动态加载,从而在用户启动新闻、购物等功能时,能够缩短启动耗时。
综上所述,通过在接收到客户端针对目标任务提交的信息获取请求时确定与目标任务关联的待执行代码,从而基于待执行代码文件实现提前编译以及类代码的动态加载,在开启待执行代码文件对应的功能时,能够降低启动耗时,提高用户体验。
步骤S204:建立所述待加载类与所述类加载视图中视图窗口之间的映射关系。
具体的,在上述根据初始类加载信息生成包含待加载类的可执行代码文件和待加载类对应的类加载器,并确定类加载器对应的类加载视图之后,即可建立待加载类与类加载视图中视图窗口之间的映射关系,其中,映射关系是指待加载类与类加载视图中视图窗口之间的对应关系,即,为每个待加载类分配一个视图窗口,用于后续加载待加载类时,记录待加载类的类加载信息。
基于此,在基于类加载器信息生成待加载类对应的类加载器,并确定类加载器对应的类加载视图后,确定类加载视图中包含的视图窗口,以及确定可执行代码文件中包含的待加载类,为每个待加载类分配一个视图窗口,实现待加载类与类加载视图中视图窗口之间映射关系的建立。
实际应用中,在确定待加载类对应的视图窗口时,可以为待加载类随机分配视图窗口。
步骤S206:在调用所述类加载器,加载所述可执行代码文件中包含的目标待加载类的情况下,基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息。
具体的,在上述建立待加载类与类加载视图中视图窗口之间的映射关系之后,即可在调用类加载器,加载可执行代码文件中包含的目标待加载类的情况下,基于映射关系确定目标待加载类对应的目标视图窗口,并在目标视图窗口对应的存储位置记录目标待加载类的类加载信息,其中,目标待加载类是指在可执行代码文件中确定的需要进行加载的待加载类;目标视图窗口即为根据映射关系确定的与目标待加载类对应的类加载视图中的视图窗口;类加载信息是指在进行目标待加载类的加载时,记录的类的地址信息和类信息,用于表示目标待加载类被加载。
基于此,在建立所述待加载类与所述类加载视图中视图窗口之间的映射关系后,即可开始对可执行代码文件中的待加载类进行加载。在可执行代码文件中确定目标待加载类,在调用类加载器,加载可执行代码文件中包含的目标待加载类的情况下,基于映射关系在类加载试图中确定目标待加载类对应的目标视图窗口,并在目标视图窗口对应的存储位置记录目标待加载类的类加载信息。
进一步的,考虑到目标待加载类加载完成后,并未立即用于后续的页面更新任务,因此可以以可执行类代码的形式存储于目标存储空间,具体实现如下:
在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间。
具体的,可执行类代码即为在执行时能够生成页面的代码,用于在客户端存在页面更新需求时,向客户端发送,在客户端处实现页面加载或更新。
基于此,在通过类加载器对目标待加载类加载完成的情况下,生成目标待加载类对应的可执行类代码,将可执行类代码存储至目标存储空间,用于后续实现页面的加载或更新。当再次对目标待加载类进行加载的情况下,由于目标待加载类已经加载完成,则无需再次进行加载。
综上所述,在通过类加载器对目标待加载类加载完成的情况下,生成目标待加载类对应的可执行类代码,将可执行类代码存储至目标存储空间,实现目标待加载类的提前加载,从而提高后续任务执行速度。
进一步的,由于目标待加载类在类加载器对应的类加载视图中存在对应的类加载视图窗口。在目标待加载类首次加载时,会在类加载视图窗口对应的存储位置存储类加载信息,当再次加载目标待加载类时则无需再次加载。因此在加载每个待加载类时均可以判断该待加载类是否被加载,具体实现如下:
基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并判断所述目标视图窗口对应的存储位置是否存在存储信息;若是,执行所述在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间的步骤;若否,执行所述在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息的步骤。
具体的,存储信息是指在加载待加载类时,存储在视图窗口对应的存储位置的类加载信息。
基于此,基于映射关系在类加载器对应的类加载视图中确定目标待加载类对应的目标视图窗口。判断目标视图窗口对应的存储位置是否存在存储信息;若目标视图窗口对应的存储位置存在存储信息,表示目标待加载类正在被加载或已经加载完成,即可在目标待加载类加载完成的情况下,生成目标待加载类对应的可执行类代码并存储至目标存储空间;若目标视图窗口对应的存储位置不存在存储信息,表示目标待加载类未被加载,因此在目标视图窗口对应的存储位置记录目标待加载类的类加载信息,用于表示目标待加载类的加载结果。
沿用上例,图4是本说明书一个实施例提供的一种类加载方法的类加载示意图,如图4所示,在类包含Foo1类、BarI类、Bar1类、Bar2类,进行类加载的情况下。类加载器1和类加载器2分别对应各自待加载的类,以及类加载视图1、类加载视图2。在类加载完成时,则会在类加载视图中与类对应的视图窗口的存储位置记录类相关的信息。由图可知,类加载器1对应Foo1类、Bar1类、Bar2类,类加载器2对应BarI类、Bar1类。在类加载器2加载应BarI类时,判断类加载视图的中与BarI类对应的视图窗口的存储位置是否记录了BarI类的相关信息,若已经记录,则表示BarI类已经加载完成;若未记录,表示BarI类未被加载,则对BarI类进行加载。
综上所述,判断目标视图窗口对应的存储位置是否存在存储信息,从而确定是否需要加载目标待加载类,从而实现目标待加载类的动态加载,降低类加载的资源消耗。
进一步的,由于需要加载的待加载类数量较多,因此需要对每个待加载类加载时生成的类加载信息进行准确记录,在对目标待加载类进行加载时,可以将类加载信息记录在加载信息表中,具体实现如下:
确定所述类加载器对应的加载信息表;所述在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息,包括:在所述加载信息表中确定所述目标视图窗口对应的存储位置;在所述目标待加载类中确定初始地址信息和类信息,并基于所述初始地址信息和所述目标视图窗口对应的窗口地址确定目标地址信息;将所述目标地址信息和所述类信息作为所述类加载信息存储至所述存储位置。
具体的,加载信息表是指与类加载对应的全局偏移表,用于记录待加载类进行加载时生成的类加载信息;初始地址信息是指目标待加载类中记录的类的地址信息;类信息是指类的名称信息;窗口地址是指目标视图窗口的地址信息;相应的,目标地址信息即为经过计算后确定的用于存储在存储位置中的偏移地址。
基于此,确定类加载器对应的加载信息表。在加载信息表中确定目标视图窗口对应的存储位置,在目标待加载类中确定目标待加载类的初始地址信息和类名称信息。确定目标视图窗口对应的窗口地址。基于初始地址信息和目标视图窗口对应的窗口地址计算地址的偏移,并基于计算结果确定目标地址信息,将目标地址信息和类信息作为类加载信息存储至存储位置。
沿用上例,确定目标待加载类对应的地址,通过与GOT表(Global offset table全局偏移表)计算偏移地址,进而确定目标待加载类对应的类加载信息。
综上所述,将目标地址信息和类信息作为类加载信息存储至存储位置,从而实现在加载信息表中准确的记录目标待加载类的类加载信息,便于后续再次进行目标待加载类加载。
进一步的,在完成了目标待加载类,以及可执行代码文件中待加载类的加载的情况下,即为实现了待执行代码文件中待加载类的动态加载,具体实现如下:
在接收到目标客户端提交的页面更新请求的情况下,在所述目标存储空间确定与所述页面更新请求对应的目标类加载信息;基于所述目标类加载信息生成数据包,并反馈至所述目标客户端。
具体的,页面更新请求是指用于对客户端当前展示的页面进行更新的计算机指令,其中更新可以是通过点击当前展示的页面中的功能控件实现页面更新或页面跳转;目标类加载信息是指与页面更新请求对应的用于实现页面更新或页面跳转后页面展示的信息。
基于此,在接收到目标客户端针对目标页面提交的页面更新请求的情况下,确定与页面更新请求对应的类信息,基于类信息在目标存储空间确定与页面更新请求对应的目标类加载信息。基于目标类加载信息生成数据包,并反馈至目标客户端,用于客户端对目标页面进行更新或在目标页面的基础上进行页面跳转。
沿用上例,在用户点击网页中新闻控件时,即提交页面更新请求,确定与新闻页面对应的类信息,基于类的名称、地址等信息在目标存储空间确定用于生成新闻页面的目标类加载信息,生成数据包发送至用户所在的目标客户端,用于实现新闻页面的展示。
综上所述,通过基于类加载器信息生成待加载类对应的类加载器,确定类加载器对应的类加载视图,并建立待加载类与类加载视图中视图窗口之间的映射关系,实现了构建待加载类、类加载器与类加载视图三者之间的关联关系,从而使得后续加载待加载类时,能够在进行类的动态加载的基础上,保证类加载的正确性。通过构建待加载类、类加载器与类加载视图三者之间的关联关系,使得可以对待执行代码文件以动态类加载的方式进行提前编译,从而提高应用程序的启动速度。
下述结合附图5,以本说明书提供的类加载方法在网页动态类加载的应用为例,对所述类加载方法进行进一步说明。其中,图5示出了本说明书一个实施例提供的一种类加载方法的处理过程流程图,具体包括以下步骤。
实际应用场景下,对于应用程序的弹性能力要求越来越高,而影响弹性能力的一个关键因素即为冷启动的速度。需要应用程序冷启动的速度足够的快。例如一个在线服务的***,大部分时间访问量较低,即,10QPS。但是可能在某个特定时间段,访问量会达到100QPS,在请求量在1分钟内从10增长到100QPS的情况下,就需要在1分钟内创建新的服务来应对流量的增长,如果这个应用冷启动的时间是3分钟,那么显然是无法在1分钟内完成服务的创建。但是如果应用能在30秒内完成启动,那么就能应对在1分钟内突增的流量。
Java作为一种在服务端广泛使用的编程语言,由于自身的动态类加载以及JIT等原因,普遍启动时间较长且占用的资源较大。通过提前编译这一技术即可克服上述问题。通过将代码提前编译成具体目标机器的代码,从而避免在启动时解释执行以及JIT编译,减少CPU开销从而提升启动速度。提前编译是通过将代码先编译成目标架构的代码,从而减少运行时内存和CPU开销,提升程序运行性能的技术。但是提前编译一般不能支持动态类加载,这样就导致应用程序无法使用提前编译。因此,亟需一种有效的方法以解决上述问题。
步骤S502:确定待执行代码文件中待执行类代码的初始类加载器信息、类属性信息和类地址信息,并将待执行代码文件编译为编译文件。
在开发人员通过代码编辑器进行代码编辑以及测试场景下,根据待执行代码中的类代码确定类元数据,即,包含类名称信息的类属性信息,以及类所在的代码位置对应的地址信息。根据待执行代码确定类加载器的内存标识等类加载器信息。对待执行代码文件进行初步编译,编译为编译文件,编译即为利用编译程序从源语言编写的源程序产生目标程序的过程。
步骤S504:基于类属性信息和类地址信息生成类加载描述信息。
步骤S506:根据类加载描述信息和初始类加载器信息生成至少两个候选类加载器信息。
将类名称信息、类所在的代码位置等信息作为类加载描述信息。将类加载器信息作为初始类加载器信息。根据类数据、类加载器以及代码源,将类代码源聚合到类加载器维度。
步骤S508:按照预设的选择规则,在至少两个候选类加载器信息中选择目标类加载器信息,并将目标类加载器信息作为待执行类代码对应的类加载器信息。
根据类加载描述信息以及类加载器信息确定类加载规则,并进行类加载规则的初始分配,以及包规则加载优化。
步骤S510:删除至少两个候选类加载器信息中除目标类加载器信息之外的候选类加载器信息。
删除类加载规则中的无效空规则,并为类加载器分配可读名称,作为类加载器的类加载器信息。建立代码源和类加载器的类加载器信息之间的关系,实现代码源分配以及冲突解决。
步骤S512:基于类加载描述信息和类加载器信息生成类加载描述文件。
步骤S514:在类加载描述文件中读取类加载描述信息和类加载器信息。
步骤S516:基于类加载描述信息在编译文件中确定类代码并编译,根据编译结果确定包含待加载类的可执行代码文件。
对待执行代码文件进行初步编译,获得编译文件。
步骤S518:基于类加载器信息生成待加载类对应的类加载器,并确定类加载器对应的类加载视图。
步骤S520:建立待加载类与类加载视图中视图窗口之间的映射关系。
实际应用中,在多人同时进行类加载时,由于每个人对应的类加载器不同,因此每个人可以对应一个类加载器。进而在后续的类动态加载的过程中,能够起到隔离的作用,避免类加载错误的产生,以及对已经加载的类进行卸载造成的影响。
步骤S522:在调用类加载器,加载可执行代码文件中包含的目标待加载类的情况下,确定类加载器对应的加载信息表;在加载信息表中确定目标视图窗口对应的存储位置;确定目标待加载类对应的类加载信息并存储至目标视图窗口对应存储位置。
一般的AOT编译的代码在运行时若确定任意一个类没有被加载,则会对该类进行加载,加载完成后,将类加载信息填充至GOT表中。再次加载该类时则无需进行重复加载。
为了支持动态类加载,由于无法事先知道有多少类加载器,所以动态的创建类加载视图,每个类加载视图与类加载器一一对应。
综上所述,通过基于类加载器信息生成待加载类对应的类加载器,确定类加载器对应的类加载视图,并建立待加载类与类加载视图中视图窗口之间的映射关系,实现了构建待加载类、类加载器与类加载视图三者之间的关联关系,从而使得后续加载待加载类时,能够在进行类的动态加载的基础上,保证类加载的正确性。通过构建待加载类、类加载器与类加载视图三者之间的关联关系,使得可以对待执行代码文件以动态类加载的方式进行提前编译,从而提高应用程序的启动速度。
与上述方法实施例相对应,本说明书还提供了类加载装置实施例,图6示出了本说明书一个实施例提供的一种类加载装置的结构示意图。如图6所示,该装置应用于服务器,包括:
确定模块602,被配置为根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图;
映射关系建立模块604,被配置为建立所述待加载类与所述类加载视图中视图窗口之间的映射关系;
加载模块606,被配置为在调用所述类加载器,加载所述可执行代码文件中包含的目标待加载类的情况下,基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息。
一个可选地实施例,所述第一确定模块602,进一步被配置为:
根据待执行代码文件确定所述初始类加载信息,并将所述待执行代码文件编译为编译文件;基于所述初始类加载信息中的类加载描述信息在所述编译文件中确定类代码并编译,根据编译结果确定包含待加载类的可执行代码文件;基于所述初始类加载信息中的类加载器信息生成所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图。
一个可选地实施例,所述第一确定模块602,进一步被配置为:
基于所述待执行代码文件生成类加载描述文件;在所述类加载描述文件中读取所述类加载描述信息和所述类加载器信息,并作为所述初始类加载信息。
一个可选地实施例,所述第一确定模块602,进一步被配置为:
确定待执行代码文件中待执行类代码的初始类加载器信息、类属性信息和类地址信息;基于所述类属性信息和所述类地址信息生成类加载描述信息;根据所述类加载描述信息和所述初始类加载器信息生成目标类加载器信息,并将所述目标类加载器信息作为所述待执行类代码对应的类加载器信息;基于所述类加载描述信息和所述类加载器信息生成类加载描述文件。
一个可选地实施例,所述第一确定模块602,进一步被配置为:
根据所述类加载描述信息和所述初始类加载器信息生成至少两个候选类加载器信息;按照预设的选择规则,在至少两个候选类加载器信息中选择目标类加载器信息,并将所述目标类加载器信息作为所述待执行类代码对应的类加载器信息。
一个可选地实施例,所述第一确定模块602,还被配置为:
删除至少两个候选类加载器信息中除所述目标类加载器信息之外的候选类加载器信息。
一个可选地实施例,所述第一加载模块606,还被配置为:
在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间。
一个可选地实施例,所述第一加载模块606,进一步被配置为:
基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并判断所述目标视图窗口对应的存储位置是否存在存储信息;若是,执行所述在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间的步骤;若否,执行所述在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息的步骤。
一个可选地实施例,所述第一加载模块606,还被配置为:
确定所述类加载器对应的加载信息表;所述在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息,包括:在所述加载信息表中确定所述目标视图窗口对应的存储位置;在所述目标待加载类中确定初始地址信息和类信息,并基于所述初始地址信息和所述目标视图窗口对应的窗口地址确定目标地址信息;将所述目标地址信息和所述类信息作为所述类加载信息存储至所述存储位置。
一个可选地实施例,所述第一确定模块602,还被配置为:
接收客户端针对目标任务提交的信息获取请求;对所述信息获取请求进行解析,根据解析结果确定所述目标任务对应的目标信息作为所述信息获取请求的反馈并发送至所述客户端;基于所述目标信息确定待执行代码,并执行所述根据待执行代码文件确定类加载描述信息和类加载器信息。
一个可选地实施例,所述第一加载模块606,还被配置为:
在接收到目标客户端提交的页面更新请求的情况下,在所述目标存储空间确定与所述页面更新请求对应的目标类加载信息;基于所述目标类加载信息生成数据包,并反馈至所述目标客户端。
综上所述,通过基于类加载器信息生成待加载类对应的类加载器,确定类加载器对应的类加载视图,并建立待加载类与类加载视图中视图窗口之间的映射关系,实现了构建待加载类、类加载器与类加载视图三者之间的关联关系,从而使得后续加载待加载类时,能够在进行类的动态加载的基础上,保证类加载的正确性。通过构建待加载类、类加载器与类加载视图三者之间的关联关系,使得可以对待执行代码文件以动态类加载的方式进行提前编译,从而提高应用程序的启动速度。
上述为本实施例的一种类加载装置的示意性方案。需要说明的是,该类加载装置的技术方案与上述的类加载方法的技术方案属于同一构思,类加载装置的技术方案未详细描述的细节内容,均可以参见上述类加载方法的技术方案的描述。
与上述方法实施例相对应,本说明书还提供了类加载***实施例,图7示出了本说明书一个实施例提供的一种类加载***的结构示意图。如图7所示,该类加载***700,包括:客户端710和服务器720;
所述服务器720,响应于所述客户端710针对初始页面提交的页面信息获取请求确定待执行代码文件;根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图;建立所述待加载类与所述类加载视图中视图窗口之间的映射关系;在调用所述类加载器,加载所述可执行代码文件中包含的目标待加载类的情况下,基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息;在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间;在接收到所述客户端提交的页面更新请求的情况下,在所述目标存储空间确定所述页面更新请求对应的目标可执行代码并反馈至所述客户端710;
所述客户端710,基于所述目标可执行代码对所述初始页面进行更新。
实际应用中,在进行应用程序启动时,针对包含应用程序的初始页面提交页面信息获取请求,用于启动应用程序。服务器同时获取应用程序中各个功能模块对应的待执行代码文件。对代码文件进行提前编译以及类的动态加载。在进行类加载时,确定待执行代码文件,根据待执行代码文件确定类加载描述信息和类加载器信息。对待执行代码文件进行编译获得编译文件,再基于类加载描述信息在编译文件中确定类代码并编译,根据编译结果确定包含待加载类的可执行代码文件。基于类加载器信息构建待加载类对应的类加载器,并确定类加载器对应的类加载视图。建立待加载类与类加载视图中视图窗口之间的映射关系。
在调用类加载器,加载可执行代码文件中包含的目标待加载类的情况下,基于映射关系确定目标待加载类对应的目标视图窗口,并在目标视图窗口对应的存储位置记录目标待加载类的类加载信息。在编译代码中需要加载的类代码均加载完成的情况下,即完成了提前编译,从而提高后续任务的执行速度。在客户端存在启动应用程序中任意功能的需求时,针对该功能模块提交页面更新请求,服务器响应于页面更新请求通过协议与客户端进行数据传输,客户端进行界面更新。
通过基于类加载器信息生成待加载类对应的类加载器,确定类加载器对应的类加载视图,并建立待加载类与类加载视图中视图窗口之间的映射关系,实现了构建待加载类、类加载器与类加载视图三者之间的关联关系,从而使得后续加载待加载类时,能够在进行类的动态加载的基础上,保证类加载的正确性。通过构建待加载类、类加载器与类加载视图三者之间的关联关系,使得可以对待执行代码文件以动态类加载的方式进行提前编译,从而提高应用程序的启动速度。
综上所述,通过确定类加载器对应的类加载视图,并建立待加载类与类加载视图中视图窗口之间的映射关系,实现了构建待加载类、类加载器与类加载视图三者之间的关联关系,从而使得后续加载待加载类时,能够在进行类的动态加载的基础上,保证类加载的正确性。通过构建待加载类、类加载器与类加载视图三者之间的关联关系,使得可以对待执行代码文件以动态类加载的方式进行提前编译,从而提高应用程序的启动速度。
图8示出了根据本说明书一个实施例提供的一种计算设备800的结构框图。该计算设备800的部件包括但不限于存储器810和处理器820。处理器820与存储器810通过总线830相连接,数据库850用于保存数据。
计算设备800还包括接入设备840,接入设备840使得计算设备800能够经由一个或多个网络860通信。这些网络的示例包括公用交换电话网(PSTN,Public SwitchedTelephone Network)、局域网(LAN,Local Area Network)、广域网(WAN,Wide AreaNetwork)、个域网(PAN,Personal Area Network)或诸如因特网的通信网络的组合。接入设备840可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC,networkinterface controller))中的一个或多个,诸如IEEE802.11无线局域网(WLAN,WirelessLocal Area Network)无线接口、全球微波互联接入(Wi-MAX,WorldwideInteroperability for Microwave Access)接口、以太网接口、通用串行总线(USB,Universal Serial Bus)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC,Near FieldCommunication)。
在本说明书的一个实施例中,计算设备800的上述部件以及图8中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图8所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备800可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或个人计算机(PC,Personal Computer)的静止计算设备。计算设备800还可以是移动式或静止式的服务器。
其中,处理器820用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述类加载方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的类加载方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述类加载方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述类加载方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的类加载方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述类加载方法的技术方案的描述。
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述类加载方法的步骤。
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的类加载方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述类加载方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据专利实践的要求进行适当的增减,例如在某些地区,根据专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。

Claims (14)

1.一种类加载方法,应用于服务器,包括:
根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图,其中,所述初始类加载信息基于类加载描述信息和类加载器信息确定;所述类加载描述信息由待执行代码文件中待执行类代码对应的类属性信息和类地址信息组成;所述类加载器信息由所述类加载描述信息和所述待执行代码文件中待执行类代码对应的初始类加载器信息生成;
建立所述待加载类与所述类加载视图中视图窗口之间的映射关系;
在调用所述类加载器,加载所述可执行代码文件中包含的目标待加载类的情况下,基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息。
2.根据权利要求1所述的方法,所述,根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图,包括:
根据待执行代码文件确定所述初始类加载信息,并将所述待执行代码文件编译为编译文件;
基于所述初始类加载信息中的类加载描述信息在所述编译文件中确定类代码并编译,根据编译结果确定包含待加载类的可执行代码文件;
基于所述初始类加载信息中的类加载器信息生成所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图。
3.根据权利要求2所述的方法,所述根据待执行代码文件确定所述初始类加载信息,包括:
基于所述待执行代码文件生成类加载描述文件;
在所述类加载描述文件中读取所述类加载描述信息和所述类加载器信息,并作为所述初始类加载信息。
4.根据权利要求3所述的方法,所述基于所述待执行代码文件生成类加载描述文件,包括:
确定待执行代码文件中待执行类代码的初始类加载器信息、类属性信息和类地址信息;
基于所述类属性信息和所述类地址信息生成类加载描述信息;
根据所述类加载描述信息和所述初始类加载器信息生成目标类加载器信息,并将所述目标类加载器信息作为所述待执行类代码对应的类加载器信息;
基于所述类加载描述信息和所述类加载器信息生成类加载描述文件。
5.根据权利要求4所述的方法,所述根据所述类加载描述信息和所述初始类加载器信息生成目标类加载器信息,并将所述目标类加载器信息作为所述待执行类代码对应的类加载器信息,包括:
根据所述类加载描述信息和所述初始类加载器信息生成至少两个候选类加载器信息;
按照预设的选择规则,在至少两个候选类加载器信息中选择目标类加载器信息,并将所述目标类加载器信息作为所述待执行类代码对应的类加载器信息。
6.根据权利要求5所述的方法,所述方法,还包括:
删除至少两个候选类加载器信息中除所述目标类加载器信息之外的候选类加载器信息。
7.根据权利要求1所述的方法,所述方法,还包括:
在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间。
8.根据权利要求7所述的方法,所述基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息,包括:
基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并判断所述目标视图窗口对应的存储位置是否存在存储信息;
若是,执行所述在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间的步骤;
若否,执行所述在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息的步骤。
9.根据权利要求1所述的方法,所述确定所述类加载器对应的类加载视图步骤执行之后,还包括:
确定所述类加载器对应的加载信息表;
所述在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息,包括:
在所述加载信息表中确定所述目标视图窗口对应的存储位置;
在所述目标待加载类中确定初始地址信息和类信息,并基于所述初始地址信息和所述目标视图窗口对应的窗口地址确定目标地址信息;
将所述目标地址信息和所述类信息作为所述类加载信息存储至所述存储位置。
10.根据权利要求1-9任意一项所述的方法,所述根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器之前,还包括:
接收客户端针对目标任务提交的信息获取请求;
对所述信息获取请求进行解析,根据解析结果确定所述目标任务对应的目标信息作为所述信息获取请求的反馈并发送至所述客户端;
基于所述目标信息确定待执行代码,并执行所述根据待执行代码文件确定类加载描述信息和类加载器信息。
11.根据权利要求7所述的方法,所述在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间步骤执行之后,还包括:
在接收到目标客户端提交的页面更新请求的情况下,在所述目标存储空间确定与所述页面更新请求对应的目标类加载信息;
基于所述目标类加载信息生成数据包,并反馈至所述目标客户端。
12.一种类加载***,包括服务器和客户端;
所述服务器,响应于所述客户端针对初始页面提交的页面信息获取请求确定待执行代码文件;根据初始类加载信息生成包含待加载类的可执行代码文件和所述待加载类对应的类加载器,并确定所述类加载器对应的类加载视图,其中,所述初始类加载信息基于类加载描述信息和类加载器信息确定;所述类加载描述信息由待执行代码文件中待执行类代码对应的类属性信息和类地址信息组成;所述类加载器信息由所述类加载描述信息和所述待执行代码文件中待执行类代码对应的初始类加载器信息生成;建立所述待加载类与所述类加载视图中视图窗口之间的映射关系;在调用所述类加载器,加载所述可执行代码文件中包含的目标待加载类的情况下,基于所述映射关系确定所述目标待加载类对应的目标视图窗口,并在所述目标视图窗口对应的存储位置记录所述目标待加载类的类加载信息;在所述目标待加载类加载完成的情况下,生成所述目标待加载类对应的可执行类代码并存储至目标存储空间;在接收到所述客户端提交的页面更新请求的情况下,在所述目标存储空间确定所述页面更新请求对应的目标可执行代码并反馈至所述客户端;
所述客户端,基于所述目标可执行代码对所述初始页面进行更新。
13.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至11任意一项所述方法的步骤。
14.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至11任意一项所述方法的步骤。
CN202311228738.9A 2023-09-21 2023-09-21 类加载方法及*** Active CN116974653B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311228738.9A CN116974653B (zh) 2023-09-21 2023-09-21 类加载方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311228738.9A CN116974653B (zh) 2023-09-21 2023-09-21 类加载方法及***

Publications (2)

Publication Number Publication Date
CN116974653A CN116974653A (zh) 2023-10-31
CN116974653B true CN116974653B (zh) 2024-01-09

Family

ID=88473399

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311228738.9A Active CN116974653B (zh) 2023-09-21 2023-09-21 类加载方法及***

Country Status (1)

Country Link
CN (1) CN116974653B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110750315A (zh) * 2019-12-23 2020-02-04 武汉斗鱼鱼乐网络科技有限公司 Android***中的类加载方法、装置、设备和存储介质
CN111324359A (zh) * 2020-02-27 2020-06-23 支付宝(杭州)信息技术有限公司 插件部署方法及装置
CN111736913A (zh) * 2019-03-25 2020-10-02 华为技术有限公司 类加载方法和装置
CN112364275A (zh) * 2020-11-10 2021-02-12 平安普惠企业管理有限公司 页面加载方法、装置、设备及存储介质
CN114253587A (zh) * 2021-12-17 2022-03-29 中电金信软件有限公司 应用程序更新方法、装置、电子设备及可读存储介质
CN115576560A (zh) * 2022-09-22 2023-01-06 摩尔元数(福建)科技有限公司 一种动态类加载器的热重载方法、装置、设备和介质
CN116594717A (zh) * 2023-05-24 2023-08-15 上海汉朔信息科技有限公司 一种类加载隔离方法、装置、设备及介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9286085B2 (en) * 2014-06-27 2016-03-15 International Business Machines Corporation Correlating class loader objects across execution environments

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111736913A (zh) * 2019-03-25 2020-10-02 华为技术有限公司 类加载方法和装置
CN114153521A (zh) * 2019-03-25 2022-03-08 华为技术有限公司 类加载方法和装置
CN110750315A (zh) * 2019-12-23 2020-02-04 武汉斗鱼鱼乐网络科技有限公司 Android***中的类加载方法、装置、设备和存储介质
CN111324359A (zh) * 2020-02-27 2020-06-23 支付宝(杭州)信息技术有限公司 插件部署方法及装置
CN112364275A (zh) * 2020-11-10 2021-02-12 平安普惠企业管理有限公司 页面加载方法、装置、设备及存储介质
CN114253587A (zh) * 2021-12-17 2022-03-29 中电金信软件有限公司 应用程序更新方法、装置、电子设备及可读存储介质
CN115576560A (zh) * 2022-09-22 2023-01-06 摩尔元数(福建)科技有限公司 一种动态类加载器的热重载方法、装置、设备和介质
CN116594717A (zh) * 2023-05-24 2023-08-15 上海汉朔信息科技有限公司 一种类加载隔离方法、装置、设备及介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Accurate Reification of Complete Supertype Information for Dynamic Analysis on the JVM;Rosa, Andrea等;《ACM SIGPLAN NOTICES》;第52卷;全文 *
Java动态类加载机制应用研究;孙彬;;科技创新与应用(第23期);全文 *
Java动态类加载机制研究及应用;黄军;《信息与电脑(理论版)》(4);全文 *

Also Published As

Publication number Publication date
CN116974653A (zh) 2023-10-31

Similar Documents

Publication Publication Date Title
CN109814854B (zh) 项目框架生成方法、装置、计算机设备和存储介质
CN109240697B (zh) 调用处理方法及装置、存储介质
CN106648755B (zh) 一种在安卓art环境中动态加载dex的方法及装置
CN110365724B (zh) 任务处理方法、装置及电子设备
WO2015131804A1 (en) Call stack relationship acquiring method and apparatus
US10606477B1 (en) Intelligent keyboard
CN110858172A (zh) 一种自动化测试代码生成方法和装置
CN111949522A (zh) 用户界面自动化测试方法及装置
CN114036439A (zh) 网站搭建方法、装置、介质及电子设备
CN111488286B (zh) 一种Android模块独立开发的方法及装置
CN114489603A (zh) 代码生成方法、装置、电子设备、介质和产品
CN112115056B (zh) 一种项目部署方法和装置、服务器、存储介质
CN116974653B (zh) 类加载方法及***
CN111158777A (zh) 组件调用方法、装置及计算机可读存储介质
CN111400623B (zh) 用于搜索信息的方法和装置
CN115016775A (zh) 接口模拟方法及装置、存储介质及电子设备
CN115048082A (zh) 微前端***构建方法、装置、服务器及可读存储介质
CN113495723A (zh) 一种调用功能组件的方法、装置及存储介质
CN106570143B (zh) 一种发送响应对象的方法和装置
CN111966506A (zh) 基于不同应用程序的内容分享方法和计算机设备
CN111427770A (zh) 一种资源测试方法及相关设备
CN112306649B (zh) 管理进程的方法和装置
CN113805968B (zh) 应用程序的功能执行方法、装置、计算机设备和存储介质
CN113608996B (zh) 一种镜像编译测试方法、***、装置及可读存储介质
US20230385075A1 (en) Networked Universal Code Package Provider

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant